Zapytaj o niestandardowy typ postu i pogrupuj według taksonomii
Walczę trochę z moim fragmentem kodu – jego głównym celem jest pokazanie listy niestandardowych postów typu (zwanych „karierą”) pogrupowanych według niestandardowej taksonomii.
Jak to powinno działać?
Użytkownik widzi domyślną listę WSZYSTKICH dostępnych postów (z tego CPT kariery). Ponadto w każdym polu znajdują się dwa listy rozwijane z terminami z niestandardowych taksonomii. Pierwsza niestandardowa taksonomia nazywa się kategorią pracy, a drugą krajem pracy. Gdy użytkownik wybierze określoną wartość z listy rozwijanej i kliknie „filtruj”, lista wyświetlanych postów ulegnie zmianie. W sumie jest to prosty mechanizm filtrowania.
Co działa, a co nie?
Samo filtrowanie działa ok. Jeśli więc użytkownik wybierze dowolną wartość z listy kategorii stanowisk i przefiltruje wyniki, wyświetli odpowiednią listę w ten sposób:
//CUSTOM TAXONOMY (job-category) TERM NAME
list of assigned posts
Żadne inne posty nie powinny być wyświetlane.
Jeśli użytkownik wybierze wartość z OBU list rozwijanych (a więc przypisz parametry z obu taksonomii, kraj pracy i kategoria pracy), działa to również w ten sposób
//CUSTOM TAXONOMY (job-category) TERM NAME
list of assigned posts
Jedyną rzeczą, która obecnie nie działa, jest warunek, gdy użytkownik wybiera wartość z kraju pracy taksonomii. Chciałbym być wyświetlany w taki sam sposób jak poprzednio
//CUSTOM TAXONOMY (job-category) TERM NAME
list of assigned posts
Teraz zamiast tego pokazuje tylko pełną listę stanowisk spełniających kryteria „kraju pracy”. Jednak nie ma grupowania według taksonomii „kategorii stanowisk”. To jest mój obecny kod:
<?php
$args = array(
'orderby' => 'date', // we will sort posts by date
'order' => $_POST['date'], // ASC or DESC
'post_type' => 'career',
'posts_per_page' => -1,
'post_status' => 'publish'
);
if( isset( $_POST['categoryfilter'] ) && isset ($_POST['taxonomyfilter']) ) {
$args['tax_query'][] = array(
array(
'taxonomy' => 'job-category',
'field' => 'name',
'terms' => $_POST['categoryfilter']
),
array(
'taxonomy' => 'job-country',
'field' => 'name',
'terms' => $_POST['taxonomyfilter']
),
);
} elseif( !isset( $_POST['categoryfilter'] ) && isset ($_POST['taxonomyfilter']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'job-country',
'field' => 'name',
'terms' => $_POST['taxonomyfilter']
);
} elseif( isset( $_POST['categoryfilter'] ) && !isset ($_POST['taxonomyfilter']) ) {
$args['tax_query'][] = array(
'taxonomy' => 'job-category',
'field' => 'name',
'terms' => $_POST['categoryfilter']
);
}
$query = new WP_Query( $args );
if( $query->have_posts() ) :
if(isset($_POST['categoryfilter'])) {
echo '<h2 class="category-title">'. $_POST['categoryfilter'] .'</h2>';
}
while( $query->have_posts() ): $query->the_post();
?>
<div class="job d-flex align-items-center">
<h3 class="job__title col-12 col-lg"><?php echo $query->post->post_title ; ?></h3>
</div>
<?php
endwhile;
wp_reset_postdata();
else :
echo '<p class="text-center">Sorry, no openings found :-(</p>';
endif;
die();