Итак, у меня есть форма поиска, которая возвращает пользовательские сообщения с wp_query
. Теперь мне нужно найти сообщения с настраиваемым полем и определенным значением: допустим, у меня есть несколько названных флажков catagories[]
. Поэтому, когда я сохраняю их, он создает сериализованный массив в БД. Теперь мне нужно искать в переднем конце сообщения с скажем значение 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();
Этот код работает, если значения в базе данных не являются сериализованным массивом, а представляют собой простые строки, но не работают с массивами, так что мне делать?
Хорошо, я не нашел способ поиска по сериализованным массивам, но я нашел способ обойти это.
Поэтому я не изменил никаких полей в админке, вместо этого я добавил новые с помощью цикла. Итак, у меня есть эти поля с именем 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'
);
}
И это работает просто отлично 🙂
Других решений пока нет …