私は現在subdomain.blogger.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のパーマリンク構造は次の値でcustomに設定されています:
/%year%/%monthnum%/%postname%.html
任意の助けは大歓迎です。
URLの解析が正しく、データが実際にはDBに正しく設定されていると仮定すると、SQLクエリは間違っていると思います。私の提案は、あなたが関連するパラメータでwp_query()
apiを呼び出すことによってそれを置き換えることです。
バグではないかもしれないもう1つの提案はguidを使用しないことです。投稿アドレスの信頼できるソースではないからです。投稿IDを取得し、そのURLを取得するにはget_permalink()
を使用することをお勧めします。