禁用Wordpress短标记


Disable Wordpress short tag

我想修改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;
}

很可能您的post查询正在调用setup_postdata,因此<!--nextpage-->在您获得机会之前已经被替换,因此您可能需要使用另一个筛选器或弄清楚Wordpress正在插入什么。如果使用get_posts而不是WP_query,则可以在setup_postdata之前到达the_content。理想情况下,您可以在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);