如何修改短代码中特定页面的页面标题?
以下将更改标题,但它会为每一页执行。我需要更多地控制它的执行位置。
function assignPageTitle(){
return "Title goes here";
}
add_filter('wp_title', 'assignPageTitle');
有没有办法在简码函数中调用上述内容?我知道如何使用 do_shortcode() 但上面是一个过滤器。
我的目标是根据 URL 参数修改页面标题。这只发生在特定页面上。
尽管 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 计算标题。
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');