如何在多站点安装时从工具栏中删除站点范围内的节点

时间:2014-10-18 作者:acrane

如果您不在您的某个站点上,即您在WordPress多站点安装中未管理的其他站点上,我下面的删除节点功能将不起作用,因为它会检查当前的博客id。

我想为“我的网站”下拉列表中的每个人禁用工具栏中的仪表板链接(和其他链接),无论他们查看的是谁的网站。

是否有方法在站点范围内删除节点?由于remove\\u节点是基于blog id的,所以我很难想出一种方法来实现这一点。

add_action( \'admin_bar_menu\', \'remove_toolbar_items\', 999 );

function remove_toolbar_items( $wp_admin_bar ) {

   $blog_id = get_current_blog_id(); // get blog id

   $wp_admin_bar->remove_node( \'blog-\' . $blog_id . \'-d\' ); // Dashboard
   $wp_admin_bar->remove_node( \'blog-\' . $blog_id . \'-c\' );  // Manage Comments
   $wp_admin_bar->remove_node( \'new-media\' );
   $wp_admin_bar->remove_node( \'wp-logo\' );
}

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

要获取用户注册到的所有博客/子网站,请使用get_blogs_of_user()

$sites = get_blogs_of_user( get_current_user_id() );
这将获取所有未标记为已存档、垃圾邮件或已删除的网站。这同样适用于单站点环境,返回一个具有单个数字键的数组,该数字键具有stdClass 对象作为值:

$sites = array( 0 => stdClass
    userblog_id -> $blog_id
    blogname    -> get_option(\'blogname\')
    domain      -> \'\'
    path        -> \'\'
    site_id     -> 1
    siteurl     -> get_option(\'siteurl\')
    archived    -> 0
    spam        -> 0
    deleted     -> 0
);
如果是多站点环境,它将使用get_blog_details() 获取站点详细信息。

请注意,在get_blog_details() 用于调整返回的详细信息的函数:

$details = apply_filters( \'blog_details\', $details );
请注意,在get_blogs_of_user() 用于调整返回对象的函数:

return apply_filters( \'get_blogs_of_user\', $blogs, $user_id, $all );
然后,您可以使用以下内容调整管理栏节点:

<?php
/** Plugin Name: WPSE (#165787) Remove Admin Toolbar Comments, Dashboards, Media & Logo */

add_action( \'admin_bar_menu\', \'remove_toolbar_items\', PHP_INT_MAX -1 );
function remove_toolbar_items( $bar )
{
    $sites = get_blogs_of_user( get_current_user_id() );
    foreach ( $sites as $site )
    {
        $bar->remove_node( "blog-{$site->userblog_id}-c" );
        $bar->remove_node( "blog-{$site->userblog_id}-d" );
    }
    $bar->remove_node( \'new-media\' );
    $bar->remove_node( \'wp-logo\' );
}
注意,上面的插件没有经过测试,所以您可能需要var_dump( $site );foreach() 循环和$bar 查看是否正在删除正确的节点(或任何节点)。

结束

相关推荐

Multisite Widget/Content

我正在使用WordPress multisite,需要在侧边栏中显示所有子网站的内容。这是一个由50多个站点组成的网络,因此每隔几天用此内容更新所有50多个侧栏是不现实的。我找到的一个解决方案是简单地将我想要的内容插入侧边栏。虽然我不希望我的客户机编辑这个文件,但我希望他们使用TinyMCE编辑器而不是HTML。另一个想法是在每个子网站中嵌入一个iframe,让我的客户端更新iframe引用的页面。我的最后一个想法是用TinyMCE编辑器创建一个插件,将代码注入侧栏。php文件保存时,虽然我不知道插件是否