WordPress: meta_query и массив

Итак, у меня есть форма поиска, которая возвращает пользовательские сообщения с 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();

Этот код работает, если значения в базе данных не являются сериализованным массивом, а представляют собой простые строки, но не работают с массивами, так что мне делать?

1

Решение

Хорошо, я не нашел способ поиска по сериализованным массивам, но я нашел способ обойти это.

Поэтому я не изменил никаких полей в админке, вместо этого я добавил новые с помощью цикла. Итак, у меня есть эти поля с именем 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'
);
}

И это работает просто отлично 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]