1

I'm trying to pull custom post types that have a specific custom taxonomy

This is what i've tried:

$args = array(
            'posts_per_page'    => -1,
            'post_type'         => 'products',
            'post_status'       => 'publish',
            'tax_query'         => array(
                array(
                    'taxonomy'  => 'subjects',
                    'field'     => 'name',
                    'terms'     => $shortcode_atts['subject'],
                ),
                array(
                    'taxonomy'  => 'plans',
                    'field'     => 'name',
                    'terms'     => $shortcode_atts['plan'],
                ),
            ),
        );

$shortcode_atts looks like this:

string(80) "Array
(
    [subject] => אינטרנט
    [plan] => מסלול 10 גיגה 
)
"

i.e. That's in Hebrew, subject=internet and plan=10giga

I also tried to use operator, wasn't sure in which place to add it so I tried in all locations but it didn't work. Can someone guide me how to pull these posts?

This query returns all cpt's without the filtering that I want.

EDIT: shortcode_atts is this:

function show_product( $atts, $content = null, $tag ) {
    $shortcode_atts = shortcode_atts( array(
        'subject' => '',
        'plan'  =>  ''
    ), $atts );
}
add_shortcode( 'show_product', 'show_product' );

Thanks!

6
  • Your question says $shortcode_atts is a string. It should be an array. Can you include more of where you're setting it. Commented Jul 2, 2018 at 12:06
  • I edited the post, do I need to set the values to $atts['subject'] and $atts['plan']? the documentation for this method isn't so good.
    – odedta
    Commented Jul 2, 2018 at 12:08
  • No, what you have is correct. Can you var_dump( $args ) and show what you get. Commented Jul 2, 2018 at 12:17
  • pastebin.com/h3m64HeZ - It's supposed to get only post 1 and 2, not 0.
    – odedta
    Commented Jul 2, 2018 at 12:27
  • No, dump $args. Just the arguments, before you do the query. Commented Jul 2, 2018 at 12:31

1 Answer 1

1

You use multiple taxonomies at once, so use'relation' => 'AND':

<?php

$args = array(
    'posts_per_page'    => -1,
    'post_type'         => 'products',
    'post_status'       => 'publish',
    'tax_query'         => array(
        'relation' => 'AND', // this is what was missing
        array(
            'taxonomy'  => 'subjects',
            'field'     => 'name',
            'terms'     => $shortcode_atts['subject'],
        ),
        array(
            'taxonomy'  => 'plans',
            'field'     => 'name',
            'terms'     => $shortcode_atts['plan'],
        ),
    ),
);
9
  • That actually doesn't find any post, which is weird because your syntax looks correct.
    – odedta
    Commented Jul 2, 2018 at 12:44
  • Try to cast 'terms' like 'terms' => (string) $shortcode_atts['plan'].
    – Max Yudin
    Commented Jul 2, 2018 at 12:50
  • It's a string originally, anyhow it doesn't work.
    – odedta
    Commented Jul 2, 2018 at 12:51
  • This is how everything looks: pastebin.com/HyAb9f34
    – odedta
    Commented Jul 2, 2018 at 12:54
  • How did you get it?
    – Max Yudin
    Commented Jul 2, 2018 at 12:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.