web-dev-qa-db-fra.com

Obtenez le post compte d'enfants d'un post

Existe-t-il un moyen rapide d’obtenir le nombre (nombre) d’enfants de poste d’un certain poste? (Le message a un type de message personnalisé)

Je ne veux pas utiliser WP_Query pour cela car je n'ai pas besoin de toutes les données supplémentaires ...

LE: Sur la base de la réponse de wyrfel, j'ai fini par utiliser:

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;
}
2
onetrickpony
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);
        ...
    }

    ...

}

Le seul problème avec cela est que wp_count_posts () met en cache ses résultats et puisque votre filtre contourne le cache, vous devrez peut-être d'abord dévalider le cache.

Ou (mieux), copiez la fonction wp_count_posts () et modifiez-la selon vos besoins, de sorte que vous n'ayez pas à utiliser le filtre, ni à résumer les résultats ni à laisser le reste agir.

3
wyrfel