元查询“IN”不适用于ACF复选框筛选器

时间:2019-04-30 作者:Nicolas Lorand

我尝试将一些ACF过滤器集成到我的CPT归档页面。我从本教程开始:https://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/当我将其与ACF radio field一起使用时,它可以工作(如教程中的示例)。现在,我尝试使用ACF复选框字段。当我选择一个过滤器时,我没有结果。。。

这是我的代码:

$GLOBALS[\'my_query_filters\'] = array(
\'field_5cb6ef1f75209\'  => \'alcool\',
);


// action
add_action(\'pre_get_posts\', \'my_pre_get_posts\', 10, 1);

function my_pre_get_posts( $query ) {

// bail early if is in admin
if( is_admin() ) return;


// bail early if not main query
// - allows custom code / plugins to continue working
//if( !$query->is_main_query() ) return;

// get meta query
$meta_query = $query->get(\'meta_query\');


// loop over filters
foreach( $GLOBALS[\'my_query_filters\'] as $key => $name ) {

    // continue if not found in url
    if( empty($_GET[ $name ]) ) {

        continue;

    }

    // get the value for this filter
    // eg: http://www.website.com/events?city=melbourne,sydney
    $value = explode(\',\', $_GET[ $name ]);

    // append meta query
    $meta_query = array(
        array(
            \'key\'     => $name,
            \'value\'       => $value,
            \'compare\'  => \'IN\',
        )
    );

}

// update meta query
$query->set(\'meta_query\', $meta_query);
return;

}
我的字段“alcool”是一个复选框。当我用一个无线电场代替它时,没关系。但我必须使用复选框。

我尝试了几种解决方案,我研究了数组和字符串,但都不管用。。。

谢谢!

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

复选框字段存储为serialized array, 因此,您不能使用IN 运算符和数组以及您要查找的值。

要获取选中“墨尔本”的帖子,请更改meta_query 收件人:

$meta_query = array(
    array(
        \'key\'      => $name,
        \'value\'    => \'"melbourne"\',
        \'compare\'  => \'LIKE\',
    )
);
获取帖子的步骤melbournesydney:

$meta_query = array(
    \'relation\' => \'OR\',
    [
        \'key\'      => $name,
        \'value\'    => \'"melbourne"\',
        \'compare\'  => \'LIKE\',
    ],
    [
        \'key\'      => $name,
        \'value\'    => \'"sydney"\',
        \'compare\'  => \'LIKE\',
    ],
);
考虑改变解决方案,因为these types of queries negatively affect performance.

相关推荐

无法成功执行AJAX脚本以调用函数.php特定的函数。使用XAMPP本地主机进行测试

在过去的12个小时里,我一直在努力掌握AJAX,但我正在慢慢失去它。如何通过表单或任何其他方式传递两个基本输入日期,而不是刷新页面,并让它执行包含JS脚本的PHP函数?在我将值传递给脚本之前,我只想回显我传递的数据数组,看看是否。。。ajax正在发挥作用。表单按钮只会刷新页面,所以我认为AJAX根本没有发挥作用。我正在试穿https://localhost 对于xampp。我不知道停止刷新并在按钮上插入ajax脚本缺少了什么。欣赏任何见解。功能。php<?php add_action(\'w