我正在编写一些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\'
)
)
)
);
我可以让查询工作的唯一方法是查询用户可以在复选框中输入的每个可能的值($便利设施[#]),但这似乎太麻烦了,我的数据库无法处理。
最合适的回答,由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
));