把帖子算在孩子们的帖子里

时间:2011-02-15 作者:onetrickpony

有没有一种快速的方法可以获得某个帖子的帖子子帖子的数量?(该帖子具有自定义帖子类型)

我不想对此使用WP\\u查询,因为我不需要所有额外的数据。。。

LE: 根据wyrfel的回答,我最终使用了:

function reply_count($topic, $type = \'topic-reply\'){
  global $wpdb;
  $cache_key = "{$type}_{$topic}_counts";
  $count = wp_cache_get($cache_key, \'counts\');
  if(false !== $count) return $count;
  $query = "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_parent = %d AND post_type = %s";
  $count = $wpdb->get_var($wpdb->prepare($query, $topic, $type));
  wp_cache_set($cache_key, $count, \'counts\');
  return $count;
}

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

class MyClass {

    ...

    function post_count_filter($where) {
        global $wpdb;
        str_replace("WHERE", "WHERE ".$wpdb->posts.".post_parent = ".$this->count_parent." AND", $where);
        return $where;
    }

    function count_children($post_id) {
        $this->count_parent = $post_id;
        add_filter(\'query\', ( &$this, \'post_count_filter\') );
        $stats = wp_count_posts(\'myposttype\');
        remove_filter(\'query\', ( &$this, \'post_count_filter\') );
        unset($this->count_parent);
        return array_sum( (array)$stats );
    }

    // example of use
    function xyz() {
        global $post;
        ...
        $child_count = $this->count_children($post->ID);
        ...
    }

    ...

}
唯一的问题是,wp\\u count\\u posts()会缓存其结果,而且由于您的过滤器会绕过缓存,因此您可能必须首先对缓存进行解密。

或者(更好的做法是)复制wp\\u count\\u posts()函数并根据您的需要进行修改,这样您就不必使用过滤器,也不必对结果进行汇总,也不必像它那样完成其余的操作。

结束

相关推荐

在页面中显示博客条目(使用GET_POSTS检索帖子)?

我做了一个页面叫blog.php 它将存储我的博客条目,所有其他页面都有一个自定义的帖子类型,名为“Page Content“(对于静态内容)。我想在这个博客页面中创建一个标题,该标题是从当前页面的主循环中检索的(the_content), 并使用了get_posts 检索博客条目。我试着做相反的事情:使用get_posts 获取the_content 但已检索到the_content 的博客条目。(并使用主循环检索帖子)。使用这种方法会有问题吗?有更好的方法吗?预期结果:<?php /**