Скажем, у меня есть массив флажков, связанных с постом (настраиваемым полем), хранящимся в базе данных в сериализованной форме. На моем сайте я предоставляю пользователям одинаковые флажки и позволяю им самим фильтровать записи в соответствии с их выбором. Если хотя бы один из их вариантов совпадает с выбором постов, этот пост должен отображаться.
$args['meta_query'] = array(
array(
'key' => 'choices',
'value' => $_POST['choices'],
'compare' => 'IN',
));
Поскольку данные в БД находятся в сериализованной форме, я надеялся, что WP_Query будет достаточно умен, чтобы понять, что ему необходимо десериализовать сериализованные данные в БД перед попыткой сопоставления. Этого не произошло, и я подумываю о том, чтобы отправить его в WP Trac и посмотреть, можно ли добавить его в качестве функции в будущих выпусках.
Мой вопрос заключается в том, есть ли у меня здесь какие-либо варианты, кроме как для хранения моих данных другим способом (что на данный момент кажется сложным, так как я использую плагин Advanced Custom Fields для его хранения). Я просмотрел meta_query с мета-значениями как сериализованные массивы, и ответы там указали мне на то, чтобы хранить мои данные другим способом. Я надеюсь, что смогу избежать этого.
Проблема в том, что SQL выполняет запросы, но только PHP понимает сериализацию. Вам нужно будет выбрать, а затем десериализировать КАЖДОЕ метаполе с соответствующим ключом и проверить его на соответствие. Не храните их сериализованными.