#php #ajax #wordpress #filtering
#php #ajax #wordpress #фильтрация
Вопрос:
Я создаю интерфейсный фильтр, который содержит флажки, которые посетители могут щелкнуть, чтобы отсортировать сообщения на основе таксономий. Сообщения, которые они могут фильтровать, — это пользовательский тип записи с прикрепленными к нему 3 таксономиями.
Это пользовательский живой фильтр ajax, так что всякий раз, когда кто-то нажимает флажок, возвращается результат, без загрузки страницы и кнопок отправки.
Интерфейс работает нормально, информация, которая отправляется на конечную точку, в порядке, и если я сузил запрос только до одной таксономии, все работает как ожидалось, независимо от таксономии, к которой я сужаю фильтр. Но с несколькими таксономиями в запросе я сталкиваюсь с проблемами. Я впервые создаю что-то подобное, поэтому я надеюсь, что это просто незначительная вещь, о которой я не подумал, но независимо от того, что я пытаюсь, фильтр таксономии фильтрует только по первой таксономии, в которой есть термин, отмеченный галочкой.
Пример:
Налог 1 Налог 2 Налог 3
Если первый флажок, который установлен, относится к налогу 1, то он будет фильтровать только в пределах налога 1. Если я попытаюсь щелкнуть флажок, который принадлежит налогу 2 или налогу 3, он полностью игнорирует эти термины / налог и по-прежнему фильтрует только по первой таксономии.
Я знаю, что делаю что-то неправильно в запросе, поэтому я действительно надеюсь, что кто-нибудь здесь, на SO, может дать мне некоторые указания о том, что я должен сделать, чтобы это заработало.
Вот конечная точка (запрос):
function myFilter ($data) {
$checkFylker = $data['checkFylker'];
$checkUtstyr = $data['checkUtstyr'];
$checkFors = $data['checkFors'];
$checkType = $data['checkType'];
//return $results;
//Main $args
$args = array(
'post_type' => 'ml_opp', // Query only "ml_opp" custom posts
'post_status' => 'publish', // Query only posts with "publish" status
'orderby' => 'date', // Sort posts by date
'order' => 'ASC' // ASC
);
$args['tax_query'] = array( 'relation'=>'AND' ); // AND means that all conditions of meta_query should be true
// for taxonomies / utstyr
if( isset( $checkUtstyr ) )
$args['tax_query'][] = array(
array(
'taxonomy' => 'ml_utstyr',
'field' => 'id',
'terms' => $checkUtstyr
)
);
//for taxonomies / forsendelse
if( isset( $checkFors ) )
$args['tax_query'][] = array(
array(
'taxonomy' => 'ml_forsendelse',
'field' => 'id',
'terms' => $checkFors
)
);
// for taxonomies / fylker
if( isset( $checkFylker ) )
$args['tax_query'] = array(
array(
'taxonomy' => 'ml_fylk',
'field' => 'id',
'terms' => $checkFylker
)
);
// for taxonomies / type
if( isset( $checkType ) )
$args['tax_query'] = array(
array(
'taxonomy' => 'ml_typ',
'field' => 'id',
'terms' => $checkType
)
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<h2>' . $query->post->post_title . '</h2>';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
Ответ №1:
Ваши все isset
условия неверно интерпретируются, чтобы соответствовать tax_query
. Посмотрите обновленный фрагмент кода ниже и сравните с вашим, чтобы найти разницу.
function myFilter ($data) {
$checkFylker = $data['checkFylker'];
$checkUtstyr = $data['checkUtstyr'];
$checkFors = $data['checkFors'];
$checkType = $data['checkType'];
//return $results;
//Main $args
$args = array(
'post_type' => 'ml_opp', // Query only "ml_opp" custom posts
'post_status' => 'publish', // Query only posts with "publish" status
'orderby' => 'date', // Sort posts by date
'order' => 'ASC' // ASC
);
$args['tax_query'] = array( 'relation'=>'AND' ); // AND means that all conditions of meta_query should be true
// for taxonomies / utstyr
if( isset( $checkUtstyr ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_utstyr',
'field' => 'id',
'terms' => $checkUtstyr
);
//for taxonomies / forsendelse
if( isset( $checkFors ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_forsendelse',
'field' => 'id',
'terms' => $checkFors
);
// for taxonomies / fylker
if( isset( $checkFylker ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_fylk',
'field' => 'id',
'terms' => $checkFylker
);
// for taxonomies / type
if( isset( $checkType ) )
$args['tax_query'][] = array(
'taxonomy' => 'ml_typ',
'field' => 'id',
'terms' => $checkType
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<h2>' . $query->post->post_title . '</h2>';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}