4 回答
在调用之前尝试挂钩wp_title过滤器。get_header()
<?php
add_filter( 'wp_title', 'my_tpl_wp_title', 100 );
function my_tpl_wp_title($title) {
$title = 'My new cool title';
return $title;
}
?>
编辑:)我看到 Yoast 插件实际上篡改了我的解决方案:)
幸运的是,这是一个简单的修复。Yoast挂钩的优先级为 15,因此只需在您的函数wp_title
上设置一个更高的数字即可。wp_title
请参阅我的更新答案。
Yoast 标题过滤器供参考
add_filter( 'wp_title', array( $this, 'title' ), 15, 3 );
如果您碰巧像我一样使用 Yoast SEO 插件,那么这最终对我有用。
function change_yoast_page_titles($title)
{
global $pagename;
$new_title=$title;
if ($pagename=='widget')
{
global $widget_name;
if (isset($widget_name))
$new_title=$widget_name." | ".get_bloginfo('name');
}
return $new_title;
}
add_filter('wpseo_title','change_yoast_page_titles',100);
信用在这里:覆盖 Yoast SEO 插件页面标题和元描述
这是此问题的最终工作代码。上述响应非常有助于使此代码非常接近。由于这是在页面/脚本之间传递信息,因此需要一个全局变量。
$ddmsrealmitemname = $row_rsMainItemListing['Name'];
add_filter( 'wp_title', 'my_ddmseo_wp_title', 100);
function my_ddmseo_wp_title($title) {
global $ddmsrealmitemname;
$title = "{$ddmsrealmitemname} | Item Details | Dungeons and Dragons Online";
return $title;
}
此脚本现在扫描记录集中已选择的当前项目,并将其传递给 SEO 插件标题生成。
这似乎运作良好,并且是出于 SEO 原因而完成的,但 Google 似乎仍未将这些页面编入索引。无论如何,这是一个很好的小技巧,可以覆盖动态页面项目上的默认标题生成。
自 Wordpress v4.4.0 以来,文档标题的生成方式发生了变化。现在wp_get_document_title
规定如何生成标题:
/**
* Displays title tag with content.
*
* @ignore
* @since 4.1.0
* @since 4.4.0 Improved title output replaced `wp_title()`.
* @access private
*/
function _wp_render_title_tag() {
if ( ! current_theme_supports( 'title-tag' ) ) {
return;
}
echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}
这是来自 v5.4.2 的代码。以下是可用于操作标题标签的过滤器:
function wp_get_document_title() {
/**
* Filters the document title before it is generated.
*
* Passing a non-empty value will short-circuit wp_get_document_title(),
* returning that value instead.
*
* @since 4.4.0
*
* @param string $title The document title. Default empty string.
*/
$title = apply_filters( 'pre_get_document_title', '' );
if ( ! empty( $title ) ) {
return $title;
}
// --- snipped ---
/**
* Filters the separator for the document title.
*
* @since 4.4.0
*
* @param string $sep Document title separator. Default '-'.
*/
$sep = apply_filters( 'document_title_separator', '-' );
/**
* Filters the parts of the document title.
*
* @since 4.4.0
*
* @param array $title {
* The document title parts.
*
* @type string $title Title of the viewed page.
* @type string $page Optional. Page number if paginated.
* @type string $tagline Optional. Site description when on home page.
* @type string $site Optional. Site title when not on home page.
* }
*/
$title = apply_filters( 'document_title_parts', $title );
// --- snipped ---
return $title;
}
所以这里有两种方法可以做到。
第一个使用pre_get_document_title
过滤器来缩短标题生成,因此如果您不打算对当前标题进行更改,则性能会更高:
function custom_document_title( $title ) {
return 'Here is the new title';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );
第二种方式使用document_title_separator
和document_title_parts
钩子用于稍后在函数中执行的标题和标题分隔符,在使用类似single_term_title
或post_type_archive_title
取决于页面的函数生成标题并即将输出之后:
// Custom function should return a string
function custom_seperator( $sep ) {
return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );
// Custom function should return an array
function custom_html_title( $title ) {
return array(
'title' => 'Custom Title',
'site' => 'Custom Site'
);
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );