Intereting Posts
Дополнительные пользовательские поля WYSIWYG Больше тегов home_url (); показ текущей страницы вместо адреса сайта Как перекрыть подключаемую функцию API AdWords с WP Пользовательский ходок для Walker_Nav_Menu Правило перезаписи отображает 404 страницы Как создать собственный .php-файл с частью кода и повторить его на разных страницах? Заблокирован из моего собственного блога и сброс пароля не работает Как использовать SMTP-настройки «phpmailer_init» только для определенных действий «wp_mail»? Получить значение customizer с помощью ajax или customizer api и напечатать значение в теме Могу ли я иметь типы сообщений в других типах сообщений в меню администратора? Поместите код в теги тела вверху, используя плагин Изменение фона каждого сообщения в соответствии с категорией Пользовательский тег привязки Walker, не наследующий атрибуты Как создать страницу параметров на лицевой стороне

Добавление меню плагина в многопользовательском режиме

$wp_admin_bar->add_menu( array( 'parent' => $menu_id, 'id' => $menu_id . '-example', 'title' => __( 'Example Menu Item', 'example' ), 'href' => get_admin_url( $blog->userblog_id, 'edit.php?post_type=example' ), ) ); 

Допустим, у меня есть плагин, который добавляет новый пункт меню для примера пользовательского типа сообщения в меню блогов. Проблема в том, что у меня много блогов, но этот плагин активирован только на одном блоге, его единственный показ, когда я нахожусь в этом блоге, и добавляю примерное меню в каждую группу меню блога, даже если этот плагин не активирован в этих блогах.

Пример: я активирую плагин в блоге: 2, но не активировал его в blogid: 3 или blogid: 4. Когда я в блоге: плагин добавляет это меню ко всем блогам. Когда я нахожусь в блоге: 3 или blogid: 4, я не могу увидеть это меню в блоге: список 2 Что такое правильный способ исправить это?

Обновление: я пытаюсь добавить эти ссылки для каждого блога, активирующего этот плагин в списке «Мои сайты»

Ответ переделан и теперь работает согласно спецификациям вопроса.

Чтобы добавить элемент меню на каждый сайт сети, если конкретный плагин активен на этом сайте, я использую плагин Must Use . Он работает только если is_multisite() и if is_admin_bar_showing() .

В этом примере плагин создается с помощью следующих значений, которые проверяют плагин Analytics360º и удаляют все пункты меню по умолчанию:

  • Название пункта меню : Analytics360
  • Плагин для проверки : analytics360/analytics360.php
  • URL-адрес элемента меню : index.php?page=analytics360.php
  • Удалить значения по умолчанию : array( 'newpost', 'comments', 'visit', 'dashboard' )

плагин в действии

плагин в действии

 <?php /** * Plugin Name: Modify My Sites admin menu * Plugin URI: http://wordpress.stackexchange.com/q/55724/12615 * Description: Add an admin menu link to specific plugin, if it is active in the site. Can remove default items as well. * Author: Rodolfo Buaiz * Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo * License: GPLv3 * * Class based in http://wordpress.stackexchange.com/a/77236/12615 **/ WPSE_55724_My_Sites_Extra_Items::init( 'Analytics360', // Menu item title 'analytics360/analytics360.php', // Plugin to check for 'index.php?page=analytics360.php', // Menu item URL array( 'newpost', 'comments', 'visit', 'dashboard' ) // Remove defaults ); class WPSE_55724_My_Sites_Extra_Items { private static $ins = null; private static $title = null; private static $plugin_file = null; private static $plugin_page = null; private static $remove_defaults = null; public static function instance() { is_null( self::$ins ) && self::$ins = new self; return self::$ins; } public static function init( $title, $plugin_file, $plugin_page, $remove_defaults ) { self::$title = $title; self::$plugin_file = $plugin_file; self::$plugin_page = $plugin_page; self::$remove_defaults = $remove_defaults; if( is_multisite() ) add_action( 'plugins_loaded', array( self::instance(), '_setup' ) ); } public function _setup() { if( is_admin_bar_showing() ) add_action( 'admin_bar_menu', array( $this, 'add_items' ), 9999 ); } /** * The global var is passed by reference in a do_action_ref_array */ public function add_items( $wp_admin_bar ) { foreach ( (array) $wp_admin_bar->user->blogs as $blog ) { switch_to_blog( $blog->userblog_id ); // Current menu ID $menu_id = 'blog-' . $blog->userblog_id; // Add URL to current-site/wp-admin/plugins.php $wp_admin_bar->add_menu( array( 'parent' => $menu_id, 'id' => $menu_id . '-p', 'title' => __( 'Plugins' ), 'href' => admin_url( 'plugins.php' ), ) ); // Remove default menu items $this->remove_items( &$wp_admin_bar, self::$remove_defaults, $menu_id ); // Add custom menu for chosen Plugin it active in current site or network activated if( current_user_can( 'manage_options' ) && ( $this->is_plugin_active( self::$plugin_file ) || $this->is_plugin_active_for_network( self::$plugin_file ) ) ) { $wp_admin_bar->add_menu( array( 'parent' => $menu_id, 'id' => $menu_id . '-my-p', 'title' => self::$title, 'href' => admin_url( self::$plugin_page ), ) ); } restore_current_blog(); } } /** * */ private function remove_items( $wp_admin_bar, $items, $menu_id ) { if( in_array( 'newpost', $items ) ) $wp_admin_bar->remove_menu( $menu_id . '-n' ); // New Post if( in_array( 'comments', $items ) ) $wp_admin_bar->remove_menu( $menu_id . '-c' ); // Comments if( in_array( 'visit', $items ) ) $wp_admin_bar->remove_menu( $menu_id . '-v' ); // Visit Site if( in_array( 'dashboard', $items ) ) $wp_admin_bar->remove_menu( $menu_id . '-d' ); // Dashboard } /** * WP function uses is_plugin_active_for_network * which doesn't work in frontend */ private function is_plugin_active( $plugin ) { return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ); } private function is_plugin_active_for_network( $plugin ) { $plugins = get_site_option( 'active_sitewide_plugins'); if ( isset($plugins[$plugin]) ) return true; return false; } }