답변:
여기에 대한 답변은 과대 평가되고 너무 복잡합니다. 활성화를 막는 대신 플러그인을 비활성화하는 이유는 무엇입니까? 활성화시 die ( '여기에서 오류 메시지)를 호출하는 것만 큼 간단한 작업이 수행됩니다.
function activate($networkwide) {
if (is_multisite() && $networkwide)
die('This plugin can\'t be activated networkwide');
}
register_activation_hook('your-plugin/index.php','activate');
그런 다음 패널에서 활성화하려고하면 페이지 상단에 오류 메시지와 함께 멋진 오류가 발생합니다.
플러그인 헤더 Network: false
는 불행히도 WordPress…에서 무시됩니다. 그러나 활성화 훅에는 매개 변수 $network_wide
가 있으며 활성화하는 동안 플러그인을 비활성화하는 데 사용할 수 있습니다.
<?php
/**
* Plugin Name: Prevent Network Activation
* Plugin URI: http://wordpress.stackexchange.com/questions/76145/prevent-network-activation-of-plugin
* Network: false
*
* Note the 'Network' option will be ignored by WordPress.
*/
register_activation_hook( __FILE__, 'pna_check_network_activation' );
function pna_check_network_activation( $network_wide )
{
if ( ! $network_wide )
return;
deactivate_plugins( plugin_basename( __FILE__ ), TRUE, TRUE );
header( 'Location: ' . network_admin_url( 'plugins.php?deactivate=true' ) );
exit;
}
네트워크 플러그인 목록에서 간단히 숨길 수 있습니다.
add_filter( 'all_plugins', 'wpse_76145_hide_network_plugin' );
function wpse_76145_hide_network_plugin( $all )
{
global $current_screen;
if( $current_screen->is_network )
unset($all['akismet/akismet.php']);
return $all;
}
일회성 네트워크 관리자 알림을 표시합니다. Q & A add_role ()을 한 번만 실행하면 되나요? .
add_action( 'network_admin_notices', 'wpse_76145_admin_notice' );
function wpse_76145_admin_notice()
{
global $current_screen;
if( 'plugins-network' == $current_screen->id )
{
if ( wpse_25643_run_once( 'hide_akismet_network' ) )
echo '<div class="error">Akismet not available in Network mode</div>';
}
}
function wpse_25643_run_once( $key )
{
$test_case = get_option( 'run_once' );
if ( isset( $test_case[$key] ) && $test_case[$key] )
{
return false;
}
else
{
$test_case[$key] = true;
update_option( 'run_once',$test_case );
return true;
}
}
또는이 다른 기술을 사용하십시오 . 관리 영역에 처음 로그인 할 때 사용자에게 알림 추가
(이것은 테스트되지 않았습니다)
add_action( 'activated_plugin', 'wpse76145_no_network_activation',10,2 );
function wpse76145_no_network_activation( $plugin, $network_wide){
if( $plugin == 'myplugin/myplugin.php' && $network_wide ){
//Plugin was network activated
//Network deactivate
deactivate_plugins( $plugin,false, true );
//Activate on single site
activate_plugins( $plugin);
add_option('wpse76145_network_activate_notice',1);
}
}
그런 다음 옵션 을 admin_notices
확인 wpse76145_network_activate_notice
하고 알림을 표시하십시오.
참고 : 'myplugin / myplugin.php'를 하드 코딩하지 않는 것이 좋습니다.-교체하면 효과가 있다고 생각합니다 plugin_basename(__FILE__);
.
다중 사이트 활성화가 정상이면 편집switch_to_blog()
하여 각 플러그인에서 개별적으로 활성화 하는 데 사용할 수 있습니다 . 사용자가 요청한 내용을 수행하지 않았으므로 여전히 알림을 표시합니다.
wp_die
거기에 넣고 리디렉션을 건너 뛸 수 있었지만 설명없이 비활성화하는 것보다 덜 끈적 거리는 것 같습니다. :)