Contare i post all'interno di un custom post type con tassonomia e termini specifici?
Sto cercando di contare quanti post sono presenti nel custom post type chiamato "videos", ma solo quelli appartenenti alla categoria "work".
<?php $count_posts = wp_count_posts('videos'); echo $count_posts->publish; // ?>
Come posso modificare il codice sopra per ottenere questo risultato?
Grazie!
Una soluzione alternativa utilizzando WP_Query sarebbe:
$args = array(
'cat' => 4,
'post_type' => 'videos'
);
$the_query = new WP_Query( $args );
echo $the_query->found_posts;

Per una tassonomia personalizzata specifica prova:
$the_query = new WP_Query( array(
'post_type' => 'CUSTOM_POST_TYPE',
'tax_query' => array(
array(
'taxonomy' => 'CUSTOM_TAXONOMY',
'field' => 'id',
'terms' => TERM_ID
)
)
) );
$count = $the_query->found_posts;
Documentazione su https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Pessima idea. Cosa succede se hai 15000 articoli? Li metti TUTTI in memoria? Questi sono i tipi di equivoci che potrebbero distruggere un sito in produzione.

Come menzionato da @Cranio sopra: pessima idea ottenere tutti gli articoli solo per contarli.

So che questo è un vecchio thread, ma compare per primo su Google, quindi ecco la VERA soluzione su come fare questo.
$term = get_term( $termId, $taxonomy );
$total_in_term = $term->count;
Quindi è necessario passare l'ID del termine e la tassonomia. Questa è la soluzione più leggera e ha anche il vantaggio di funzionare con tassonomie personalizzate.

Ho trovato questa soluzione mentre cercavo qualcosa di simile, quindi ecco la mia soluzione nel caso possa essere utile a qualcun altro... Nota: la risposta di Harmonic funziona, a seconda dello scenario potrebbe essere più semplice fare invece questo:
$count = get_category($category->term_id)->category_count;
Dove $category
è il tuo oggetto di tassonomia.
Nota importante: questo presuppone che nessun altro post_type utilizzi la stessa tassonomia.
Dettagli: get_category()
è in realtà una funzione wrapper di get_term()
.
In questo caso, get_term() ha un parametro name__like che get_category() non ha. Probabilmente ci sono anche altre piccole differenze.
Vedi: get_term() get_category

Fondamentalmente, se lo fai con la soluzione che hai trovato, sprecherai molte risorse del database quando hai molti post da recuperare.
$query = new WP_Query();
echo $query->found_posts();
Tuttavia, WP_Query->found_posts recupera solo 'posts_per_page' ed esegue per te il lavoro di COUNT(*) in MySQL. Quindi ti consiglio di utilizzare quest'ultimo metodo.
