[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