如何在循环外使用str_place()?

时间:2011-01-01 作者:Denis Belousov

有什么方法可以使用str_replace() 在循环外的Wordpress中?我想更改循环之前开始的html标记。我需要这样的东西:

function content_magic($content) {
        str_replace(\'<div id="content">\',\'<div id="new_content">\',$content);
        return $content;
    }
add_filter(\'the_content\',\'content_magic\');
但这只适用于循环中的标记。请帮帮我!

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

过滤器实际上不会影响生成的标记。更准确地说,它们会影响通过它们传递的任何内容,在本例中是the_content() 函数已通过the_content 过滤器,您可以对其进行修改。

如果要更改的标记不是由函数生成的,也没有通过过滤器,则很可能需要编辑theme\'s template file 该标记属于。

创建和使用也是一种很好的做法child theme 若要编辑模板,请保留与主题更新等的兼容性。

SO网友:bbeeman

此外,从纯PHP的角度来看,函数str\\u replace返回一个新字符串,应该分配给另一个字符串变量。示例如下所示。请参阅PHP手册。

function content_magic($content) {
    $new_content = str_replace(\'<div id="content">\',\'<div id="new_content">\',$content);
    return $new_content;
}
显然,str\\u replace函数不会更改原始字符串。

SO网友:Bryan Willis

如果可以更改模板,这可能是非正统的/不必要的,但在某些情况下可能是必要的。我意识到这是一篇很老的帖子,但我只是偶然发现了它,并意识到我实际上经常使用输出缓冲区。在下面的示例中,我正在删除

您可以使用string replace或preg replace进行更高级的替换,如下面的示例所示。我也用过!此处是\\u admin,但您可以使用高级条件来针对某些页面进行替换。

if (!is_admin()) {      
            function link_rel_buffer_callback($buffer) {
                $buffer = preg_replace(\'/(<link *?.*?\\brel\\b=["|\\\']\\bpingback\\b["|\\\'].*?\\bhref\\b(=["|\\\'](.*?)["|\\\'])*(.*?)(\\/?>)(?=\\s*?<))|(<link *?.*?\\bhref\\b(=["|\\\'](.*?)["|\\\'])*.*?\\brel\\b=["|\\\']\\bpingback\\b["|\\\'](.*?)(\\/?>)(?=\\s*?<))/\', \'\', $buffer);
                return $buffer;
            }

            function link_rel_buffer_start() {
                ob_start("link_rel_buffer_callback");
            }
            function link_rel_buffer_end() {
                ob_flush();
            }
            add_action(\'template_redirect\', \'link_rel_buffer_start\', -1);
            add_action(\'get_header\', \'link_rel_buffer_start\');
            add_action(\'wp_footer\', \'link_rel_buffer_end\', 999);
        }   
仅使用http://regex101.com/ 测试替换表达式。因此,从页面复制呈现的html并将其粘贴到textarea中,然后键入regex以过滤您想要更改的内容。

在上述示例中,您只需更改preg\\u replace输出:

 $buffer = preg_replace(\'/original html goes here/\', \'replacement html goes here\', $buffer);
然后只需添加到is admin以设置不同的规则。此外,如果你不需要设定目标,只需使用这些操作即可。

            add_action(\'wp_head\', \'link_rel_buffer_start\', 999);
            add_action(\'wp_footer\', \'link_rel_buffer_end\', 999);

结束

相关推荐

Pre_Comment_Content筛选器使用IntenseDebate增强型审核不起作用

我写了一个插件,可以修改一些评论的内容。它使用pre\\u comment\\u内容过滤器。使用标准WP调节似乎可以正常工作,但是,当我打开IntenseDebate增强调节时就不行了。以下是一些代码:function my_plugin($orig_comment){ $orig_comment = some_func($orig_comment); return $orig_comment; } 编辑:插件基本上只应用一些格式,比如说所有字母