Est-il possible, avec WP_Query
, d’obtenir toutes les publications qui ont au moins une catégorie ou un ensemble de termes de taxonomie personnalisé?
Oui, tout à fait possible.
Si vous n'avez besoin que d'une seule taxonomie, tout ce que vous avez à faire est d'obtenir tous les identifiants de tous les termes affectés à la taxonomie, puis de passer ce tableau d'identifiants de termes à un tax_query
(Nécessite PHP5.4 +)
$term_ids = get_terms(
'TAXONOMY_NAME',
[ // Array of arguments, see get_terms()
'fields' => 'ids' // Get only term ids to make query lean
]
);
if ( $term_ids // Check if we have terms
&& !is_wp_error( $term_ids ) // Check for no WP_Error object
) {
$args = [
'tax_query' => [
[
'taxonomy' => 'TAXONOMY_NAME',
'terms' => $term_ids,
]
],
];
$q = new WP_Query( $args );
// Run your loop as needed. Remeber wp_reset_postdata() after the query
}
Si vous avez besoin de publications dans lesquelles des termes doivent être attribués à plusieurs taxonomies, vous pouvez créer une requête plus complexe sur la logique deSCENARIO 1
$taxonomies = ['TAXONOMY_NAME_1', 'TAXONOMY_NAME_2']; // Array of taxonomies, can also use get_taxonomies for all
$tax_array = []; // Set the variable to hold our tax query array values
foreach ( $taxonomies as $key=>$taxonomy ) {
$term_ids = get_terms(
$taxonomy,
[ // Array of arguments, see get_terms()
'fields' => 'ids' // Get only term ids to make query lean
]
);
if ( $term_ids // Check if we have terms
&& !is_wp_error( $term_ids ) // Check for no WP_Error object
) {
$tax_array[$key] = [
'taxonomy' => $taxonomy,
'terms' => $term_ids,
];
}
}
$relation = 'OR'; // Set the tax_query relation, we will use OR
if ( $tax_array ) { // Check if we have a valid array
if ( count( $tax_array ) == 1 ) {
$tax_query[] = $tax_array;
} else {
$tax_query = [
'relation' => $relation,
$tax_array
];
}
$args = [ // Set query arguments
'tax_query' => $tax_query,
// Any other query arguments that you might want to add
];
$q = new WP_Query( $args );
// Run your loop as needed. Remeber wp_reset_postdata() after the query
}