是否可以使用代码更改页面标题?

例如,假设页面的名称为“ Book Order”,但我想将其更改为“ Book Order#123”。

我用Google咬了一口,看着这里,什么也没看见。任何人都知道插件或黑客吗?

wp_title返回页面标题,但不允许设置页面标题:
http://codex.wordpress.org/Function_Reference/wp_title

评论

价值从何而来?该页面中#123的值是什么?

#1 楼

没有相关文档,但您始终可以对the_title应用过滤器,如下所示:

add_filter('the_title','some_callback');
function some_callback($data){
    global $post;
    // where $data would be string(#) "current title"
    // Example:
    // (you would want to change $post->ID to however you are getting the book order #,
    // but you can see how it works this way with global $post;)
    return 'Book Order #' . $post->ID;
}


请参阅以下内容:

http:// codex.wordpress.org/Function_Reference/the_title

http://codex.wordpress.org/Function_Reference/add_filter

评论


这似乎覆盖了所有标题。如何仅覆盖当前标题?

– Petrus Theron
17 Mar 29 '17 at 16:47

您需要向回调添加条件,例如if($ post-> ID == 45){...}

–尼克·巴雷特(Nick Barrett)
18年7月9日在3:55



the_title过滤器在最新版本的Wordpress中不再起作用,请使用document_title_parts或pre_get_document_title过滤器,如其他答案中所述。

–布伦丹·尼(Brendan Nee)
18-11-15在2:48

#2 楼

从Wordpress 4.4开始,可以使用Wordpress过滤器document_title_parts更改标题。

functions.php中添加以下内容:

add_filter('document_title_parts', 'my_custom_title');
function my_custom_title( $title ) {
  // $title is an array of title parts, including one called `title`

  $title['title'] = 'My new title';

  if (is_singular('post')) {
    $title['title'] = 'Fresh Post: ' . $title['title'];
  }

  return $title;
}


评论


但是您将参数传递到哪里?

– Tintinabulator Zea
18/12/22在5:38

上面的函数修改了the_title()和get_the_title()函数的工作方式-因此无需传递任何参数。

–布伦丹·尼(Brendan Nee)
18/12/25在19:51

#3 楼

对于那些希望更改文档的title属性的人,我发现使用wp_title过滤器不再有效。而是使用pre_get_document_title过滤器:

add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
    return "My Modified Title";
}




评论


感谢您几年后再来发布此更新。多年来,我一直在我的插件中使用过wp_title,但直到现在我才意识到它不再起作用,您的回答为我节省了很多精力。所以谢谢!

–马修·李
19年1月11日在16:35

@MatthewLee很高兴听到它对您有帮助:)

–内森·亚瑟(Nathan Arthur)
19年1月11日在18:52

#4 楼

启用Yoast后,您需要像这样覆盖标题:

add_filter('wpseo_title', 'custom_titles', 10, 1);
function custom_titles() {

  global $wp;
  $current_slug = $wp->request;

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}


#5 楼

确实取决于您要显示当前页面的自定义标题(即标题中<title></title>标记的内容)还是过滤页面正文或列表中页面的标题。

在前一种情况下(当前页面的标题),请尝试为wp_title()添加过滤器,如下所示:
http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

如果您要全面修改页面标题,则过滤the_title()可以解决问题:
http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

评论


实际上,根据我的经验,您需要同时过滤wp_title和the_title才能覆盖两者。

–杰弗里
15年3月26日在8:59

我不确定它是否因为弃用而已,但tis对我不起作用。我尝试了组合和内联过滤器以及新的apply_filters('pre_get_document_title',字符串$ title)

–降落
17年1月18日在18:00

可悲的是,这两个都不对我有用。

–黛比·库斯(Debbie Kurth)
19年6月8日在5:46

这个答案已经接近6年了;作为发布者(以及不再与WP一起积极工作的人),我建议改为查看最新文档。

–nickb
19年6月9日19:33

#6 楼

实际上,最简单的方法是使用一行js。
将以下代码放在模板中:
<script>document.title = "<?php echo $new_title; ?>";</script>

该代码不必位于html标头中,它可以放在html正文中。

评论


不过,这对SEO不利。

– Alex Cook
20-11-21在0:57

@AlexCook您绝对正确。我正在针对SEO无关紧要的问题进行快速修复。现在我完全忘记了它的用途。大声笑。

–冯江
20-11-21在15:29