2

如何修改短代码中特定页面的页面标题?

以下将更改标题,但它会为每一页执行。我需要更多地控制它的执行位置。

function assignPageTitle(){
  return "Title goes here";
}
add_filter('wp_title', 'assignPageTitle');

有没有办法在简码函数中调用上述内容?我知道如何使用 do_shortcode() 但上面是一个过滤器。

我的目标是根据 URL 参数修改页面标题。这只发生在特定页面上。

4

2 回答 2

5

尽管 WordPress 短代码不是为此而设计的,但它可以做到。问题是在发送头部之后处理短代码,因此解决方案是在发送头部之前处理短代码。

add_filter( 'pre_get_document_title', function( $title ) {
    global $post;
    if ( ! $post || ! $post->post_content ) {
        return $title;
    }
    if ( preg_match( '#\[mc_set_title.*\]#', $post->post_content, $matches ) !== 1 ) {
        return '';
    }
    return do_shortcode( $matches[0] );
} );

add_shortcode( 'mc_set_title', function( $atts ) {
    if ( ! doing_filter( 'pre_get_document_title' ) ) {
        # just remove the shortcode from post content in normal shortcode processing
        return '';
    }
    # in filter 'pre_get_document_title' - you can use $atts and global $post to compute the title
    return 'MC TITLE';
} );

关键点是当过滤器 'pre_get_document_title' 完成时,全局 $post 对象被设置并且 $post->post_content 可用。所以,你现在可以找到这篇文章的简码。

通常调用短代码时,它会将自身替换为空字符串,因此对 post_content 没有影响。但是,当从过滤器“pre_get_document_title”调用时,它可以根据其参数 $atts 和全局 $post 计算标题。

于 2018-12-03T19:17:07.653 回答
3

取自WordPress Codex

WordPress 2.5 中引入了 Shortcode API,这是一组用于创建用于发布内容的宏代码的简单函数。

这表明您无法使用简码控制页面标题,因为简码在帖子内容中运行,此时标题标签已经呈现,然后为时已晚。

你到底想做什么?使用Yoast SEO 插件,您可以在每个帖子中设置帖子和页面标题,如果这是您想要做的?

您可以根据您的 URL 参数创建自定义插件,如下所示:

function assignPageTitle(){

if( $_GET['query'] == 'something' ) { return 'something'; }

elseif( $_GET['query'] == 'something-else' ) { return 'something-else'; }

else { return "Default Title"; }

}

add_filter('wp_title', 'assignPageTitle');
于 2013-03-27T17:23:51.287 回答