получить url / ссылку на архив термина
Я создал произвольные типы записей и пользовательские таксономии для них.
Пример: actors
(таксономия) для movies
(тип записи).
Теперь я хочу показать в своем виджете некоторые термины и ссылку подробнее
для архива терминов actors
.
Как мне получить ссылку / url на архив таксономии?

Используйте 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 содержит цикл записей, который выводит посты, а не цикл терминов. Это, а также множество различных способов и идей о том, как должны выводиться термины, означает отсутствие единого решения. А как насчёт архивов по датам? Должен ли быть архив, перечисляющий месяцы и годы? Таймлайны? Панели, плитки, облака и т.д.

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

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

Нет простого способа получить это путем поиска. И все, кто отвечает где-либо, думают, что вы хотите получить ссылку на ТЕРМИН в ТАКСОНОМИИ... В то время как вы ищете ссылку на АРХИВ ТАКСОНОМИИ... Для чего я не нашел абсолютно ничего.
По сути, как и многие, вам нужен метод 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'];
}

Кажется, вы просите ссылку на архив со "всеми записями, которые имеют любой термин из таксономии Актеры". Все ответившие здесь восприняли ваш запрос как ссылку на архив конкретного термина, потому что ваш запрос не имеет смысла в мире WordPress.
Я удивлен ответом pixelbacon и тем, что он получил 6 голосов... Эта функция возвращает URL, который никуда не ведет... У WordPress нет возможности интерпретировать этот URL или выполнить запрос, который должен стоять за этим запросом.
В базе данных таксономия связана с терминами, а термины связаны с записями. Отдельная запись не имеет связи с таксономией. Единственное, что их соединяет — это поддержка таксономии типом записи.
Давайте сформулируем словами, что вы пытаетесь отобразить на этой странице: "Покажите мне все записи типа 'post', которые имеют ЛЮБОЙ термин из таксономии Актеры."
Это, по сути, означает: "покажите мне все записи типа 'post' (которые поддерживают таксономию Актеры)".
Следовательно, единственное отличие от общего архива типа записи (показать все записи заданного типа) будет, ЕСЛИ у вас есть записи без назначенных терминов Актеры, и вы ХОТИТЕ их исключить.
Если это так, вы можете создать пользовательскую страницу, сделать общий запрос ко всем записям, затем в цикле проверить, есть ли у записи термины Актеры с помощью wp_get_post_terms(get_the_ID(), 'actors')
, и в итоге исключить ее, если терминов нет.

Ссылка на архив для любой таксономии соответствует следующему шаблону:
http://{siteurl}/{taxonomy}/{term}
Например, категория "news" на сайте "myblogsite.com" будет иметь следующую URL-ссылку на архив:
http://myblogsite.com/category/news
Таким образом, архив "Harrison Ford" в вашей таксономии actors
будет выглядеть так:
http://myblogsite.com/actors/harrison-ford

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

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

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

используйте get_term_link() :)
РЕДАКТИРОВАТЬ:
Это может быть полезно: ссылка на архив для таксономии: get_the_term_list(). Из кодекса:
Возвращает HTML-строку с терминами таксономии, связанными с записью и указанной таксономией. Термины ссылаются на соответствующие страницы архива терминов.
Таким образом, функция должна быть привязана к ID записи, но выполняет задачу архивирования терминов таксономии.

Когда вы создаёте свою пользовательскую таксономию, вы можете добавить атрибут rewrite
. Этот атрибут позволяет задать слаг для перезаписи URL вашей таксономии, который можно использовать в ссылках:
register_taxonomy('actors', 'movies', array(
// ...
'rewrite' => array( 'slug' => 'actors' ),
// ...
));
Таким образом, для создания ссылки на архив таксономии можно использовать следующий шаблон:
http://mysite.com/actors/actor-name
