Existe-t-il un moyen de compter tous les articles publiés à partir d'une taxonomie personnalisée?
En regardant autour de moi, je trouvai cet extrait mais je n’ai pas réussi à le faire fonctionner…
global $wpdb;
$query = "
SELECT COUNT( DISTINCT cat_posts.ID ) AS post_count
FROM wp_term_taxonomy AS cat_term_taxonomy INNER JOIN wp_terms AS cat_terms ON
cat_term_taxonomy.term_id = cat_terms.term_id
INNER JOIN wp_term_relationships AS cat_term_relationships
ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id
INNER JOIN wp_posts AS cat_posts
ON cat_term_relationships.object_id = cat_posts.ID
WHERE cat_posts.post_status = 'publish'
AND cat_posts.post_type = 'post'
AND cat_term_taxonomy.taxonomy = 'YOUR-CUSTOM-TAXONOMY'
AND cat_terms.slug IN ('TERM-SLUG-1, TERM-SLUG-2')
";
return $wpdb->get_var($query);
Utilisez une instance de WP_Query pour interroger la base de données. http://codex.wordpress.org/Class_Reference/WP_Query
Pour interroger la base de données pour une utilisation de taxonomies personnalisées,
$query = new WP_Query( array( 'people' => 'bob' ) );
Pour plus de détails sur les options disponibles, voir: Paramètres de taxonomie http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
Récupérer les articles publiés en utilisant
'post_status' => 'publish'
Utilisez found_posts
pour récupérer le nombre de messages
$count = $query->found_posts;
function wp_get_productcat_postcount($id) {
//return $count;
$args = array(
'post_type' => 'product', //post type, I used 'product'
'post_status' => 'publish', // just tried to find all published post
'posts_per_page' => -1, //show all
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat', //taxonomy name here, I used 'product_cat'
'field' => 'id',
'terms' => array( $id )
)
)
);
$query = new WP_Query( $args);
/*
echo '<pre>';
print_r($query->post_count);
echo '</pre>';
*/
return (int)$query->post_count;
}
Le code ci-dessous indique le nombre d'articles issus d'une taxonomie particulière.
<?php
$terms = get_the_terms( $post->ID , 'your-taxonomy' );
foreach ( $terms as $term ) {
echo $term->count;
} ?>
Wordpress ajoute un nombre d'attributs à chaque taxonomie et la met à jour chaque fois qu'une nouvelle publication est insérée ou mise à jour. Parce qu'il ne veut plus retourner dans la base de données et faire des calculs pour que les articles soient comptabilisés dans la taxonomie.
echo $custom_tax_obj->count;
Vous pouvez le faire avec l'objet actuel avec get_queried_object ()
$ posts = get_queried_object (); echo $ posts-> count;
Sinon, vous risquez d'exécuter une seconde requête, n'est-ce pas?
Je suis confronté à cette situation dans les modèles d'archive de taxonomie (par exemple, taxonomy-taxname.php
) pour un site avec un type de publication personnalisé et les taxonomies de catégorie/tag associées. Je voulais dans mon en-tête afficher le nombre d'éléments utilisant la taxonomie.
Dans mes modèles d'archive de taxonomie, j'avais besoin de trouver le terme de taxonomie représenté, puis de le transmettre à une fonction pour obtenir le nombre d'éléments de type posts personnalisés utilisant ce terme, à partir du tag taxonomie.
// the term we need for this taxonomy
$term_obj = get_queried_object();
// get the term object
$term = get_term( $term_obj->term_id, 'taxname' );
// get a count of content with this term
$tax_count = get_tax_count('taxname', $term->slug, 'custom-post-type-name');
// grammar counts
$plural = ( $tax_count == 1) ? '' : 's';
echo $tax_count . ' Item' . $plural . ' Tagged "' . $term->name . '"';
La fonction permettant de compter utilise WP_Query avec un tax_query:
function tax_count ( $taxonomy, $term, $post_type ) {
// find the number of items in custom post type that use the term in a taxonomy
$args = array(
'post_type' => $post_type,
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $term,
),
),
);
$tax_query = new WP_Query( $args );
return ($tax_query->found_posts);
}
$args = array(
'post_type' => 'product',
'post_status' => 'published',
'product_cat' => $catpage, // $catpage == your category slug name
'numberposts' => -1
);
echo $num = count( get_posts( $args ) );