web-dev-qa-db-fra.com

Code de redirection 301

J'essaie actuellement de rediriger un blog de subdomain.blogger.com vers un domaine situé sur mon installation WordPress hébergée. Le code ci-dessous est censé envoyer une redirection 301 puis faire apparaître ce message spécifique sur mon blog, mais il semble que l'utilisateur ne soit dirigé que vers la page d'accueil et non vers le message correspondant.

/************** 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 ***********************/

Ma structure de permalien Wordpress est définie sur custom avec la valeur:

/%year%/%monthnum%/%postname%.html

Toute aide serait grandement appréciée.

1
Camrin Parnell

En supposant que l’analyse d’URL soit correcte et que les données soient correctement configurées dans la base de données, je pense que votre requête SQL est erronée. Je vous suggère de le remplacer en appelant wp_query() api avec les paramètres appropriés.

Une autre suggestion qui pourrait ne pas être un bogue est de ne pas utiliser guid, car ce n’est pas une source fiable pour une adresse de publication. Il est préférable d’obtenir l’ID de poste et d’utiliser get_permalink() pour obtenir son URL.

0
Mark Kaplun