Wordpress:警告:urlencode()期望参数1为字符串,第4791行的wp-includes / formatting.php中给出的数组

时间:2019-01-28 18:14:46

标签: php wordpress

当我尝试按类别过滤自定义帖子类型档案时,我遇到了一个问题。

我想按多个类别过滤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

但是我不知道如何通过复选框获得此结果。

1 个答案:

答案 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);