Несколько значений, сохраненных в виде массива в мета-запросе
Я немного запутался в том, как лучше всего сохранять значения множественного выбора в мета-полях.
Предполагая
<select multiple name="_casestudypost[]">
- это мое поле формы
Если я сохраню $_POST['_casestudypost'] в метаключе с тем же именем? (который возвращает массив) - как я могу узнать, когда 281 находится в этом массиве. Я пробовал:
$args = array(
'meta_query'=> array(
array(
'key'=>'_casestudypost',
'value'=> 281,
'compare' => 'IN',
'type' => 'NUMERIC'
)
),
'post_type'=>'case_studies',
'post_status' => 'publish'
);
Однако сгенерированный SQL, который Wordpress генерирует под капотом, похоже, задает вопрос: значение meta_value (13,281,45) в 281, а не 281 в мета_значение (13,281,45).
2 answers
Запрос IN
не является запросом сравнения строк. Это больше похоже на набор OR
утверждений.
... WHERE tablename.animal IN ('cat','dog','ferret')
Будет таким же, как
...WHERE tablename.animal = 'cat'
OR tablename.animal = 'dog'
OR tablename.animal = 'ferret'
$_POST['_casestudypost']
будет массивом, и если вы сохранили его как одно значение в postmeta, это будет serialize
d. Массив array("animal" => "cat");
при сериализации будет выглядеть примерно как a:1:{s:6:"animal";s:3:"cat";}
. Ваше фактическое значение $_POST['_casestudypost']
будет аналогичным образом преобразовано. Это очень далеко от того, что вам нужно.
Если вы собираетесь тянуть по значениям или парам ключ/значение храните каждое из выбранных вами значений $_POST['_casestudypost']
отдельно в базе данных - каждое значение в отдельной строке, а не в виде отдельной пары ключ/значение, содержащей сериализованный массив.
Если вам не нужно искать по значению, сохраните сериализованный массив.
В вашем вопросе недостаточно контекста, чтобы я мог сказать, действительно ли вам нужно искать по значению или нет. Могут быть способы получить желаемый результат, о котором вы не думаете о.
Значение по умолчанию compare
в meta_query
равно =
, что вам и нужно. Предполагая, что я правильно понимаю ваш вопрос, вы хотите следующего.
$args = array(
'meta_query'=> array(
array(
'key'=>'_casestudypost',
'value'=> 281,
'type' => 'NUMERIC'
)
),
'post_type'=>'case_studies',
'post_status' => 'publish'
);
compare (string) - Operator to test the 'meta_value'. Possible values are '!=', '>', '>=', '<', or '<='. Default value is '='.
( перефразировано для решения мета_запроса)