所以我有一个插件,可以将远程数据(房地产列表)拉入wordpress站点。一位客户要求我允许根据这些信息设置每个列表的页面标题,并按照他们想要的方式进行格式化。我可以使用\\u title过滤器很容易地更改标题的内容,但我遇到了$before和$after元素影响格式的问题。例如,Twenty14使用此选项输出页面标题:
the_title( \'<header class="entry-header"><h1 class="entry-title">\', \'</h1></header><!-- .entry-header -->\' );
因此,如果我运行\\u标题过滤器并执行类似操作(大大简化):
add_filter( \'the_title\', \'fls_mls_listing_title_filter\', 30, 2 );
function fls_mls_listing_title_filter( $title, $id ) {
if ( in_the_loop() ) {
$new_title = \'Something: <h1>Main Title</h1><p>Subtitle</p>\'
return $new_title;
}
return $title;
}
我的结论是:
<header class="entry-header">
<h1 class="entry-title">Something</h1>
<h1>Main Title</h1>
<p>Subtitle</p>
</header><!-- .entry-header -->
但最后我想说:
Something
<h1>Main Title</h1>
<p>Subtitle</p>
显然,这不是一个非常符合逻辑的示例,但我写它只是为了保持简单。我需要在插件中完成这项工作,而无需创建自定义页面模板,以便它可以处理任何主题(如果可能)。如有任何见解,将不胜感激。
最合适的回答,由SO网友:s_ha_dum 整理而成
没有允许您剥离这些内容的过滤器$before
和$after
值:
42 function the_title($before = \'\', $after = \'\', $echo = true) {
43 $title = get_the_title();
44
45 if ( strlen($title) == 0 )
46 return;
47
48 $title = $before . $title . $after;
49
50 if ( $echo )
51 echo $title;
52 else
53 return $title;
54 }
https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/post-template.php#L42
故事到此结束。要改变这一点,你需要破解主题。您想要的是,“在插件中完成这项工作,而不需要创建自定义页面模板,这样它就可以处理任何主题”,这是不可能的。
您最多可以将输出缓冲写入主题,但同样,您需要破解主题。
即使有可能,您也希望在主题中造成大量的、有时甚至是灾难性的失败,因为您将删除主题可能依赖的标记。对不起,你想要的是个坏主意。