Запрос Wordpress, отображающий сообщение в пустом столбце?
У меня есть следующие аргументы WP_Query
:
$posts = new WP_Query(array(
'post__in' => $postids,
'meta_key' =>'ratings_average',
'orderby'=>'meta_value_num',
'order' =>'DESC',
));
$postids - это массив идентификаторов, который извлекается из другого WP_Query
. Моя проблема в том, что даже если $postids пуст, цикл Wordpress показывает сообщения. Как я могу управлять этим, чтобы он не показывал сообщения, если $postids пуст.
Ответы
Ответ 1
Это напрямую не устраняет проблему с помощью post__in
, но я не понимаю, почему это не сработает.
if(!empty($postids)){
$posts = new WP_Query(array(
'post__in' => $postids,
'meta_key' =>'ratings_average',
'orderby'=>'meta_value_num',
'order' =>'DESC',
));
} else {
//Do something else or nothing at all..
}
как вы можете видеть, вызов WP_Query
произойдет, только если $postids
имеет значение /s. если это не так, то вызов WP_Query
не выполняется, и цикл никогда не произойдет, как если бы ваш запрос вернул 0 сообщений.
Ответ 2
Как отмечалось, wp devs не хотят исправлять это. Сказав это, вы можете передать непустой массив недопустимых идентификаторов, например:
if(empty($postids)) {
$postids = ['issue#28099'];
}
$posts = new WP_Query(array(
'post__in' => $postids,
'meta_key' =>'ratings_average',
'orderby'=>'meta_value_num',
'order' =>'DESC',
));
Плохая практика, которую вы говорите? Да, я не уверен, с чьей стороны, хотя...
Ответ 3
Чтобы поток был корректным с WP_Query. Используйте его так:
$postIdArray = array(
1, 2, 3
);
$queryArgs = array(
'post_type' => 'any',
'post_status' => 'published',
'post__in' => ((!isset($postIdArray) || empty($postIdArray)) ? array(-1) : $postIdArray)
);
Таким образом, вы все равно сможете кодировать объект WP_Query.
Например:
$postIdArray = array(
1, 2, 3
);
$queryArgs = array(
'post_type' => 'any',
'post_status' => 'published',
'post__in' => ((!isset($postIdArray) || empty($postIdArray)) ? array(-1) : $postIdArray)
);
$postQuery = new \WP_Query($queryArgs);
$postCount = $postQuery->post_count;
$totalCount = $postQuery->found_posts;
Ответ 4
Может быть, у вас есть липкие сообщения. В этом случае WordPress добавит эти сообщения в ваш запрос.
Решение состоит в установке 'ignore_sticky_posts' => 1
. Применяя это к вашему коду:
$posts = new WP_Query(array(
'post__in' => $postids,
'ignore_sticky_posts' => 1,
'meta_key' =>'ratings_average',
'orderby'=>'meta_value_num',
'order' =>'DESC',
));
Ответ 5
Просто возникла та же проблема, лучше всего проверить, является ли массив пустым, а затем передать ему неверный идентификатор:
if(empty($postids)){
$postids[]= 0;
}
Добавьте это перед запросом, и проблема будет решена.