以数组为值的Meta_Query

时间:2012-10-02 作者:tyler

我正在编写一些PHP,它允许我的网站的用户提交一个表单并通过他们的post\\u meta查询帖子。除了一件事之外,一切都很好,我使用高级自定义字段创建post\\u meta,ACF将meta值保存为序列化数组。我需要以这种格式保存数据,以便ACF可以预先填充管理面板中的自定义字段。我需要一种方法将值数组(用户通过表单中的复选框选择)与数据库中的序列化数组进行比较。我的查询的第一部分如下所示,其中$便利设施是复选框值的数组:

$the_query = new WP_Query(
    array(
        \'post_type\' => \'listing\',
        \'meta_query\' => array(
            array(
                \'key\' => \'distance\',
                \'value\' => $distance,
                \'type\' => \'numeric\',
                \'compare\' => \'<=\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[0],
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[1],
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[2],
                \'compare\' => \'LIKE\'
            )
        )
    )
);
我可以让查询工作的唯一方法是查询用户可以在复选框中输入的每个可能的值($便利设施[#]),但这似乎太麻烦了,我的数据库无法处理。

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

我找到了一种构建自定义查询的方法,该查询通过用户选择的复选框,然后为该值动态添加一个数组到查询中。这样,它会检查所选的每个值是否在序列化数组中,然后移动到下一个值。比我之前做的要流畅得多。

for ($i=0; $i< count($amenities); $i++)
    {
        $count = count($arrays);
        $arrays[$count] = array(
                    \'key\' => \'amenities\',
                    \'value\' => $amenities[$i],
                    \'compare\' => \'LIKE\'
                    );
    }

$the_query = new WP_Query(array(
        \'post_type\' => \'listing\',
        \'post_status\' => \'publish\', 
        \'category_name\' => \'private_rental\',
        \'meta_query\' => $arrays
    ));

结束

相关推荐

Trim posts from WP-Query?

我希望在我的首页上显示一些由以下标准确定的帖子:显示当月的所有帖子(实际上是从最近帖子对应的月份开始);但是如果这个数字少于(比如)8,那么就显示最近的8篇帖子。假设我知道每个月都不会有超过(比如)20篇文章,我会将posts\\u per\\u page设置为20,通常抓取最近的20篇文章,然后在php中进行适当的修剪(切片)。(在SQL中这样做似乎太复杂了)顺便说一句:起初我以为add_filter( \'posts_results\', ... ) 这很合适,但很难区分查询是与主循环相对应,还是与其

以数组为值的Meta_Query - 小码农CODE - 行之有效找到问题解决它

以数组为值的Meta_Query

时间:2012-10-02 作者:tyler

我正在编写一些PHP,它允许我的网站的用户提交一个表单并通过他们的post\\u meta查询帖子。除了一件事之外,一切都很好,我使用高级自定义字段创建post\\u meta,ACF将meta值保存为序列化数组。我需要以这种格式保存数据,以便ACF可以预先填充管理面板中的自定义字段。我需要一种方法将值数组(用户通过表单中的复选框选择)与数据库中的序列化数组进行比较。我的查询的第一部分如下所示,其中$便利设施是复选框值的数组:

$the_query = new WP_Query(
    array(
        \'post_type\' => \'listing\',
        \'meta_query\' => array(
            array(
                \'key\' => \'distance\',
                \'value\' => $distance,
                \'type\' => \'numeric\',
                \'compare\' => \'<=\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[0],
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[1],
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => \'amenities\',
                \'value\' => $amenities[2],
                \'compare\' => \'LIKE\'
            )
        )
    )
);
我可以让查询工作的唯一方法是查询用户可以在复选框中输入的每个可能的值($便利设施[#]),但这似乎太麻烦了,我的数据库无法处理。

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

我找到了一种构建自定义查询的方法,该查询通过用户选择的复选框,然后为该值动态添加一个数组到查询中。这样,它会检查所选的每个值是否在序列化数组中,然后移动到下一个值。比我之前做的要流畅得多。

for ($i=0; $i< count($amenities); $i++)
    {
        $count = count($arrays);
        $arrays[$count] = array(
                    \'key\' => \'amenities\',
                    \'value\' => $amenities[$i],
                    \'compare\' => \'LIKE\'
                    );
    }

$the_query = new WP_Query(array(
        \'post_type\' => \'listing\',
        \'post_status\' => \'publish\', 
        \'category_name\' => \'private_rental\',
        \'meta_query\' => $arrays
    ));

相关推荐

警告:CALL_USER_FUNC_ARRAY()要求参数1是有效的回调

我创建了一个新的wordpress,没有主题,只有一个插件:GDPR WP。(我想先在空wordpress上试用这个插件,然后再将它部署到其他网站上)。所以,我第一次尝试创建函数来接受或不接受GoogleAnalytics cookie。我的函数工作正常,但在BO/FO上有一个错误:Warning: call_user_func_array() expects parameter 1 to be a valid callback, function \'cookie_GA\' not found or i