只为每个作者显示一篇文章(页面加载太慢)

时间:2015-06-04 作者:Ohsik

我只想显示每个作者的一篇最新文章,并找到了这段代码。然而,由于我在数据库中有超过10万名作者和10万篇帖子,所以加载页面需要的时间太长。如何优化此代码?

<?php
  //Displaying latest post per author on front page
  function filter_where($where = \'\') {
    global $wpdb;

    $where .= " AND wp_posts.id = (select id from {$wpdb->prefix}posts p2 where p2.post_status = \'publish\' and p2.post_author = {$wpdb->prefix}posts.post_author order by p2.post_date desc limit 0,1)";
    return $where;
  }
  add_filter(\'posts_where\', \'filter_where\');
  query_posts($query_string);

//The Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();

...
  ?>
下面是代码的原始文章。

http://www.dbuggr.com/smallwei/show-latest-post-author-wordpress-front-page/

2 个回复
SO网友:s_ha_dum

哇!中的子查询WHERE 条款这是一个令人讨厌的问题。:)

我现在无法测试这一点(在电话上,这都是内存),但让我看看我能做些什么。我想你只需要GROUP_BY 过滤器:

function group_by_author($groupby) {
  global $wpdb;
  return " {$wpdb->posts}.post_author";
}
add_filter(\'posts_groupby\',\'group_by_author\');
然后创建新的Wp_Query 与其他相关参数query_posts! 永远不会!

概念验证:

function group_by_author($groupby) {
  global $wpdb;
  return " {$wpdb->posts}.post_author";
}
add_filter(\'posts_groupby\',\'group_by_author\');

$args = array(
  \'post_type\' => \'post\',
  \'posts_per_page\' => -1,
  \'ignore_stickie_posts\' => true,
  \'order\' => \'ASC\',
);
$q = new WP_Query($args);
var_dump($q);
if ($q->have_posts()) {
  while ($q->have_posts()) {
    $q->the_post();
    the_title();
    the_author();
    echo \'<br>\';
  }
}

SO网友:Josh M

编辑:我刚刚测试过,它工作得很好。您还需要从作者模板中删除分页。

我还没有测试过,但你试过pre\\u get\\u帖子吗?

function author_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
  if ($query->is_author()) {
    $query->set( \'posts_per_page\', 1 );
   }
 }
}
add_action(\'pre_get_posts\',\'author_filter\');

结束

相关推荐

无法区分Single.php上自定义帖子类型下的两个类别

我已经创建了一个自定义帖子类型,如中所述my older question当我尝试使用get\\u the\\u category()函数来检索帖子的类别(如果是symphony或noir)。它返回“Array”。我怎样才能使两个类别下的帖子保持独立,而不干扰一个类别的分页。 /*Custom post type 14K Gold and Silver*/ function my_custom_post_14kgs() { $labels = array(&#x