Intereting Posts
отображать определенный виджет на странице Эпоха промежуточных сайтов: имеет ли смысл развиваться на местном уровне? Создание кнопки WordPress для последующего использования, отсутствие недостающего ингредиента Добавить диапазон в верхнем меню с вложенными иеными Попытка получить сообщение мета Относительные URL-адреса внутри сайта Любимый дизайн выбирает Admin только как авторов. Как сделать подписчиков авторами своих представлений? Фильтровать или заказать на основе настраиваемого поля Как вызвать пользовательские сообщения Авторитетный ответ о том, какие ботинки сначала – плагины или темы? Вставьте идентификатор в пользовательском поле из медиа-загрузчика Перенаправление на последнюю страницу, посещаемую до входа в систему Список сообщений с выделенными категориями в списке всех категорий на single.php как отображать входные данные WordPress и регистрировать формы на странице? Установки WAMP действуют, отличные от реальной установки при загрузке изображений

Использование wp_tag_cloud только с текущим тегом post со специальным классом

Я пытаюсь вывести все теги (пользовательскую таксономию) без ссылки и добавить специальный класс к текущим тегам. Например: если есть 10 тегов, но текущая почта имеет 3 из них, то она должна отображать все 10 тегов без ссылки, но только 3 тега должны иметь специальный класс.

В настоящее время я использую:

$terms = get_the_terms( $post->ID, $tax ); $tag_list = implode(',', wp_list_pluck($terms, 'term_id') ); wp_tag_cloud( array( 'taxonomy' => $tax, 'include' => $tag_list) ); 

который показывает только теги со ссылкой для текущего сообщения.

Я смог достичь этого, следуя коду:

  $allterms = get_terms( $taxonomy ); $pterms = get_the_terms( $post->ID, $taxonomy); $tag_list = implode(',', wp_list_pluck($pterms, 'term_id') ); $t = explode(',', $tag_list); echo '<div class="tag-cloud">'; foreach ($allterms as $term) { if (in_array($term->term_id, $t)) { echo '<span class="stag active">'.$term->name.'</span>'; } else { echo '<span class="stag inactive">'.$term->name.'</span>'; } } echo '</div>'; 

Если вы проследите код через источник, вы заметите, что ссылки создаются с помощью get_term_link() и что в этой функции называется term_link . Второй параметр этого фильтра содержит идентификатор объекта, который, насколько я могу судить, установлен только в том случае, если тег является частью текущего сообщения. Используя эту информацию:

 function term_link_wpse_189584($termlink, $term) { // var_dump($termlink, $term, $taxonomy); if (!isset($term->object_id)) { $termlink = 'PULL'; } return $termlink; } add_filter('term_link','term_link_wpse_189584',10,2); function tag_cloud_wpse_189584($return) { $pat = '|<a.*PULL[^>]*>([^<]*)</a>|'; $return = preg_replace($pat,'$1',$return); return $return; } add_filter('wp_tag_cloud','tag_cloud_wpse_189584'); $tax = 'post_tag'; wp_tag_cloud( array( 'taxonomy' => $tax ));