wordpress 将通过GET接收的数据与ACF复选框字段中的数据进行比较(如果找到至少一个匹配项,则查询帖子)

dwbf0jvd  于 2023-10-17  发布在  WordPress
关注(0)|答案(1)|浏览(85)

我试图建立一个自定义的WordPress搜索表单。我的搜索页面上的数据将使用GET方法发送到我的结果页面。然后,此数据将与ACF自定义字段中的数据进行匹配。
一切都很顺利,除了一个特殊的领域:
在我的搜索表单的前端,我有一个颜色复选框,发送到我的结果页面的数据在地址栏中看起来像这样:

&colors=blue,green

然后我将其保存到一个变量中,如下所示:

if (isset($_GET['colors'])) {
    $mycolors = $_GET['colors'];
}

现在,问题来了,我试图在WordPress中查询这个。每个帖子都有一个ACF复选框字段,我可以在其中选择可用的颜色。我希望这篇文章被查询,如果至少有一个颜色匹配。因此,如果一篇文章在ACF复选框中选择了“蓝色”和“黄色”,并且通过GET接收的数据是“蓝色”和“绿色”,那么应该查询该文章,因为它至少匹配一种颜色。
只要通过GET只接收到一种颜色,以下内容就可以工作

'meta_query' => array(
'relation' => 'AND',
    array(
        'key' => 'my_color_field',
        'value' => $mycolors,
        'compare' => 'LIKE',
    ),
  ) ,

收到多个颜色的那一刻,没有帖子被查询。
我想这是因为$mycolors变量应该是一个数组,所以我试着把它转换成这样的数组:

$mycolorsList = explode(",",$mycolors);

然后我将查询中的变量替换为我创建的新变量。但这会导致这样的错误:

  • “致命错误:未捕获的类型错误:addcslashes():参数#1($string)必须是string”* 类型

如果在通过GET接收的数据和通过ACF复选框输入的数据之间找到至少一个颜色匹配,我如何查询帖子?

nvbavucw

nvbavucw1#

我认为你必须把每一种颜色都作为自己的关系添加进去。

$mycolorsList = explode(",",$mycolors);
$meta_array = array();

foreach ($mycolorslist as $key => $value) {
    array_push( $meta_array,
        'relation' => 'AND',
        array(
            'key' => 'relate_blog_posts',
            'value' => $value,
            'compare' => 'LIKE',
        )
    );
}

$post_args = array(
    'post_type' => 'post',
    'posts_per_page' => 3,
    'post_status' => 'publish',
    'meta_query' => $meta_array
);
$post_query = new WP_Query($post_args);

相关问题