好的,我一直在进行大量的挖掘并尝试提出最佳解决方案,并且真的希望在此问题上提供一些见解和帮助。
问题:我的网站有一个WordPress / Theme / Plugin组合套装,效果很好。在WordPress,主题和SEO插件之类的插件之间,网站的标题生成中有很多事情正在发生。
我有一个模板页面,我希望能够动态更改标题。我不想弄乱整个网站,只是这个模板页面,因此它将显示:动态项目名称 +项目详细信息“。我想也可以替换元描述,但我应该能够使用与标题相同的方法,所以现在让我们关注。
示例页面:http://www.ddmsrealm.com/dungeons-and-dragons-database/item-info/?ddoRareItemID=2507&ddoQuestID=352&ddoSeriesID=39 - 这有一个通用页面标题。
模板页面中有一个函数可以获取并构建标题。在此之后,我可能需要放入代码来替换已生成的标记。
所以问题是如何改变它?
你能用PHP替换生成的标签吗?这可以通过功能来完成吗?这个改变是针对搜索引擎优化,所以我认为由于搜索引擎没有执行JavaScript,Javascript会起作用。自定义字段是解决方案吗?
我想影响这个模板。我需要它为SEO。我不认为我可以在主题或插件级别这样做,因为我只想修改这一页,其余的生成就好了。
非常感谢您的帮助和见解。
答案 0 :(得分:2)
在调用get_header()
之前尝试连接wp_title过滤器。
<?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 wp_title
挂钩的优先级为15,因此只需在wp_title
功能上设置更高的数字即可。请参阅我更新的答案。
add_filter( 'wp_title', array( $this, 'title' ), 15, 3 );
答案 1 :(得分:0)
以下是此问题的最终工作代码。以上回复对于使代码非常接近有很大帮助。由于这是在页面/脚本之间传递信息,因此需要一个全局变量。
$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插件标题生成。
这似乎运作良好,并且是出于搜索引擎优化的原因,但似乎谷歌仍未对这些网页编制索引。无论如何,这是一个很好的小技巧,可以覆盖动态页面项目上的默认标题生成。
答案 2 :(得分:0)
如果您碰巧使用像我这样的Yoast SEO插件,这最终对我有用。
@Configuration
@ComponentScan("hyphen.synapse")
@EnableTransactionManagement
@EnableJpaRepositories("hyphen.synapse.data")
@PropertySource("classpath:application.properties")
public class SynapseApplicationConfig {
...
}
信用到这里:Overriding Yoast SEO Plugin Page Title and META Description
答案 3 :(得分:0)
自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
或{{1}之类的函数生成标题之后,使用document_title_parts
和single_term_title
钩子为标题和标题分隔符添加钩子,稍后在函数中执行},具体取决于页面和即将输出的内容:
post_type_archive_title