在Wordpress / Theme / Plugins生成&lt; head&gt;?</title>之后动态替换<title>

时间:2013-03-05 19:50:57

标签: wordpress replace title dynamically-generated head

好的,我一直在进行大量的挖掘并尝试提出最佳解决方案,并且真的希望在此问题上提供一些见解和帮助。

问题:我的网站有一个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。我不认为我可以在主题或插件级别这样做,因为我只想修改这一页,其余的生成就好了。

非常感谢您的帮助和见解。

4 个答案:

答案 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功能上设置更高的数字即可。请参阅我更新的答案。

Yoast标题过滤器供参考

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_partssingle_term_title钩子为标题和标题分隔符添加钩子,稍后在函数中执行},具体取决于页面和即将输出的内容:

post_type_archive_title