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