Intereting Posts
Если Post имеет видеоизображение в виде миниатюры сообщения, еще раз отобразите изображение Получение значения URL из пункта меню по ID WordPress Rewrite отказывается работать переадресовать петлю на страницу, не удается найти источник, не удается удалить Overide enqueue в не подключаемой функции через дочернюю тему Breadcrumb не показывает тип персонализированной категории Как вставить некоторые строки файла журнала в пользовательскую страницу администратора почтовый счет ошибочен при использовании той же таксономии для двух разных CPT Ширина автоматической обрезки, а не высота Обслуживание HTTP и HTTPS с одной установки Как использовать аутентификацию OAuth с API REST через команды CURL? разница между $ wp_the_query и $ wp_query? & правильное получение значений Как удалить параметр редактирования плагина? Сообщения из пользовательского типа сообщений, не отображаемые в архиве категории Добавить столбец в WP пользователь, но он пойдет не так

Предотвращение активации сети плагином

У меня есть плагин, который в настоящее время не поддерживает активацию сети. Лучшим решением для этого, конечно, является исправить это :), который я планирую сделать. Однако я задаюсь вопросом, есть ли временное решение, которое я могу использовать для предотвращения активации сети, тем временем, возможно, рабочий процесс похож на:

  1. Обнаруживать, если активация в сети (как?)
  2. Покажите сообщение, что он в настоящее время не поддерживается, и я воняю, извините
  3. Прерывание активации или деактивации

Или, другие предложения приняты. Благодарю.

Для уточнения: активация Multisite прекрасна, просто не активируется в сети.

Solutions Collecting From Web of "Предотвращение активации сети плагином"

Ответы здесь чрезмерны и слишком сложны. Почему деактивация плагина вместо предотвращения активации? Что-то простое, как вызов 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; } с 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() , тогда вы можете использовать switch_to_blog() для активации каждого подключаемого модуля по отдельности. Я все равно покажу уведомление, так как вы не сделали то, что пользователь спросил.