[wp-trac] [WordPress Trac] #53152: wp_set_object_terms ampersand in term name
WordPress Trac
noreply at wordpress.org
Mon Nov 15 19:42:36 UTC 2021
#53152: wp_set_object_terms ampersand in term name
-------------------------------------------------+-------------------------
Reporter: kapacity | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: 5.9
Component: Taxonomy | Version: 5.7.1
Severity: normal | Resolution:
Keywords: has-patch has-unit-tests dev- | Focuses:
feedback | administration
-------------------------------------------------+-------------------------
Description changed by hellofromTonya:
Old description:
> This is a follow-up to #32248.
> I believe we are running into this same core issue when using the
> wp_set_object_terms wp function. Here are the repro steps:
>
> For a given post and taxonomy call:
> wp_set_object_terms($post_id, ["foo & bar"], 'my_taxonomy', false);
> When the term does not yet exist it will be created with slug 'foo-bar'
> and name 'foo & bar in db.
>
> Rename term to "this & that" in admin, slug remains foo-bar and name is
> 'this & that' in db.
>
> Now call
> wp_set_object_terms($post_id, ["this & that"], 'my_taxonomy', false);
> You get error 'A term with the name provided already exists in this
> taxonomy.'
> This is because the name matching logic in term_exists does not find the
> term by name since it is comparing the non escaped name 'this & that' to
> the escaped name in the db 'this & that' and determines it does not
> exist.
>
> I can work around this problem by calling the lower level wp functions
> myself, but this seems to be a bug.
New description:
This is a follow-up to #32248.
I believe we are running into this same core issue when using the
wp_set_object_terms wp function. Here are the repro steps:
For a given post and taxonomy call:
{{{
wp_set_object_terms($post_id, ["foo & bar"], 'my_taxonomy', false);
}}}
When the term does not yet exist it will be created with slug 'foo-bar'
and name 'foo & bar in db.
Rename term to "this & that" in admin, slug remains foo-bar and name is
'this & that' in db.
Now call
{{{
wp_set_object_terms($post_id, ["this & that"], 'my_taxonomy', false);
}}}
You get error `'A term with the name provided already exists in this
taxonomy.'`
This is because the name matching logic in term_exists does not find the
term by name since it is comparing the non escaped name 'this & that' to
the escaped name in the db 'this & that' and determines it does not
exist.
I can work around this problem by calling the lower level wp functions
myself, but this seems to be a bug.
--
--
Ticket URL: <https://core.trac.wordpress.org/ticket/53152#comment:9>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list