我当前正在尝试重定向子域。博客作者com博客到位于我的托管WordPress安装上的域。下面的代码应该发送301重定向,然后让特定的帖子出现在我的博客上,但它似乎只是将用户引导到主页,而不是相应的博客帖子。
/************** 301 REDIRECTION ***********************/
function labnol_blogger_query_vars_filter( $vars ) {
$vars[] = "blogger";
return $vars;
}
add_filter(\'query_vars\', \'labnol_blogger_query_vars_filter\');
function labnol_blogger_template_redirect() {
global $wp_query;
$blogger = $wp_query->query_vars[\'blogger\'];
if ( isset ( $blogger ) ) {
wp_redirect( labnol_get_wordpress_url ( $blogger ) , 301 );
exit;
}
}
add_action( \'template_redirect\', \'labnol_blogger_template_redirect\' );
function labnol_get_wordpress_url($blogger_slug) {
global $wpdb;
if ( preg_match(\'@^(?:https?://)?([^/]+)(.*)@i\', $blogger_slug, $matches) ) {
$q = "SELECT guid FROM $wpdb->posts LEFT JOIN $wpdb->postmeta
ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE $wpdb->postmeta.meta_key=\'blogger_permalink\'
AND $wpdb->postmeta.meta_value=\'$matches[2]\'";
$wp_url = $wpdb->get_var($q);
}
return $wp_url ? $wp_url : home_url();
}
/************** 301 REDIRECTION ***********************/
我的Wordpress permalink结构设置为自定义,值为:
/%year%/%monthnum%/%postname%.html
任何帮助都将不胜感激。
最合适的回答,由SO网友:Mark Kaplun 整理而成
假设url解析是正确的,并且数据实际上在DB中设置正确,我认为您的SQL查询是错误的。我的建议是你打电话来代替它wp_query()
api和相关参数。
另一个可能不是bug的建议是不要使用guid,因为它不是发布地址的可靠来源。最好获取帖子ID并使用get_permalink()
获取其url