如何动态设置页面标题?


19

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

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

我在Google那里看了一会儿,什么也没看见。有人知道插件或黑客吗?

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


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

Answers:


23

上没有任何文档,但是您始终可以应用过滤器来实现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

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

3
the_title过滤器在最新版本的Wordpress中不再起作用,请使用document_title_partspre_get_document_title在其他答案中详细介绍的过滤器。
布伦丹·尼

8

从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

上述功能修改的方式the_title()get_the_title()职能的工作-这样就无需传递任何参数。
布伦丹·尼

5

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

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

资源


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

@MatthewLee Glad听到它对您有帮助:)
Nathan ReinstateMonica Arthur,

2

确实取决于您要显示当前页面的自定义标题(即<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_titlethe_title覆盖两者。
杰弗里2015年

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

可悲的是,这两个都不对我有用。
黛比·库斯

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

1

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

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

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

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}

-2

因此,您想逐页更改标题吗?首先设置一个自定义帖子遇到一个盒子。Smashing Magazine最近对此进行了报道:http : //wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/。然后,如果自定义meta框具有值,则可以创建一个简单的函数来替换标题。

有几个SEO插件也提供此功能。尝试使用Yoast SEO为例:http ://wordpress.org/extend/plugins/wordpress-seo/

希望这可以帮助。


1
这些解决方案不会“动态”更改标题,而是“手动”更改标题。
古斯塔沃2015年

1
有史以来最糟糕的解决方案
Vishal Kumar Sahu '10
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.