_pad_term_counts( array $terms, string $taxonomy )
Ajoute le compte des termes enfants au compte des termes parents.
Description
Recalcule le compte d'un terme en incluant le compte des postes venant de ses termes enfants. S'assurer que les termes enfants sont tous dans l'argument $terms.
Paramètres
$terms
(array) (Requis) Liste des objets de terme passée en référence.
$taxonomy
(string) (Requis) Contexte du terme.
Structure de la fonction _pad_term_counts()
Définie dans le fichier wp-includes/taxonomy.php à la ligne 3706 :
function _pad_term_counts( &$terms, $taxonomy ) {
global $wpdb;
// This function only works for hierarchical taxonomies like post categories.
if ( ! is_taxonomy_hierarchical( $taxonomy ) ) {
return;
}
$term_hier = _get_term_hierarchy( $taxonomy );
if ( empty( $term_hier ) ) {
return;
}
$term_items = array();
$terms_by_id = array();
$term_ids = array();
foreach ( (array) $terms as $key => $term ) {
$terms_by_id[ $term->term_id ] = & $terms[ $key ];
$term_ids[ $term->term_taxonomy_id ] = $term->term_id;
}
// Get the object and term IDs and stick them in a lookup table.
$tax_obj = get_taxonomy( $taxonomy );
$object_types = esc_sql( $tax_obj->object_type );
$results = $wpdb->get_results( "SELECT object_id, term_taxonomy_id FROM $wpdb->term_relationships INNER JOIN $wpdb->posts ON object_id = ID WHERE term_taxonomy_id IN (" . implode( ',', array_keys( $term_ids ) ) . ") AND post_type IN ('" . implode( "', '", $object_types ) . "') AND post_status = 'publish'" );
foreach ( $results as $row ) {
$id = $term_ids[ $row->term_taxonomy_id ];
$term_items[ $id ][ $row->object_id ] = isset( $term_items[ $id ][ $row->object_id ] ) ? ++$term_items[ $id ][ $row->object_id ] : 1;
}
// Touch every ancestor's lookup row for each post in each term.
foreach ( $term_ids as $term_id ) {
$child = $term_id;
$ancestors = array();
while ( ! empty( $terms_by_id[ $child ] ) && $parent = $terms_by_id[ $child ]->parent ) {
$ancestors[] = $child;
if ( ! empty( $term_items[ $term_id ] ) ) {
foreach ( $term_items[ $term_id ] as $item_id => $touches ) {
$term_items[ $parent ][ $item_id ] = isset( $term_items[ $parent ][ $item_id ] ) ? ++$term_items[ $parent ][ $item_id ] : 1;
}
}
$child = $parent;
if ( in_array( $parent, $ancestors, true ) ) {
break;
}
}
}
// Transfer the touched cells.
foreach ( (array) $term_items as $id => $items ) {
if ( isset( $terms_by_id[ $id ] ) ) {
$terms_by_id[ $id ]->count = count( $items );
}
}
}
Fonctions utilisées par _pad_term_counts()
esc_sql()
Échappe les données pour être ensuite utilisées dans une requête Sql.
_get_term_hierarchy()
Retourne l'id des termes enfants d'une taxonomie.
is_taxonomy_hierarchical()
Détermine si la taxonomie est hiérarchique.
get_taxonomy()
Retourne l'objet d'une taxonomie en donnant son nom.
Où trouver la fonction _pad_term_counts()
dans le CMS Wordpress
Sources
Codex Wordpress : _pad_term_counts()
Autres fonctions dans le même fichier : wp-includes/taxonomy.php