所以,我有一个搜索表单,返回 wp_query
的自定义帖子。现在我需要找到包含自定义字段和特定值的帖子:假设我有多个名为 catagories[]
的复选框。因此,当我保存它们时,它在db中生成一个序列化数组。现在我需要在前端帖子中搜索,其中包含值11 。数组看起来像这样: a:3:{i:1;s:2:"11";i:2;s:2:"33";i:3;s:2:"33";}
。所以这就出现了问题,如何从这个序列化数组中检索信息以查找值为11的所有帖子。我的代码是:
$args = array(
'post_type'=>'paibcresume',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => array(),
'tax_query' => array(),
'orderby' => 'date',
'meta_key' => '',
'order' => 'DESC'
);
// BASIC SEARCH FORM
// Search by category
// rbsercategories
// rbwwcategoryhidden
if (isset($_GET['rbsercategories']) && !empty($_GET['rbsercategories'])) {
$args['meta_query'][] = array(
'key' => 'rbwwcategoryhidden',
'value' => $_GET['rbsercategories'],
'compare' => 'IN'
);
}
$the_query = new WP_Query( $args );
while ($the_query->have_posts() ) : $the_query->the_post();
如果数据库中的值不是序列化数组,只是简单的字符串,但不能使用数组,那么此代码是有效的,所以我该怎么做?
答案 0 :(得分:0)
好的,我没有找到通过序列化数组进行搜索的方法,但我找到了解决它的方法。
所以我没有更改管理员中的任何字段,而是添加了一个带循环的新字段。所以我有这个名为rbwwcategoryhidden[]
的字段,它们创建了这个数组。我反序列化了该数组并为每个值创建了新字段:
$wwCategory = get_post_custom_values('rbwwcategoryhidden');
foreach($wwCategory as $wwCategoryValue){$wwCategoryUnser = unserialize($wwCategoryValue);}
$rbWwCatSearchCounter='0';
foreach($wwCategoryUnser as $catId){
$rbWwCatSearchCounter++;
echo '<input type="text" name="rbwwcatforsearch'.$rbWwCatSearchCounter.'" id="rbwwcatforsearch'.$rbWwCatSearchCounter.'" value="'.$catId.'">';
}
所以现在我有了新的字段,我个人限制了三个字段(用户只能查看三个复选框):rbwwcatforsearch1, rbwwcatforsearch2, rbwwcatforsearch3
。我为该数组中的每个字段添加了值:11,33和33。
现在我刚刚更改了前端的meta_query代码,它看起来像是:
// Search by category
if (isset($_GET['rbsercategories']) && !empty($_GET['rbsercategories'])) {
$args['meta_query'][] = array(
'key' => array('rbwwcatforsearch1','rbwwcatforsearch2','rbwwcatforsearch3'),
'value' => (isset($_GET['rbsercategories'])?$_GET['rbsercategories']:array()),
'compare' => 'IN'
);
}
它的效果非常完美:)