Uses
| Uses | Description |
|---|---|
| wp-includes/functions.php: wp_find_hierarchy_loop() | Find hierarchy loops using a callback function that maps object IDs to parent IDs. |
| wp-includes/taxonomy.php: wp_update_term() | Update term based on arguments provided. |
Checks the given subset of the term hierarchy for hierarchy loops.
Prevents loops from forming and breaks those that it finds.
Attached to the ‘wp_update_term_parent’ filter.
(int) (Required) term_id of the parent for the term we're checking.
(int) (Required) The term we're checking.
(string) (Required) The taxonomy of the term we're checking.
(int) The new parent for the term.
File: wp-includes/taxonomy.php
function wp_check_term_hierarchy_for_loops( $parent, $term_id, $taxonomy ) {
// Nothing fancy here - bail.
if ( ! $parent ) {
return 0;
}
// Can't be its own parent.
if ( $parent === $term_id ) {
return 0;
}
// Now look for larger loops.
$loop = wp_find_hierarchy_loop( 'wp_get_term_taxonomy_parent_id', $term_id, $parent, array( $taxonomy ) );
if ( ! $loop ) {
return $parent; // No loop.
}
// Setting $parent to the given value causes a loop.
if ( isset( $loop[ $term_id ] ) ) {
return 0;
}
// There's a loop, but it doesn't contain $term_id. Break the loop.
foreach ( array_keys( $loop ) as $loop_member ) {
wp_update_term( $loop_member, $taxonomy, array( 'parent' => 0 ) );
}
return $parent;
} | Version | Description |
|---|---|
| 3.1.0 | Introduced. |
© 2003–2019 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_check_term_hierarchy_for_loops