Приоритизация wp_query по мета-ключу

У меня есть два настраиваемых поля для представлений. weekly_views и all_views. Пользовательское поле еженедельных просмотров удаляется каждую неделю и снова начинает подсчет просмотров с 0. Итак, теперь я хочу показать 12 сообщений с еженедельными просмотрами, но когда настраиваемое поле удалено и если нет просмотров по этим сообщениям, запрос ничего не показывает. . Я хочу показывать здесь сообщения all_views вместо сообщений без сообщений.

Мой запрос выглядит следующим образом, но он работает не так, как я хочу. Короче говоря, я хочу показать сообщения с помощью настраиваемого поля weekly_views, но если публикации нет, то показывать сообщения от all_views. А также, если есть менее 12 сообщений от weekly_views, сначала покажите сообщения weekly_views, а затем оставшиеся сообщения от all_views.

$args = array(
    'post_type'  => array( 'custom_post_type_1', 'custom_post_type_2'),
    'posts_per_page' => '12',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',                  
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'weekly_views',    
        ),
        array(
            'key'     => 'all_views',
        ),
    ),
);

Приведенный выше код возвращает мне сообщения, но отсортированы по all_views.


Редактировать

Новый запрос, который у меня работает

<?php
$args = array(
    'post_type'=> array( 'custom_post_type1', 'custom_post_type2'),
    'posts_per_page' => '12',
    'meta_key' => 'weekly_views',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    );
$the_query = new WP_Query( $args );
if ($the_query->post_count < 12) {
$countweeklyposts = $the_query->post_count;
$showallpostscount = 12 - $countweeklyposts;
$args2 = array(
    'post_type'=> array( 'band', 'artist'),
    'posts_per_page' => $showallpostscount,
    'meta_key' => 'all_views',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    );

$the_query2 = new WP_Query( $args2 );
}

?>

<?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>

//Code to show posts goes here

<?php
endwhile;
wp_reset_postdata();
?>

<?php while ($the_query2 -> have_posts()) : $the_query2 -> the_post(); ?>

//Code to show posts goes here

<?php
endwhile;
wp_reset_postdata();
?>
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы тоже можете сделать это, если хотите немного меньше кода

<?php
    $args = array(
        'post_type'=> array( 'custom_post_type1', 'custom_post_type2'),
        'posts_per_page' => '12',
        'meta_key' => 'weekly_views',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
    );
    $args2 = array(
        'post_type'=> array( 'band', 'artist'),
        'posts_per_page' => '12',
        'meta_key' => 'all_views',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
    );
    if ($query->post_count > 12) {
        $query_args = $args;
    }else if ($query->post_count < 12){
        $query_args = $args2;
    }

    $query = new WP_Query( $query_args );

    while ($query -> have_posts()) : $query -> the_post(); 
    //Code to show posts goes here

    endwhile;
    wp_reset_postdata();
?>

Привет, добавляю 'meta_key' => 'weekly_views', показывает пост только по weekly_views. Но если нет сообщений от weekly_views и, как я уже сказал, это настраиваемое поле удаляется каждую неделю, тогда оно не возвращает сообщений от all_views. Я хочу показать сообщения по weekly_views, но если публикации нет, то показывать сообщения по all_views. А также, если есть менее 12 сообщений от weekly_views, сначала покажите сообщения weekly_views, а затем оставшиеся сообщения от all_views. Мне не нужен код, мне просто нужно знать, где я ошибаюсь. Спасибо.

Nikhil Phirke 19.12.2018 10:09

Привет, спасибо за редактирование. Я действительно понял это из сделанного вами редактирования. Я добавил новые аргументы, которые использую сейчас в вопросе выше, пожалуйста, дайте мне знать, если вы думаете, что я могу улучшить это лучше.

Nikhil Phirke 19.12.2018 15:52

Привет, у меня есть сценарий, который я написал некоторое время назад, чтобы добавить нумерацию страниц, если хотите, я могу поделиться им с вами. Возможно, это даст вам больше контроля над тем, как вы показываете свои сообщения.

13garth 21.12.2018 12:31

Я показываю эти сообщения в виде слайдера, поэтому нумерация страниц не требуется. Тем не менее, большое спасибо за редактирование, я протестирую это.

Nikhil Phirke 21.12.2018 15:07

Как получилось, что мой ответ был принят, и никто не ответил, но мой вопрос был отмечен .... Я не понимаю, в чем проблема с моим POST ....

13garth 09.10.2019 11:46

Другие вопросы по теме

Wordpress - Пользовательские поля - Как печатать "структурные строки"
Сохранение данных динамических полей в веб-сервисах в Android
Woocommerce - Добавьте настраиваемое поле оформления заказа в электронную почту нового аккаунта клиента
Настраиваемые поля WordPress: types_render_field () не выводятся в формате массива
Повторяемые многоколоночные строки данных в настраиваемом типе сообщений Wordpress
Wordpress, значение настраиваемых полей не отображается, вместо этого отображается идентификатор сообщения с использованием ACF или стандартных настраиваемых полей через параметры экрана
Сбросить настраиваемое поле при удалении меню навигации в WordPress
Платежные поля Woocommerce только для чтения - поля выбора и радио
Цикл после всех элементов в настраиваемом поле WordPress
Отправить название страны выставления счета администратору Woocommerce Электронная почта Wordpress