在侧边栏上用POST_NAME替换字符串

时间:2015-09-08 作者:Roman Shevchenko

我想全部更换{POST_NAME} \'上的“我的文本”窗口小部件中的single.php 侧栏。我在想这样的事情

global $post;
$POST_NAME= $post->post_name;
$sidebar = preg_replace(\'/\\{(POST_NAME)\\}/e\', "$$1", $sidebar);
如何将提要栏HTML导入\\$sidebar

2 个回复
最合适的回答,由SO网友:Ignat B. 整理而成

您的代码看起来很好,注意事项也很正确。为了实现您的目标,我收集HTML并将其打包如下:

而不是打电话<?php dynamic_sidebar($sidebar_id); ?> 使用<?php dynamic_sidebar_replaced($sidebar_id); ?> 使用以下函数(将其添加到functions.php):

function dynamic_sidebar_replaced($sidebar_id) {
    if (is_single()) { // Optionally, to ensure you\'re at the single post template.

        ob_start(); // Start gathering output
        dynamic_sidebar($sidebar_id);
        global $post;
        $POST_NAME = $post->post_name;
        $sidebar = preg_replace(\'/\\{(POST_NAME)\\}/e\', "$$1", $sidebar);
        ob_end_clean();

        echo $sidebar;
        return \'\';
    }
    dynamic_sidebar($sidebar_id);
}

SO网友:totels

我认为没有一种特别好的方法可以普遍做到这一点。您可以使用widget_display_callback 过滤以在输出小部件实例之前对其进行修改,但这可以被小部件覆盖。您可以遍历所有小部件,并用自己的包装器替换它们的回调。但编辑实例并不能保证您能够按预期访问输出。

我能想到的唯一保证它的方法是缓冲和捕获dynamic_sidebar 替换字符串并打印出修改后的字符串。

ob_start();
dynamic_sidebar( \'sidebar\' );
$sidebar_string = ob_get_contents();
ob_end_clean();
echo str_replace( \'{POST_NAME}\', $post->post_name, $sidebar_string );

相关推荐