WordPress

Zapytaj o niestandardowy typ postu i pogrupuj według taksonomii

  • 23 stycznia, 2023
  • 3 min read
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(); 


Źródło

Warto przeczytać!  php - Powtarzalne pole w powtarzalnej grupie pól