禁用Wordpress短标签

时间:2012-09-11 19:45:42

标签: php string wordpress filter hook

我想修改Wordpress短标签的布局。我想要修改的标签是将一个帖子分成多个页面的标签。

在我的主题中,我需要禁用该功能并将每个部分包装在div中。

我知道可以添加过滤器来修改短标签,但显然我做错了。下面的函数似乎没有替换短标记,我仍然得到一个分页列表。

有人可以提出替换短标签的解决方案吗?

add_filter( 'the_content', 'reformat_lists' );

function reformat_lists($content){
    $f = '<!--nextpage-->';
    $r = '<div id="cmn-list">';
    str_replace($f,$r,$content);
    return $content;
}

1 个答案:

答案 0 :(得分:0)

您的帖子查询可能正在调用setup_postdata,因此在您有机会之前已经替换了<!--nextpage-->,因此您可能必须使用其他过滤器或找出Wordpress正在插入的内容。如果您使用get_posts而不是the_content,则可以在setup_postdata之前获得WP_query。理想情况下,您可以在此之前找到the_content上的过滤器,但不会在DB写入之前找到,但我似乎无法找到任何工作。

它不漂亮,因为它具有破坏性(在保存到数据库之前替换标签)而不是在打印之前,但这可能对您有用:

function reformat_lists($content){
    $f = '<!--nextpage-->';
    $r = '<div id="cmn-list">';
    $content = str_ireplace($f,$r,$content); //don't forget to pass your replaced string to $content
    return $content;
}
add_filter( 'content_save_pre', 'reformat_lists');

编辑:更好的是,如果你得到global $post,你可以获取未经过滤的内容。尝试以下内容 - 我在内容的末尾添加了</div>以关闭我们正在插入的内容,因此它不会破坏您的布局。抓住global $post可能无法在所有情况下使用,因此我将其留在您的设置中进行测试。

function reformat_lists($content){
    global $post;
    $content = $post->post_content;
    $f = '<!--nextpage-->';
    $r = '<div id="cmn-list">';
    $content = str_ireplace($f,$r,$content) . '</div>';
    return $content;
}
add_filter( 'the_content', 'reformat_lists', 1);