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"],
),
),
);
Это даст вам завтрашние сообщения.