当我尝试按类别过滤自定义帖子类型档案时,我遇到了一个问题。
我想按多个类别过滤woocommerce的商店,因此我制作了一个小部件,该小部件显示具有所有类别的表单,并且每个复选框都有一个复选框。
此表格的HTMl为:
<form method="get">
<?php foreach($cats as $cat) : ?>
<p>
<input
style="margin-bottom: 0;"
type="checkbox"
id="<?php echo $cat->slug?>"
name="product_cat[]"
value="<?php echo $cat->slug?>">
<label style="margin: 5px 0 0 0; color: #777;"
for="<?php echo $cat->slug?>" >
<?php echo $cat->name; ?> (<?php echo $cat->count ?>)
</label>
</p>
<?php endforeach; ?>
<button class="button primary" style="margin-top: 20px;" type="submit">
<?php _e('Filtrer', 'themedomain');?>
</button>
</form>
当我选中一个或多个复选框并提交表格时,我会收到该网址
http://example.com/shop/?product_cat%5B%5D=chauffageclimatisation&product_cat%5B%5D=essencegaz
对我来说似乎很棒,但是我收到此错误消息,并且没有帖子显示:
Warning: urlencode() expects parameter 1 to be string, array given in /path/to/website/wp-includes/formatting.php on line 4791
我非常确定这一定是可行的,因为我在上一份工作中已经完成了,但是我无法访问代码来检查它。有人可以帮我吗?
我还知道,如果您在查询中添加与','
分开的字词,则WordPress会自动过滤帖子,例如:
http://example.com/shop/?product_catchauffageclimatisation,essencegaz
但是我不知道如何通过复选框获得此结果。
答案 0 :(得分:0)
function rclr_query_string($q)
{
foreach (get_taxonomies(array(), 'objects') as $taxonomy => $t) {
if ('post_tag' == $taxonomy) {
continue; // Handled further down in the $q['tag'] block
}
if ($t->query_var && !empty($q[$t->query_var])) {
if (is_array($q[$t->query_var])) {
$q[$t->query_var] = implode(',', $q[$t->query_var]);
}
}
}
return $q;
}
add_filter('request', 'rclr_query_string', 1);