Вложенный список терминов WordPress - фильтр - PullRequest
0 голосов
/ 24 октября 2018

Я сделал таксономию в Wordpress с пользовательским интерфейсом плагина CPT.Таким образом, я могу добавить «Категории продуктов» в свой тип поста «Продукт».У нас есть родительские категории и дочерние категории.Например:

* Toegangscontroles

  • Electronische sloten
  • Программное обеспечение
  • Wandlezers

* Шпигели

  • Verlichte spiegels
  • ...

и так далее

Итак, я создал новую страницу "page-products«показать все продукты.Эта страница должна содержать фильтр по категориям товаров.

Я думаю, что эта страница состоит из 2 "петель".Один для фильтра и один для продуктов.

Цикл продукта

<?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(); ?>

Условия // Фильтр *

                <?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>';
                ?>

Но результат этого неверен.Я хочу иметь вложенный список.Примерно так:

<ul>
    <li class="parent">Toegangscontroles
        <ul>
            <li class="child">Software</li>
            <li class="child">Wandlezer</li>
        </ul>
    </li>
    <li class="parent">Another parent term
        <ul>
            <li class="child">child term</li>
            <li class="child">child term</li>
        </ul>
    </li>
</ul>

Итак, подытожил мои проблемы:

  1. Создайте фильтр на странице page-product.php
  2. Правильно вложите список

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

HTML здесь недопустим, однако правильным решением является использование функции _get_term_hierarchy ()

  $args = array('hide_empty' => 0, 'orderby' => 'term_group');
  $terms = get_terms('category', $args);
  $hierarchy = _get_term_hierarchy('category');
  echo '<ul>';
  foreach ($terms as $term) {
    echo '<li>'.$term->name;
    if (array_key_exists($term->term_id, $hierarchy)) {
      echo '<ul>';
      foreach ($hierarchy[$term->term_id] as $v) {
        $child = get_term($v);
        echo '<li>'.$child->name.'</li>';
      }
      echo '</ul>';
    }
    echo '</li>';
  }
  echo '</ul>';
0 голосов
/ 24 октября 2018

Это выведет таксономии, которые зарегистрированы для ваших продуктов:

После этого вы хотите, чтобы foreach или какой-то итератор получал условия каждой таксономии, такие как:

<?php 

$taxonomies = get_object_taxonomies( 'Product', 'objects');

foreach($taxonomies as $taxonomy): ?>
  <h2> <?= $taxonomy->label ?> </h2>

  // Get all the single taxonomy terms
  $terms = get_terms( array(
    'taxonomy' => $taxonomy->name,
    'hide_empty' => false,
  ) );

  <ul>
    <?php foreach($terms as $term): ?>
      <li><?= $term->name ?></li>
     <?php endforeach; ?>
  </ul>


<?php endforeach; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...