получить url / ссылку на архив термина

9 апр. 2012 г., 23:27:28
Просмотры: 63.5K
Голосов: 7

Я создал произвольные типы записей и пользовательские таксономии для них.

Пример: actors (таксономия) для movies (тип записи).

Теперь я хочу показать в своем виджете некоторые термины и ссылку подробнее для архива терминов actors.

Как мне получить ссылку / url на архив таксономии?

0
Все ответы на вопрос 6
2
16

Используйте get_term_link

Например, для вывода списка терминов таксономии "actors" со ссылками на их архивы:

$terms = get_terms('actors');
echo '<ul>';
foreach ($terms as $term) {
    echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
echo '</ul>';

Однако!

Если вам действительно нужен аналог архива произвольного типа записей, который выводит список всех записей этого типа, но для терминов таксономии (например, страница, которая выступает в роли архива, перечисляющего доступные термины таксономии), то вам не повезло. В WordPress нет архивов таксономий для терминов, только архивы записей, принадлежащих определённому термину.

Для создания страницы со списком терминов таксономии вы можете использовать код, аналогичный приведённому выше. Затем поместите его в шаблон страницы и используйте эту страницу как архив терминов таксономии.

Причина в том, что проблема заключается в цикле записей - почти каждый шаблон страницы предназначен для его использования. Если вы посмотрите на иерархию шаблонов, то увидите, что если необходимые шаблоны не найдены, всё сводится к index.php, а index.php содержит цикл записей, который выводит посты, а не цикл терминов. Это, а также множество различных способов и идей о том, как должны выводиться термины, означает отсутствие единого решения. А как насчёт архивов по датам? Должен ли быть архив, перечисляющий месяцы и годы? Таймлайны? Панели, плитки, облака и т.д.

9 апр. 2012 г. 23:42:14
Комментарии

Совет, который вы дали, был именно тем, что я искал. Мой подход заключался в использовании шаблона страницы, но это кажется слишком кастомным решением. Но если нет возможностей для архива таксономии, мне придется реализовать его так, как вы предложили. Спасибо.

e382df99a7950919789725ceeec126 e382df99a7950919789725ceeec126
10 апр. 2012 г. 04:51:30

Нет такого. Проблема заключается в цикле записей (post loop) — почти каждый шаблон страницы предназначен для его использования. Если посмотреть на иерархию шаблонов, когда необходимые шаблоны не найдены, всё возвращается к index.php, а index.php содержит цикл записей, который выводит посты, а не цикл терминов (term loop).

Tom J Nowell Tom J Nowell
10 апр. 2012 г. 13:01:15
0
10

Нет простого способа получить это путем поиска. И все, кто отвечает где-либо, думают, что вы хотите получить ссылку на ТЕРМИН в ТАКСОНОМИИ... В то время как вы ищете ссылку на АРХИВ ТАКСОНОМИИ... Для чего я не нашел абсолютно ничего.

По сути, как и многие, вам нужен метод get_taxonomy_archive_link.

За исключением того, что по той или иной причине его просто не существует. Я считаю это КРУПНЫМ упущением со стороны WordPress.

На ваш вопрос нет ответа. Точнее, нет такого, который бы действительно работал в рамках WP как правильное решение. Конечно, вы можете собрать нужное с помощью get_bloginfo(), но внутри WP нет абсолютно никакой логической причины, по которой get_taxonomy_archive_link не существует.

При всем этом я всегда добавляю следующую функцию в свои темы:

/**
 * Передайте значение таксономии, поддерживаемое WP `get_taxonomy`,
 * и вы получите URL архива.
 * @param $taxonomy string|int
 * @return string
 */
function get_taxonomy_archive_link( $taxonomy ) {
  $tax = get_taxonomy( $taxonomy ) ;
  return get_bloginfo( 'url' ) . '/' . $tax->rewrite['slug'];
}
13 авг. 2015 г. 20:49:22
0

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

Я удивлен ответом pixelbacon и тем, что он получил 6 голосов... Эта функция возвращает URL, который никуда не ведет... У WordPress нет возможности интерпретировать этот URL или выполнить запрос, который должен стоять за этим запросом.

В базе данных таксономия связана с терминами, а термины связаны с записями. Отдельная запись не имеет связи с таксономией. Единственное, что их соединяет — это поддержка таксономии типом записи.

Давайте сформулируем словами, что вы пытаетесь отобразить на этой странице: "Покажите мне все записи типа 'post', которые имеют ЛЮБОЙ термин из таксономии Актеры."

Это, по сути, означает: "покажите мне все записи типа 'post' (которые поддерживают таксономию Актеры)".

Следовательно, единственное отличие от общего архива типа записи (показать все записи заданного типа) будет, ЕСЛИ у вас есть записи без назначенных терминов Актеры, и вы ХОТИТЕ их исключить.

Если это так, вы можете создать пользовательскую страницу, сделать общий запрос ко всем записям, затем в цикле проверить, есть ли у записи термины Актеры с помощью wp_get_post_terms(get_the_ID(), 'actors'), и в итоге исключить ее, если терминов нет.

8 окт. 2018 г. 13:16:39
3

Ссылка на архив для любой таксономии соответствует следующему шаблону:

http://{siteurl}/{taxonomy}/{term}

Например, категория "news" на сайте "myblogsite.com" будет иметь следующую URL-ссылку на архив:

http://myblogsite.com/category/news

Таким образом, архив "Harrison Ford" в вашей таксономии actors будет выглядеть так:

http://myblogsite.com/actors/harrison-ford
9 апр. 2012 г. 23:34:22
Комментарии

так можно ли использовать http://{siteurl}/{taxonomy} для архива таксономии?

e382df99a7950919789725ceeec126 e382df99a7950919789725ceeec126
10 апр. 2012 г. 04:47:31

Вам всё равно нужно указать термин внутри таксономии, чтобы сгенерировать архив.

EAMann EAMann
10 апр. 2012 г. 07:05:35

Это не всегда верно. Пользователь может изменить часть {taxonomy} в этой структуре в настройках постоянных ссылок. Например, если у вас есть категория uncategorized, URL по умолчанию будет http://{siteurl}/category/uncategorized. Но если вы измените category_base в настройках постоянных ссылок на, например, topics, URL станет http://{siteurl}/topics/uncategorized. Поэтому более точная формула для категорий будет http://{siteurl}/{get_option('category_base')}/uncategorized

Sam Sam
4 окт. 2018 г. 22:07:17
1

используйте get_term_link() :)

РЕДАКТИРОВАТЬ:

Это может быть полезно: ссылка на архив для таксономии: get_the_term_list(). Из кодекса:

Возвращает HTML-строку с терминами таксономии, связанными с записью и указанной таксономией. Термины ссылаются на соответствующие страницы архива терминов.

Таким образом, функция должна быть привязана к ID записи, но выполняет задачу архивирования терминов таксономии.

9 апр. 2012 г. 23:34:38
Комментарии

это не то, что я искал. посмотрите пост Тома: я искал ссылку на архив для самой таксономии.

e382df99a7950919789725ceeec126 e382df99a7950919789725ceeec126
10 апр. 2012 г. 04:53:58
0

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

register_taxonomy('actors', 'movies', array(
    // ...
    'rewrite' => array( 'slug' => 'actors' ),
    // ...
));

Таким образом, для создания ссылки на архив таксономии можно использовать следующий шаблон:

http://mysite.com/actors/actor-name
9 апр. 2012 г. 23:37:25