Je voudrais énumérer mes messages par une taxonomie spécifique. En même temps, pour chaque taxonomie, je voudrais compter le nombre de publications avec une valeur de champ personnalisée spécifique. Ainsi, la liste ressemblerait à ceci: pour chaque: taxonomie personnalisée nom/nombre de publications/nombre de publications dans cette taxonomie contenant un champ de publication personnalisé (clé) avec une valeur spécifique
Tout ce que j’ai pu faire jusqu’à présent, c’est de lister la taxonomie personnalisée et le nombre de posts (simplement en listant la catégorie ou par requête dans la base de données wp) ou d’énumérer les posts avec meta_value pour meta_key. Je ne pouvais cependant pas combiner les deux:
pour la liste de taxonomie personnalisée et le nombre de publications:
$variable = wp_list_categories('taxonomy=organy&echo=0&show_count=1&title_li=&');
$variable = preg_replace('~\((\d+)\)(?=\s*+<)~', '<span class="rank-nbr">$1</span>', $variable);
echo $variable;
pour le nombre de publications de la valeur du champ personnalisé:
$status_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value = 'fixed';");
echo '<p>number of posts: ' . $status_count . '</p>';
Je suppose que cela devrait être fait par requête wpdb.
J'apprécierais l'aide de programmeurs plus avancés ...
Mon autre tentative est:
$terms = get_terms("MY_TAXONOMY_TERM");
$count = count($terms);
$meta_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_value = 'MY_SPECIFIC_VALUE';" );
if ( $count > 0 ){
echo "<tr>";
foreach ( $terms as $term ) {
echo "<td>" . $term->name ,"</td><td> ", $term->count . "</td><td> ", $meta_count, "<td>";
}
echo "</tr>";
}
Mais voici ce qui se passe est la liste de tous les articles avec une valeur spécifique (MY_SPECIFIC_VALUE).
La solution est:
global $wpdb;
$terms = get_terms("TAXONOMY_TERM");
$count = count($terms);
if ( $count > 0 ){
foreach ( $terms as $term ) {
$querystr = "
SELECT count(ID) as count FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE exists ( SELECT * FROM $wpdb->postmeta WHERE ($wpdb->postmeta.post_id = $wpdb->posts.ID) AND meta_key = 'META_KEY' and meta_value = 'META_VALUE' )
AND (post_status = 'publish' )
AND $wpdb->term_taxonomy.taxonomy = 'TAXONOMY_TERM'
AND $wpdb->term_taxonomy.term_id = '".$term->term_id."'
";
$res= $wpdb->get_results($querystr);
echo "<tr><td>" . $term->name ,"</td><td> ", $term->count , "</td><td> ", $res[0]->count, "</td></tr>";
}
}