From 5ac6ecab482d65d87b9594511426b9ccd18709e8 Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Fri, 3 Mar 2017 02:40:45 +0000 Subject: [PATCH] Taxonomy: Improve precision of duplicate name checks when inserting terms. `wp_insert_term()` does not allow for terms with the same name to exist at the same hierarchy level, unless the second term has a unique slug. When this logic was refactored in [31792] and [34809], a bug was introduced whereby it was possible to bypass the no-same-named-sibling check in cases where the first term had a non-auto-generated slug (ie, where the name was 'Foo' but the slug something other than 'foo', such that the second term would get the non-matching slug 'foo'). This changeset fixes this issue by ensuring that the duplicate name check runs both in cases where there's an actual slug clash *and* in cases where no explicit `slug` has been provided to `wp_insert_term()`. The result is a more reliable error condition: `wp_insert_term( 'Foo' ... )` will always fail if there's a sibling 'Foo', regardless of the sibling's slug. Props mikejolley. See #39984. Built from https://develop.svn.wordpress.org/trunk@40144 git-svn-id: http://core.svn.wordpress.org/trunk@40083 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/taxonomy.php | 2 +- wp-includes/version.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wp-includes/taxonomy.php b/wp-includes/taxonomy.php index 9a3a13cb29..1c63b9be03 100644 --- a/wp-includes/taxonomy.php +++ b/wp-includes/taxonomy.php @@ -2063,7 +2063,7 @@ function wp_insert_term( $term, $taxonomy, $args = array() ) { $siblings = get_terms( $taxonomy, array( 'get' => 'all', 'parent' => $parent ) ); $existing_term = null; - if ( $name_match->slug === $slug && in_array( $name, wp_list_pluck( $siblings, 'name' ) ) ) { + if ( ( ! $slug_provided || $name_match->slug === $slug ) && in_array( $name, wp_list_pluck( $siblings, 'name' ) ) ) { $existing_term = $name_match; } elseif ( $slug_match && in_array( $slug, wp_list_pluck( $siblings, 'slug' ) ) ) { $existing_term = $slug_match; diff --git a/wp-includes/version.php b/wp-includes/version.php index 13234d83a8..45e2331232 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.8-alpha-40143'; +$wp_version = '4.8-alpha-40144'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.