WP Query не показывает все результаты постоянно

У меня есть веб-сайт с предложениями обедов и ужинов на следующий день. Предложения вводятся в виде сообщений, находятся в собственной категории (id=4) и имеют два значения настраиваемого поля: - menu_date - дата, когда сообщение должно быть видно - menu_number - если это обед, то 1, если ужин - 2

Я использую этот запрос, чтобы получить сообщения, которые мне нужны:

$args = array(
'post_type'  => 'post',
'cat' => 4,
'meta_key'=>'menu_number', 'orderby' => 'meta_value_num', 'order' => ASC );

$query = new WP_Query($args);

if ( $query->have_posts() ) {
while($query->have_posts()) {
    $query->the_post();

    $menu_date = get_post_custom_values( 'menu_date' );
    $menu_number = get_post_custom_values( 'menu_number' );
    $tommorow = date("dmY", time()+86400);

    if ( $tommorow == $menu_date[0] && has_post_thumbnail() ) {
         the_post_thumbnail('full', array( 'class' => 'img-responsive' ) );
             if ($menu_number[0] == 1) {
                 <a href="#">Get Lunch!</a>
             }
             else{
                 <a href="#">Get Dinner!</a>
             }
         the_title();
    }
}
} wp_reset_query();

Каждый день должны быть видны предложения обеда и ужина, но иногда показывается только обед, но после нескольких обновлений оба снова видны.

Есть ли способ улучшить код, чтобы этого больше не происходило? Спасибо

3 ответа

Решение

Я понял:

Я изменил $args следующим образом. Я добавил здесь menu_date и получаю только те сообщения, которые имеют правильное значение.

$args = array(
'post_type'  => 'post',
'cat' => 4,
 'meta_query' => array(
                array(
                    'key' => 'menu_date',
                    'value' => "$tommorow"
                )),
 'meta_key'=>'ordine_meniu', 'orderby' => 'meta_value_num', 'order' => ASC ); 

 $query = new WP_Query($args);

Каждый день должны быть видны предложения обеда и ужина, но иногда показывается только обед, но после нескольких обновлений оба снова видны.

Это может быть связано с тем, как вы рассчитываете на завтрашнюю дату:

$tommorow = date("dmY", time()+86400);

Попробуйте изменить его следующим образом и посмотрите, будет ли это работать:

$tomorrow = date("dmY", strtotime("tomorrow"));

Попробуйте проверить оба сразу в цикле. Как это:

        `if ($menu_number[0] == 1) {
             <a href="#">Get Lunch!</a>
         }
         if ($menu_number[0] == 2){
             <a href="#">Get Dinner!</a>
         }`

Если это не решит проблему, попробуйте отладить значения $menu_number и $menu_date. Посмотри, что будет.

РЕДАКТИРОВАТЬ:

Аргументы мета-запроса должны быть такими: $tommorrow был неверен в ваших аргументах

'meta_query' => array(
    array(
        'key' => 'menu_date',
        'value' => $tommorow
    )
)

Для запроса даты:

$tomorrow = date("dmY", time()+86400);
$args = array(
    'date_query' => array(
        array(
            'year'  => $tomorrow["year"],
            'month' => $tomorrow["mon"],
            'day'   => $tomorrow["mday"],
        ),
    ),
);

Это даст вам завтрашние сообщения.

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