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;
}
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.