Сравнение строк как чисел в WP_Query

#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',
    ),
);