我有wp_query
包括自定义分类术语,如果所有字段都有值,则该术语有效。否则,它将给出0个结果。
这是用于获取分类术语的表单。
基于提交数据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,
),
),
));
有没有人支持这项工作?
最合适的回答,由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,