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