Параметры query_posts

295
06 марта 2017, 13:23

Использую следующий код, чтобы выводить посты из custom post type

query_posts(
    array(
    'post_type'      => 'success-stories',
    'paged'          => $paged,
    'posts_per_page' => -1,
    'meta_key' => 'post_id',
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
   )
);

Задано произвольное поле post_id, для того чтобы была возможность ручной сортировки постов (в нужном порядке). Но также нужно, чтобы выводились и те посты, у которых этот параметр не задан. Подскажите, что нужно изменить в параметрах запроса?

Answer 1

query_posts использовать небезопасно.

Используйте get_posts, pre_get_posts или WP_Query.

https://developer.wordpress.org/reference/functions/query_posts/
https://codex.wordpress.org/Function_Reference/get_posts
https://developer.wordpress.org/reference/hooks/pre_get_posts/
https://codex.wordpress.org/Class_Reference/WP_Query

'meta_key' => 'post_id'

В названиях нельзя использовать "post_id". Это зарезервированный (служебный) термин.

Answer 2

Запрос надо делать по OR, выбирая как те записи, где post_id не определен, так и те, где он больше нуля:

$args = array(
    'post_type'      => 'success-stories',
    'paged'          => $paged,
    'posts_per_page' => -1,
    'meta_query' => array(
       'relation' => 'OR',
        array(
         'key' => 'post_id',
         'compare' => 'NOT EXISTS',
         'value' => ''
        ),
        array(
         'key' => 'post_id',
         'compare' => '>',
         'value' => '0'
        )
    ),
    'orderby'        => 'meta_value_num',
    'order'          => 'ASC'
    );
query_posts($args);
READ ALSO
PHP Warning: Invalid argument supplied for foreach() in

PHP Warning: Invalid argument supplied for foreach() in

Помогите решить проблемуВ начале есть цикл foreach

333
Is not allowed to connect to this MariaDB server

Is not allowed to connect to this MariaDB server

Fatal error: Uncaught exception 'PDOException' with message

459
Как с PHP привести все даты к одному формату?

Как с PHP привести все даты к одному формату?

Есть база данных в которой порядка 600 записей у записей есть дата публикации которую кто только не вводил как попалоВ результате в одной колонке...

388
Как получить ответ от сервера к множественным формы ввода через ajax

Как получить ответ от сервера к множественным формы ввода через ajax

Здравствуйте! Пожалуйста, помогите с AJAX в связке с PHP

253