How to query custom post type by term?

This seems trivial but I can’t get it to work. Here’s my code:

        $args = array(
            'numberposts'     => -1,
            'eventcategory'   => 'nice-events',
            'post_type'       => 'event',
            'post_status'     => 'publish' 
        );

        var_dump(get_posts($args));

As you can see, my taxonomy is eventcategory and the term is nice-events. There are actually over 50 terms and regardless of what term I use in place of nice-events I always get the same result: all of the posts. So the term is being ignored and I have no idea why.

Related posts

Leave a Reply

1 comment

  1. You cannot make up your own arguments – rather than replacing the 'category' argument with your taxonomy name, use 'tax_query'.

    See “taxonomy parameters” section of the codex on get_posts.

    $args = array(
        'post_type' => 'event',
        'post_status' => 'publish',
        'tax_query' => array(
            array(
                'taxonomy' => 'eventcategory',
                'field' => 'slug',
                'terms' => 'nice-events',
            ),
        ),
    );
    
    
    $your_query = get_posts( $args );
    
    // do something with $your_query
    

    Alternatively, you could make use of the WP_Query class:

    $args = array(
        'posts_per_page' => -1,
        'post_type' => 'event',
        'post_status' => 'publish',
        'tax_query' => array(
            array(
                'taxonomy' => 'eventcategory',
                'field' => 'slug',
                'terms' => 'nice-events'
            ),
        ),
    );
    
    
    $your_query = new WP_Query( $args );
    
    // do something with $your_query