_pad_term_counts( array &$terms, string $taxonomy )
Ajoute le compte des termes enfants au compte des termes parents.
Note : L'accès à cette fonction est marqué comme privé. Cela signifie qu'elle n'est pas destinée à être utilisée par les développeurs de plugins ou de thèmes, mais uniquement dans d'autres fonctions principales. Elle est répertoriée ici par souci d'exhaustivité.
Paramètres
$terms(array)requisListe des objets de terme passée en référence.
$taxonomy(string)requisContexte du terme.
Description / Informations supplémentaires
Recalcule le nombre de postes d'un terme en incluant le nombre de postes venant de ses termes enfants. S'assurer que les termes enfants sont tous dans l'argument $terms.
Retourne
Cette fonction ne retourne rien.
Déclaration et structure de la fonction _pad_term_counts()
_pad_term_counts() est déclarée dans le fichier wp-includes/taxonomy.php à la ligne 4019 :
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ù est utilisée 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