[wp-trac] [WordPress Trac] #36343: Taxonomy query matching specified term or NOT EXISTS does not return expected result

WordPress Trac noreply at wordpress.org
Sat Mar 26 13:20:46 UTC 2016


#36343: Taxonomy query matching specified term or NOT EXISTS does not return
expected result
-------------------------------+------------------------------
 Reporter:  crstauf            |       Owner:
     Type:  defect (bug)       |      Status:  new
 Priority:  normal             |   Milestone:  Awaiting Review
Component:  Query              |     Version:  4.4.2
 Severity:  normal             |  Resolution:
 Keywords:  reporter-feedback  |     Focuses:
-------------------------------+------------------------------
Changes (by swissspidy):

 * keywords:   => reporter-feedback


Old description:

> Performing a query on a (custom) taxonomy looking for a specified term or
> no term specified (NOT EXISTS) does not return the expected results. I
> discovered when working on a custom post type, but I tested on the post
> type, and the bug persisted.
>
> Steps to reproduce:
> 1. Register a custom taxonomy
> 2. Create two posts, one assigned a term within the custom taxonomy, the
> other not
> 3. Perform query on the posts, with the following `tax_query` array:
> {{{
> #!php
> $args['tax_query'] = array(
>         'relation' => 'OR',
>         array(
>                 'taxonomy' => 'custom_tax',
>                 'field' => 'slug',
>                 'terms' => 'the_term',
>         ),
>         array(
>                 'taxonomy' => 'custom_tax',
>                 'operator' => 'NOT EXISTS',
>         ),
> );
> }}}
>
> (If you want to get really funky, create another post with a post format;
> in my discovery moment it was 'audio,' but I suspect it wouldn't matter
> which format.)
>
> This query selects posts that have the specified term, but not posts that
> do not have any term assigned (within `custom_tax`). If you created a
> post with a format, that post will be included in the results as well.
>
> See also:
> [https://core.trac.wordpress.org/ticket/29181 Ticket #29181]
> [https://core.trac.wordpress.org/changeset/29896 Changeset 29896 (fixes
> #29181)]

New description:

 Performing a query on a (custom) taxonomy looking for a specified term or
 no term specified (NOT EXISTS) does not return the expected results. I
 discovered when working on a custom post type, but I tested on the post
 type, and the bug persisted.

 Steps to reproduce:
 1. Register a custom taxonomy
 2. Create two posts, one assigned a term within the custom taxonomy, the
 other not
 3. Perform query on the posts, with the following `tax_query` array:
 {{{
 #!php
 $args['tax_query'] = array(
         'relation' => 'OR',
         array(
                 'taxonomy' => 'custom_tax',
                 'field' => 'slug',
                 'terms' => 'the_term',
         ),
         array(
                 'taxonomy' => 'custom_tax',
                 'operator' => 'NOT EXISTS',
         ),
 );
 }}}

 (If you want to get really funky, create another post with a post format;
 in my discovery moment it was 'audio,' but I suspect it wouldn't matter
 which format.)

 This query selects posts that have the specified term, but not posts that
 do not have any term assigned (within `custom_tax`). If you created a post
 with a format, that post will be included in the results as well.

 See also:
 Ticket #29181
 Changeset [29896] (fixes #29181)

--

Comment:

 I just wrote small test in [attachment:36343.diff] to replicate this and I
 cannot see any unexpected behaviour (i.e. the test passes). When you look
 at the test, what kind of result would expect?

--
Ticket URL: <https://core.trac.wordpress.org/ticket/36343#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list