对旧帖子使用定制表

时间:2012-12-21 作者:user1921704

我有一个网站,每天大约有24000个帖子和200个帖子,数据库很快就会变得庞大。因此,我计划将旧帖子转移到自定义表中,以减少数据库负载。没有必要在网站上显示这些帖子。我会为搜索引擎保留它,并避免sql_calc_found_rows 问题。以下是我创建的三个表:

wp_posts -> wp_custom_posts

wp_postmeta -> wp_custom_postmeta

wp_term_relationships -> wp_custom_term_relationships
我已经使用phpMyAdmin手动将旧帖子转移到这些表中,并使用一个函数使WordPress使用我的自定义帖子表,而不是wp_posts 如果其中不存在帖子:

function custom_prefix_change($sql) {
    global $wpdb,$wp;
    $prefix = $wpdb->prefix;
    if(is_single()){
        //check if the post exists in the genuine posts table
        $results = $wpdb->get_results($sql,"ARRAY_A");

        if($results[0][\'ID\']){
            //if exists then return
            return $sql;
        }else{
            //else change the query
            $sql = str_replace("$wpdb->posts","{$wpdb->prefix}custom_posts",$sql);          
        }
    }
    //echo $sql;
    return $sql;
}
add_action(\'posts_request\',"custom_prefix_change");
然而,在本例中,我的旧帖子显示没有元数据和分类法值。如何对meta和relationships表执行相同的操作?有什么建议吗?

1 个回复
SO网友:Bainternet

一个简单但并不完美的解决方案可以完成大部分工作,就是覆盖如下表名:

function custom_prefix_change($sql) {
  global $wpdb,$wp;
  $prefix = $wpdb->prefix;
  if(is_single()){
      //check if the post exists in the genuine posts table
      $results = $wpdb->get_results($sql,"ARRAY_A");

      if($results[0][\'ID\']){
          //if exists then return
          return $sql;
      }else{
          //else change the query
          $sql = str_replace("$wpdb->posts","{$wpdb->prefix}custom_posts",$sql);
          $wpdb->term_relationships = $wpdb->prefix . \'custom_term_relationships\';
          $wpdb->postmeta = $wpdb->prefix . \'custom_postmeta\';
      }
  }
  return $sql;
}
现在,要获得完整的解决方案,您需要替换terms_clauses 过滤器挂钩get_terms 并使用get_post_metadata 对于get_post_meta.

结束

相关推荐

带有WordPress站点的自定义PHP应用程序

我创建了一个新的“页面模板”(这可能不是正确的方法,但这是我工作的方式),并使用该模板创建了一个新页面。在我制作的页面模板(PHP文件)中,我使用了大量PHP来实现页面功能,就像它有一个简单的登录和从SQL表查看信息一样。问题是,我需要能够将$\\u GET数据发送到页面。我可以发送帖子,但不能得到,我不知道URL是什么。例如,我希望有干净的URL(这就是我设置wordpress的目的)i、 e.:领域com/教学门户/mygetdata页面模板的名称是教学门户,我想mygetdata 输入PHP。但目前