#php #wordpress #comparison
#php #wordpress #сравнение
Вопрос:
Я выполняю WP_Query для пользовательского типа post с именем «задача», который имеет поле «этап». Мне нужно получить все сообщения с «этапом»> = «этап» другой задачи. Проблема в том, что stage — это строковое значение, поэтому использование оператора >= в мета-запросе не сработает.
В настоящее время мой взлом заключается в создании массива, который содержит строковое значение от чисел $ stage до 50, и запрашивает сообщения, чья стадия находится в этом массиве. Пока это будет работать, поскольку ни один этап не превышает 12, но не очень масштабируемое или динамичное решение. Мне интересно, есть ли лучший способ изменить значение, полученное в WP_Query, прежде чем использовать для него оператор?
$stage = get_field('stage', $task_id);
$future_tasks = array();
for ($i = intval($stage); $i <= intval($stage) 50; $i ) {
array_push($future_tasks, strval($i));
}
$tasks_query_args = array(
'post_type' => array('task'),
'posts_per_page' => -1,
'order' => 'DESC',
'meta_query' => array(
'0' => array(
'key' => 'project',
'value' => $project_id,
'compare' => '=',
),
'1' => array(
'key' => 'stage',
'value' => $future_tasks,
'compare' => 'IN',
),
'relation' => 'AND',
),
);
В идеале второй параметр запроса должен быть примерно таким:
'1' => array(
'key' => 'stage',
'value' => intval($stage),
'compare' => '>=',
),
Но это не сработает, потому что значение поля stage является строкой.
Интересно, есть ли какие-либо идеи о том, как лучше этого добиться?
Ответ №1:
Похоже, использование numeric
type может решить проблему:
$tasks_query_args = array(
'post_type' => array( 'task' ),
'posts_per_page' => - 1,
'order' => 'DESC',
'meta_query' => array(
'0' => array(
'key' => 'project',
'value' => intval( $project_id ),
'compare' => '=',
'type' => 'numeric',
),
'1' => array(
'key' => 'stage',
'value' => intval( $task_id ),
'compare' => '>=',
'type' => 'numeric',
),
'relation' => 'AND',
),
);