根据所选术语更改wordpress循环

时间:2018-10-25 07:51:11

标签: php wordpress custom-post-type

我已经创建了一个页面模板page-products.php,其中显示了所有产品(自定义帖子类型“ product”)。您可以在以下网址上看到该页面:http://axces-staging.houston-1.hybridmedia.be/producten/

您必须在页面左侧进行过滤。这些是自定义帖子类型“产品”的分类术语。

<?php
  $args = array('hide_empty' => false, 'orderby' => 'term_group', 'parent' => false);
  $terms = get_terms('product_categorie', $args);
  $hierarchy = _get_term_hierarchy('product_categorie');
   echo '<ul class="filter">';
    foreach ($terms as $term) {
     echo '<li class="parent"><strong class="parent__item">'.$term->name.'</strong>';
     if (array_key_exists($term->term_id, $hierarchy)) {
       echo '<ul class="childs">';
         foreach ($hierarchy[$term->term_id] as $v) {
           $child = get_term($v);
           echo '<li class="child" data-filter="'.$child->slug.'">'.$child->name.'</li>';
         }
      echo '</ul>';
     }
    echo '</li>';
   }
  echo '</ul>';
?>

所有产品均显示以下代码:

<?php $args = array('post_type' => 'product'); ?>
   <?php $loop = new WP_Query($args); ?>
    <?php if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>
       <?php get_template_part( 'loop-templates/content-product' ); ?>
     <?php endwhile; ?>
    <?php else: ?>
     <h1>
        <?php _e('Geen producten gevonden','axces-theme'); ?>
     </h1>
   <?php endif; ?>
<?php wp_reset_postdata(); ?>

但是如何根据所点击的子术语更改产品查询?因此,例如,如果我点击“ Wandlezers”一词,我只想显示带有“ Wandlezers”一词的产品。

1 个答案:

答案 0 :(得分:0)

在代码中添加术语链接,例如

<?php
      $args = array('hide_empty' => false, 'orderby' => 'term_group', 'parent' => false);
          $terms = get_terms('product_cat', $args);
          $hierarchy = _get_term_hierarchy('product_cat');
           echo '<ul class="filter">';
            foreach ($terms as $term) {
             echo '<li class="parent"><strong class="parent__item">'.$term->name.'</strong>';
             if (array_key_exists($term->term_id, $hierarchy)) {
               echo '<ul class="childs">';
                 foreach ($hierarchy[$term->term_id] as $v) {
                   $child = get_term($v);
                   echo '<li class="child" data-filter="'.$child->slug.'"><a href="?product_cat=' . $term->term_id. '">'.$child->name.'</a></li>';
                 }
              echo '</ul>';
             }
            echo '</li>';
           }
          echo '</ul>';
        ?>

然后像这样更改循环查询参数

<?php
       $args = array(
            'post_type' => 'product',
            'post_status' => 'any'
        );

        if ( ! empty( $_GET['product_cat'] ) ) {
            $args['tax_query'] = array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'id',
                    'terms'    => $_GET['product_cat'],
                ),
            );
        }
        ?>
       <?php $loop = new WP_Query($args); ?>
        <?php if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post(); ?>
           <?php get_template_part( 'loop-templates/content-product' ); ?>
         <?php endwhile; ?>
        <?php else: ?>
         <h1>
            <?php _e('Geen producten gevonden','axces-theme'); ?>
         </h1>
       <?php endif; ?>
    <?php wp_reset_postdata(); ?>

我希望它对您有用。