从页面标题中删除字符串之前和之后的$

时间:2014-03-13 作者:MatthewLee

所以我有一个插件,可以将远程数据(房地产列表)拉入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>
显然,这不是一个非常符合逻辑的示例,但我写它只是为了保持简单。我需要在插件中完成这项工作,而无需创建自定义页面模板,以便它可以处理任何主题(如果可能)。如有任何见解,将不胜感激。

1 个回复
最合适的回答,由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

故事到此结束。要改变这一点,你需要破解主题。您想要的是,“在插件中完成这项工作,而不需要创建自定义页面模板,这样它就可以处理任何主题”,这是不可能的。

您最多可以将输出缓冲写入主题,但同样,您需要破解主题。

即使有可能,您也希望在主题中造成大量的、有时甚至是灾难性的失败,因为您将删除主题可能依赖的标记。对不起,你想要的是个坏主意。

结束

相关推荐

如何将EDIT_FORM_AFTER_TITLE挂钩限制为仅限于页面和后期编辑?

嘿,我想用这个大钩子edit_form_after_title 2012年12月1日宣布:http://make.wordpress.org/core/2012/12/01/more-hooks-on-the-edit-screen/it curreclty hook for : post-new, post, page-new, page.如何使其仅在编辑页面/帖子中工作(only post, page)谢谢大家