动态元查询

时间:2016-06-06 18:18:28

标签: wordpress

我在这里摔倒了。通过本网站上的帖子,我设法在WordPress中创建了一个自定义分类档案页面。现在我正在尝试为其添加动态复选框过滤器,但我似乎无法使meta_query正常工作。

这行代码就像我希望的那样工作;

    $query = array(
    'post_type' => 'company',
    'posts_per_page' => 999,
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'company_category',
            'field' => 'slug',
            'terms' => $al_cat_slug
        )
    ),
    'meta_query' => array (
        array (
            'key' => 'company_method',
            'value' => 'Online',
            'compare'   => 'LIKE',
        )
    )
);

然而,这个不会:

$query = array(
    'post_type' => 'company',
    'posts_per_page' => -1,
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'company_category',
            'field' => 'slug',
            'terms' => $al_cat_slug
        )
    ),
);

$al_tax_post_qry = new WP_Query($query);

$meta_query = $al_tax_post_qry->get('meta_query');

$name = 'company_method';
$value = explode(',', $_GET[ $name ]);

$meta_query[] = array(
        'key'       => $name,
        'value'     => $value,
        'compare'   => 'LIKE',
);

$al_tax_post_qry->set('meta_query', $meta_query);

无论我在URL中输入什么,它都会不断查找所有结果,并且不会像第一个那样过滤。 print_r($ meta_query);给了我:

Array ( [0] => Array ( [key] => company_method [value] => Array ( [0] => Online ) [compare] => LIKE ) )

编辑07-06-2016 // 09:00 在阅读说明我应该使用'IN'的评论后,我进行了一些进一步的实验,当我使用它与查询本身时,它根本没有给我任何结果。似乎'IN'是问题所在。 我正在查询的字段是“高级自定义字段”字段,因此可能与它有关?但是,他们网站上的示例也使用相同的方法。

不工作:

    $query = array(
    'post_type' => 'company',
    'posts_per_page' => -1,
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'company_category',
            'field' => 'slug',
            'terms' => $al_cat_slug
        )
    ),
    'meta_query' => array (
        'relation'      => 'AND',
        array (
            'key' => 'company_method',
            'value' => array('online', 'orange', 'apple'),
            'compare'   => 'IN',
        )
    ),
);

工作:

        $query = array(
    'post_type' => 'company',
    'posts_per_page' => -1,
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'company_category',
            'field' => 'slug',
            'terms' => $al_cat_slug
        )
    ),
    'meta_query' => array (
        'relation'      => 'AND',
        array (
            'key' => 'company_method',
            'value' => 'online',
            'compare'   => 'LIKE',
        )
    ),
);

我可以选择在meta_query中为数组中的每个值创建一个数组条目,但这可能不太理想。

2 个答案:

答案 0 :(得分:1)

如果您将$ meta_query value定义为数组,则应更改compare运算符。 INNOT IN是特定于数组的。

试试这个:

$meta_query[] = array(
    'key'       => $name,
    'value'     => $value,
    'compare'   => 'IN',
);

希望它有所帮助!

答案 1 :(得分:0)

在这篇文章的帮助下,问题解决了!值以序列化方式存储,因此需要一些不同的方法。 https://wordpress.stackexchange.com/questions/183182/meta-query-compare-in-not-working