На веб-сайте WordPress, который я создаю, у меня есть пользовательский пост (cp_course
), который имеет следующие подполя: course_code
, course_duration
, period_a_start
, period_a_end
, period_b_start
, period_b_end
, period_c_start
, period_c_end
, period_d_start
и period_d_end
.
Форма поиска имеет следующие поля: code
, duration
, datefrom
, dateto
.Пользователь может искать с помощью любого из них.Я реализовал только случай, когда пользователь использует все поля поиска:
if(!empty($code) && !empty($duration) && !empty($datefrom) && !empty($dateto))
{
$args = array(
'post_type' => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
'meta_query' =>
array(
'relation' => 'AND',
array(
'key' => 'course_code',
'value' => $code,
),
array(
'key' => 'course_duration',
'value' => $duration,
),
array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => 'period_a_start',
'compare' => '>=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($datefrom)),
),
array(
'key' => 'period_a_end',
'compare' => '<=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($dateto)),
),
),
array(
'relation' => 'AND',
array(
'key' => 'period_b_start',
'compare' => '>=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($datefrom)),
),
array(
'key' => 'period_b_end',
'compare' => '<=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($dateto)),
),
),//IF I REMOVE the follow lines (period_c_* and period_d_*) then it works
array(
'relation' => 'AND',
array(
'key' => 'period_c_start',
'compare' => '>=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($datefrom)),
),
array(
'key' => 'period_c_end',
'compare' => '<=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($dateto)),
),
),
array(
'relation' => 'AND',
array(
'key' => 'period_d_start',
'compare' => '>=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($datefrom)),
),
array(
'key' => 'period_d_end',
'compare' => '<=',
'type' => 'numeric',
'value' => date("Ymd", strtotime($dateto)),
),
),
),
)
);
$course = get_posts($args);
}
<div class="page_title">
<h3>Courses</h3>
</div>
<?php foreach ($course as $post):setup_postdata($post);?>
<a href="#"><?php the_title();?></a>
<?php endforeach;wp_reset_postdata();?>
Но это не похоже на работу.Он застрял в петле, уже 10 минут и все еще в поиске.Что идет не так?
Существует ли более простая логика для реализации различных случаев, чем несколько ifs
?Я собираюсь использовать что-то вроде этого, но это выглядит очень долго и сложно ...:
if(!empty($code) && !empty($duration) && !empty($datefrom) && !empty($dateto))
{....}
else if(empty($code) && !empty($duration) && !empty($datefrom) && !empty($dateto))
{....}
.......