只更改页面标题,而不更改其中的帖子标题

时间:2015-06-12 作者:Mayeenul Islam

我有一个页面,在这个页面上,我使用快捷代码查询了一个CPT中的多篇文章,因此该页面对于普通用户来说是一种归档页面。

Page Title
  - CPT Post Title #1
  - CPT Post Title #2
  - CPT Post Title #3
在某些情况下,我只想更改页面标题,而不是CPT帖子标题。我试过:

function wpse_change_page_title( $title ) {
   //if( condition matched ) {
       return \'Test \' . $title;
   //}
}
add_filter( \'the_title\', \'wpse_change_page_title\' );
但它改变了CPT帖子的标题。

Page Title
  - Test CPT Post Title #1
  - Test CPT Post Title #2
  - Test CPT Post Title #3
如何只更改页面标题,而不更改CPT帖子标题?

Test Page Title

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我相信您所说的页面标题是来自主查询页面的标题。the_title() 过滤器(和the_content() 过滤器)以所有相应的模板标记为目标,而不考虑查询。

为了避免这种情况,只针对主查询和特定页面。

您可以在过滤器内尝试以下操作

if ( in_the_loop() && is_page( \'specific page\' ) ) {

    // Do what you need to do

}
编辑我刚刚想到了这个,还没有测试过,但是你可以在过滤器中对照已知的静态标题检查你的标题,然后根据它做一些事情

示例:

if ( $title == \'My known title\' ) {

    // Do something with the title

}

SO网友:s_ha_dum

我不完全确定我是否理解您的项目,但我觉得您应该使用wp_title 过滤器,而不是the_title 滤器是由wp_title() 输出页面标题的函数,而不是页面上帖子的标题。类似于:

function wpse_change_page_title( $title ) {
   if(is_page(\'some_page\')) {
       return \'Test \' . $title;
   }
}
add_filter( \'wp_title\', \'wpse_change_page_title\' );

SO网友:fuxia

的第二个参数the_title 始终是帖子ID。请使用它。

add_filter( \'the_title\', function( $title, $post_id) {

    $post = get_post( $post_id );

    if ( ! $post or \'your_cpt\' !== $post->post_type )
        return $title;

    return \'Test \' . $title;
}, 10, 2 );

结束