WordPress多站点-添加函数到functions.php只影响1个站点

cunj1qz1  于 2022-11-22  发布在  WordPress
关注(0)|答案(4)|浏览(183)

我正在运行一个WordPress多站点与2博客(site1.com和site2.com)
整个站点共享相同的主题和functions.php文件。
我需要将以下过滤器放入function.php文件中,但我需要此过滤器仅影响1个blog -site2.com
过滤器如下:

add_filter( 'get_manager_nav', 'set_manager_nav' );

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

是否有办法将此筛选器仅应用于1个站点?
我所做的是,我已经创建了一个新的插件,我已经添加到插件的功能,并激活插件只在site2.com.
它工作得很好,但是我想使用一个简单的代码段比使用一个插件要好得多,那么有没有一种方法可以使用代码段来做到这一点呢?

u3r8eeie

u3r8eeie1#

在我看来,在多站点中定位一个子站点的最好方法是在过滤器调用的函数中使用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获取要定位的站点的ID,其中https://example.org将替换为您的域。
与此处列出的其他方法相比,此方法有一些优点。
1.如果您有使用不同网域的多个多站台安装版本,则此方法可以运作。例如,您可能有http://localhost/site1、site1.example.org和site1.staging. example.org。如果您检查网域,则筛选器会在每个站台上中断(生产除外)。如果您使用ID,则应该可以在所有站台上运作。
1.其他选项,如创建一个子主题或一个插件,确实工作,但他们往往是矫枉过正,当你谈论运行一个函数在一个单一的挂钩。

bwntbbo3

bwntbbo32#

这有点棘手。在添加过滤器之前,您可能需要检查站点名称或ID。
函数保持不变,但筛选器部分变为:

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

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

a7qyws3x

a7qyws3x3#

我知道这是从一段时间前,但我一直试图添加一个功能,只有一个多站点太多。方法是有点混乱,在第一次,因为你需要从多站点管理跳转到主网络管理。这样做的方法是通过主网络管理创建一个子主题(是一个用于子主题创建器的插件。有很多)。虽然仍然在网络管理,选择"主题“标题,然后选择”编辑器“显示当前主题,然后在右上角选择”要编辑的主题“并从下拉列表中选择子主题。将新代码添加到函数中。php添加完所需的功能后,切换回需要该功能的多站点的 Jmeter 板,并激活子主题。如果需要为不同的多站点添加其他功能,返回到网络管理员&创建另一个子主题(我目前有twentysevente作为我的主主题然后child1为多站点1和child2为多站点2它'这有点复杂,但一旦你明白这些更改必须从网络管理员那里完成,就很容易了。我希望这能有所帮助。

r55awzrz

r55awzrz4#

你让这个工作在唯一的网站吗?因为我有一个类似的问题,不同的功能-但触发后-它的工作目标网站,但其他网站不呈现内容在所有。
我的代码:

add_filter('the_content', 'wpse_ad_content');

function wpse_ad_content($content)
{
    if ( 2 !== get_current_blog_id() )
        return;
    
    if (!is_single()) return $content;
    $paragraphAfter = 2; //Enter number of paragraphs to display ad after.
    $content = explode("</p>", $content);
    $new_content = '';
    for ($i = 0; $i < count($content); $i++) {
        if ($i == $paragraphAfter) {
            $new_content.= '<div style="width: 300px; height: 250px; padding: 6px 6px 6px 0; float: left; margin-left: 0; margin-right: 18px;">';
            $new_content.= 'Enter your ad code here....';
            $new_content.= '</div>';
        }

        $new_content.= $content[$i] . "</p>";
    }

    return $new_content;
}

相关问题