WordPress как на ладони
wordpress jino

Создание меню (списка рубрик) с активным пунктом меню.

На одной из страниц возникла необходимость вывести список рубрик (таксономий), которые оформлены в виде меню

$terms_personal = get_terms("personal");
$count = count($terms_personal);
if($count > 0){
	echo '<ul id="personal">';
		foreach ($terms_personal as $term_workman) {
			echo "<li>" . $term_workman->name . "</li>";
		}
	echo '</ul>';
}

Таким образом получаем список рубрик

<ul id="personal">
  <li>Администраторы</li>
  <li>Консультанты</li>
  <li>и т.д.</li>
</ul>

Однако есть необходимость чтобы первый пункт меню li содержал в себе class=»active», который в свою очередь исчезал и появлялся при переходе на другой пункт меню.

(вариант при запуске страницы)

<ul id="personal">
  <li class="active">Администраторы</li>
  <li>Консультанты</li>
  <li>и т.д.</li>
</ul>

(вариант при переходе на вкладку «Консультанты»)

<ul id="personal">
  <li>Администраторы</li>
  <li class="active">Консультанты</li>
  <li>и т.д.</li>
</ul>
0
LLIypuk26 6 месяцев назад
  • 1
    campusboy1833 cайт: wp-plus.ru

    Не проверял на практике, чисто теоретический код накидал:

    $post_terms = get_the_terms( $post->ID, 'personal' );
    $terms_personal = get_terms("personal");
    
    if(count($terms_personal) > 0){
    
    	echo '<ul id="personal">';
    
    		foreach ($terms_personal as $term_workman) {
    
    			$class = ( isset($post_terms[0]) && $post_terms[0]->term_id == $term_workman->term_id ) ? "item active" : "item";
    
    			echo "<li class='{$class}'>" . $term_workman->name . "</li>";
    
    		}
    
    	echo '</ul>';
    
    }
    LLIypuk26 5 месяцев назад

    Списибо за код. Попробовал его использовать. При загрузке страницы у html-кода появляется class='item', который берется из переменной $class. Однако класс "active" так и не появился у первой строки меню после загрузки страницы.

    campusboy 5 месяцев назад

    Когда вы более подробно расскажите, как построено ваше веб-приложение, тогда можно будет рассуждать, как сделать правильнее.

    « Однако есть необходимость чтобы первый пункт меню li содержал в себе class=»active», который в свою очередь исчезал и появлялся при переходе на другой пункт меню. »

    Что это значит? Просто мышкой водить по пунктам? При переходе в нужный тёрм? Полную логику опишите работы с таким меню.

    LLIypuk26 5 месяцев назад

    Ну я через WordPress пытаюсь сделать вывод постов как в этом jQuery-плагине https://vestride.github.io/Shuffle/
    Собственно я у себя на "Денвере" уже практически все сделал. Подключил скрипт, настроил стили. Настроил вывод картинок через произвольные типы записей и вывел меню.
    То-есть по сути все-работает. Но на старте выводятся абсолютно все данные и выводятся они немного криво из-за того, что у первой строки (хотя необязательно какой строки) отсутствует класс "active". Однако если нажать на любую кнопку, то класс "active" появляется у выбранного пункта меню, но это уже работа скрипта.

    campusboy 5 месяцев назад

    Если взять твой код и чуток доработать, то выйдет вот так:

    $terms_personal = get_terms("personal");
    $cnt = 1;
    if(count($terms_personal) > 0){
    	echo '<ul id="personal">';
    		foreach ($terms_personal as $term_workman) {
    	  if( $cnt == 1)
    		echo "<li class='active'>" . $term_workman->name . "</li>";
    	  else
    		echo "<li>" . $term_workman->name . "</li>";
    	++$cnt;
    		}
    	echo '</ul>';
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.