Wordpress Multisite - 为functions.php添加功能,仅影响1个站点

时间:2015-02-22 10:41:38

标签: php wordpress

我正在运行带有2个博客的wordpress多站点(site1.com和site2.com)

整个网站共享相同的主题以及functions.php文件。

我需要将以下过滤器放入function.php文件中,但我需要此过滤器才能影响1个博客 - site2.com

过滤器如下:

add_filter( 'get_manager_nav', 'set_manager_nav' );

function set_manager_nav( $urls ) {
    unset($urls['voucher']);
    return $urls;
} 

有没有办法将此过滤器仅应用于1个站点?

我所做的是我创建了一个新的插件,我已经将该功能添加到插件中并仅在site2.com上激活了该插件。

它运行良好,但我认为使用简单的代码段比使用插件要好得多,所以有没有办法使用代码片段来实现这一点?

2 个答案:

答案 0 :(得分:1)

这有点棘手。在添加过滤器之前,您可能必须检查站点名称或ID。

您的功能保持不变,但过滤器部分变为:

$current_site = get_current_site();
if($current_site->domain == 'site2.com')
   add_filter( 'get_manager_nav', 'set_manager_nav' );

您可以阅读有关get_current_site()here的更多信息。

答案 1 :(得分:0)

在我看来,在多站点内定位一个子站点的最佳方法是在过滤器调用的函数中使用get_current_blog_id()函数。以下是一些可行的代码示例:

<?php
function function_to_call(){

    if( get_current_blog_id() === 1 ){
        // Return something if the site ID matches the number one...
    }

    // Return something if the site ID does not match the number 1
}
add_filter( 'filter_name', 'function_to_call' );
?>

您可以转到https://example.org/wp-admin/network/sites.php,其中https://example.org替换为您的域名,从而获取您要定位的网站的ID。

这种方法比这里列出的其他方法有一些好处。

  1. 如果您使用不同的域有多个版本的多站点安装,这将有效。例如,您可能拥有http://localhost/site1,site1.example.org和site1.staging.example.org。如果您检查了域,则过滤器将在除生产之外的每个站点上中断。如果您使用该ID,它应该全面运作。
  2. 创建子主题或插件等其他选项可以正常工作,但当你谈到在单个钩子上运行一个函数时,它们往往会有点过分。