如何使此TAX_QUERY正常工作?

时间:2022-02-03 作者:user2584538

我有wp_query 包括自定义分类术语,如果所有字段都有值,则该术语有效。否则,它将给出0个结果。

这是用于获取分类术语的表单。enter image description here

基于提交数据WP_Query 需要构建。在我的例子中,这些分类法可以有值,也可以为null。甚至可以使用一种分类法进行浏览,也可以不选择任何分类法进行浏览。

这是我目前的代码。如果这三个字段都选择了值,那么它的工作非常好。否则,这将无法正常工作。需要为结果合并所有分类法。

这是我的提交表格:

<form method="get" action="<?php echo esc_url(home_url(\'/books/\')); ?>">
    <select name="book-category" class="form-select" id="book-category">
        <option value="" selected disabled hidden>Book Category</option>
        <option value="">Category 01</option>
        <option value="">Category 02</option>
        <option value="">Category 03</option>
    </select>
    <select name="publishing-year" class="form-select" id="publishing-year">
        <option value="" selected disabled hidden>Publishing Year</option>
        <option value="">2022</option>
        <option value="">2021</option>
        <option value="">2020</option>
    </select>
    <select name="print-status" class="form-select" id="print-status">
        <option value="" selected disabled hidden>Print Status</option>
        <option value="">In Print</option>
        <option value="">Not in Print</option>
    </select>
    <input type="submit" value="Search" />
</form>
这就是我将每个提交分配到变量的方式。

$book_category = $_GET[\'book-category\'];
$publishing_year = $_GET[\'publishing-year\'];
$print_status = $_GET[\'print-status\'];
这是我试图得到结果的WP\\u查询。

$book = new WP_Query(array(
    \'post_type\'=>\'book\',
    \'posts_per_page\'=>4,
    \'tax_query\'=> array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'book_category\',
            \'field\'    => \'slug\',
            \'terms\'    => $book_category,
        ),
        array(
            \'taxonomy\' => \'publishing_year\',
            \'field\'    => \'slug\',
            \'terms\'    => $publishing_year,
        ),
        array(
            \'taxonomy\' => \'print_status\',
            \'field\'    => \'slug\',
            \'terms\'    => $print_status,
        ),
    ),
));
有没有人支持这项工作?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

要实现这一点,您需要有条件地添加子句,现在您总是拥有所有3个子句,即使只选择了2个。

因此,请传入一个变量:

$tax_queries = [
    \'relation\' => \'AND\',
];
注意我用了现代的[] 数组而不是array(), 我添加了relation 就像我们一直想要的那样。

然后,通过测试这些变量来添加每个子句,例如针对图书类别:

if ( ! empty( $_GET[\'book-category\'] ) ) {
    $tax_queries[] = [
        \'taxonomy\' => \'book_category\',
        \'field\'    => \'slug\',
        \'terms\'    => $_GET[\'book-category\'],
    ];
}
这也是进行任何修剪或处理以删除尾随空格等的好时机。

对其他2个子句/字段再次执行此操作。最后,在查询中使用变量:

    \'tax_query\'=> $tax_queries,

相关推荐

Search results for ACF data

是否可以编写查询以仅从一个自定义字段中搜索数据?我有一个名为“讲座”的CPT,我只想搜索名为“关键字”的自定义字段中的数据,我有:<?php $args = array( \'post_type\' => \'lectures\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'