301 Redirect Code

时间:2013-10-30 作者:Camrin Parnell

我当前正在尝试重定向子域。博客作者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
任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

假设url解析是正确的,并且数据实际上在DB中设置正确,我认为您的SQL查询是错误的。我的建议是你打电话来代替它wp_query() api和相关参数。

另一个可能不是bug的建议是不要使用guid,因为它不是发布地址的可靠来源。最好获取帖子ID并使用get_permalink() 获取其url

结束

相关推荐

使用$wpdb查询新创建的表

我在wordpress数据库中创建了一个名为forms, 此表包括ID 和names我想使用wordpress查询此表中的所有列表$wpdb下面是我的代码<?php global $wpdb; $result = $wpdb->get_results ( \"SELECT * FROM $wpdb->forms\" ); foreach ( $result as $print ) { echo $print-&