Способ изменения навигационного меню на основе страницы архива пользовательской таксономии - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть меню навигации, которое создается из пользовательской таксономии в WordPress. По умолчанию в меню отображается родитель, первый и второй дочерние элементы. Например:

Filmmaking > Production > Cinematography

Если пользователь выбирает второго потомка Cinematography Я хочу, чтобы страница изменилась, а вместе с ней обновилось меню навигации. На новой странице я хочу, чтобы она показала второго и дополнительных детей, например, под.

Cinematography > Lenses
               > Cameras
               > Lighting

Я уже написал код, но пытаюсь найти правильный подход. Каков наилучший метод для установки меню в правильной точке? Я полагаю, что мог бы использовать несколько вариантов:

  1. Использовать URL страницы, на котором есть текущий термин таксономии, и определить остальную часть меню из этого?

  2. Сохраните какое-то значение в хранилище сеанса, чтобы определить термин, по которому щелкают, когда они щелкают по пункту меню, и устанавливать новое меню из этого

Это правильный путь подойти к этому или есть лучший способ?

1 Ответ

1 голос
/ 16 апреля 2020

Вы должны использовать get_queried_object , чтобы получить текущий идентификатор термина:

$term_id = get_queried_object()->term_id;

Затем вы можете использовать get_term_children , чтобы создать меню на основе родительского. :

$taxonomy_name = 'taxonomy_name';
$term_children = get_term_children($term_id, $taxonomy_name);

Obs.: Замените taxonomy_name на свое имя таксономии.

get_term_children обычно возвращает массив с идентификаторами своих детей :

array(4) {
  [0]=> int(10)
  [1]=> int(20)
  [2]=> int(30)
  [3]=> int(34)
}

Наконец, вы можете создать собственное меню:

<ul>
  <li>Cinematography
    <ul>
      <?php 
        foreach($term_children as $child_id) :
          $term = get_term_by('id', $child_id, $taxonomy_name); 
      ?>
      <li>
        <a href="<?php echo get_term_link($child_id, $taxonomy_name); ?>">
          <?php echo $term->name; ?>
        </a>
      </li>
      <?php endforeach; ?>
    </ul>
  </li>
</ul>
...