web-dev-qa-db-ja.com

301リダクトコード

私は現在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

任意の助けは大歓迎です。

1
Camrin Parnell

URLの解析が正しく、データが実際にはDBに正しく設定されていると仮定すると、SQLクエリは間違っていると思います。私の提案は、あなたが関連するパラメータでwp_query() apiを呼び出すことによってそれを置き換えることです。

バグではないかもしれないもう1つの提案はguidを使用しないことです。投稿アドレスの信頼できるソースではないからです。投稿IDを取得し、そのURLを取得するにはget_permalink()を使用することをお勧めします。

0
Mark Kaplun