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

get_term_link() WP 2.5.0

Получает УРЛ на страницу архива термина (элемента таксономии). Тоже самое что ссылка на раздел рубрики.

Функция возвращает постоянную ссылку на страницу определенного элемента таксономии (термина).

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

Если в параметр $term передается ID термина, то убедитесь что передается тип число (int). Например, если вы передаете переменную $term_id, обработайте её: (int) $trem_id: иначе, если в переменной находится строка в виде числа '5', функция будет искать термин со слагом 5, а не по ID - это может вызвать непонятную для вас ошибку.

Используется в: get_tag_link(), get_category_link().
Хуки из функции:
Возвращает

Строку/WP_Error. Ссылку на элемент таксономии или объект WP_ERror если элемента не существует.

Использование

get_term_link( $term, $taxonomy = '' );
$term(строка/число/объект) (обязательный)
ID/объект/имя элемента таксономии, ссылку на который нужно получить.
$taxonomy(строка)
Название таксономии, ссылку на элемент которой нужно получить.
По умолчанию: ''

Примеры

#1. Выведем на экран ссылку на архивную страницу элемента таксономии

5 - ID элемента, tax_name - название таксономии.

$term_id = 5;
$term_link = get_term_link($term_id, 'tax_name');
echo "<a href='". $term_link ."'>ссылка на раздел с ID ". $term_id ."</a>";

#1.2. $term_id должен быть числом, если это число...

Предположим что $term_id уже известен и передается в виде строки, тогда его нужно преобразовать в число иначе функция будет интерпретировать его как имя (slug)

$term_id = '5';
$term_link = get_term_link( (int) $term_id, 'tax_name' );
echo "<a href='". $term_link ."'>ссылка на раздел с ID ". $term_id ."</a>";

#2. Пример вывода ссылки по названию элемента таксономии

$term_slug = 'raznoe'; //передавать нужно альтернативное имя (slug)
$term_link = get_term_link($term_slug, 'tax_name');
echo "<a href='". $term_link ."'>ссылка на раздел ". $term_slug ."</a>";

Код get term link: wp-includes/taxonomy.php WP 4.9

<?php
function get_term_link( $term, $taxonomy = '' ) {
	global $wp_rewrite;

	if ( !is_object($term) ) {
		if ( is_int( $term ) ) {
			$term = get_term( $term, $taxonomy );
		} else {
			$term = get_term_by( 'slug', $term, $taxonomy );
		}
	}

	if ( !is_object($term) )
		$term = new WP_Error( 'invalid_term', __( 'Empty Term.' ) );

	if ( is_wp_error( $term ) )
		return $term;

	$taxonomy = $term->taxonomy;

	$termlink = $wp_rewrite->get_extra_permastruct($taxonomy);

	/**
	 * Filters the permalink structure for a terms before token replacement occurs.
	 *
	 * @since 4.9.0
	 *
	 * @param string  $termlink The permalink structure for the term's taxonomy.
	 * @param WP_Term $term     The term object.
	 */
	$termlink = apply_filters( 'pre_term_link', $termlink, $term );

	$slug = $term->slug;
	$t = get_taxonomy($taxonomy);

	if ( empty($termlink) ) {
		if ( 'category' == $taxonomy )
			$termlink = '?cat=' . $term->term_id;
		elseif ( $t->query_var )
			$termlink = "?$t->query_var=$slug";
		else
			$termlink = "?taxonomy=$taxonomy&term=$slug";
		$termlink = home_url($termlink);
	} else {
		if ( $t->rewrite['hierarchical'] ) {
			$hierarchical_slugs = array();
			$ancestors = get_ancestors( $term->term_id, $taxonomy, 'taxonomy' );
			foreach ( (array)$ancestors as $ancestor ) {
				$ancestor_term = get_term($ancestor, $taxonomy);
				$hierarchical_slugs[] = $ancestor_term->slug;
			}
			$hierarchical_slugs = array_reverse($hierarchical_slugs);
			$hierarchical_slugs[] = $slug;
			$termlink = str_replace("%$taxonomy%", implode('/', $hierarchical_slugs), $termlink);
		} else {
			$termlink = str_replace("%$taxonomy%", $slug, $termlink);
		}
		$termlink = home_url( user_trailingslashit($termlink, 'category') );
	}
	// Back Compat filters.
	if ( 'post_tag' == $taxonomy ) {

		/**
		 * Filters the tag link.
		 *
		 * @since 2.3.0
		 * @deprecated 2.5.0 Use 'term_link' instead.
		 *
		 * @param string $termlink Tag link URL.
		 * @param int    $term_id  Term ID.
		 */
		$termlink = apply_filters( 'tag_link', $termlink, $term->term_id );
	} elseif ( 'category' == $taxonomy ) {

		/**
		 * Filters the category link.
		 *
		 * @since 1.5.0
		 * @deprecated 2.5.0 Use 'term_link' instead.
		 *
		 * @param string $termlink Category link URL.
		 * @param int    $term_id  Term ID.
		 */
		$termlink = apply_filters( 'category_link', $termlink, $term->term_id );
	}

	/**
	 * Filters the term link.
	 *
	 * @since 2.5.0
	 *
	 * @param string $termlink Term link URL.
	 * @param object $term     Term object.
	 * @param string $taxonomy Taxonomy slug.
	 */
	return apply_filters( 'term_link', $termlink, $term, $taxonomy );
}

Cвязанные функции

Из метки: permalink (постоянные ссылки ЧПУ)

Еще из метки: term (термины таксономий)

Еще из раздела: Любые таксономии

get_term_link 5 комментариев
  • Ирэн cайт: url.com

    хороший сайт! Спасибо, читаю и в закладки вас! smile

    Ответить3.9 года назад #
  • Здравствуйте, у меня получается вывести ссылки на архивы новой таксономии (на подобии тегов) только таким образом, это верно?

    <?php 
    $terms = get_terms('genre');
    foreach ($terms as $term) {
    	echo ' <a href="' . get_term_link($term) . '">' . $term->name . '</a> ';
    }
    ?>
    Ответить2.7 года назад #
  • Игорь

    Здравствуйте а мне нужно сделать ссылку на посты, которые выводятся стандартным циклом, но только на посты определённых категорий. Вроде того, как cat_id=5,6,7 И тогда функция выведет посты принадлежащие всем этим категориям.
    Как это сделать? Подскажите пожалуйста!

    Ответить2.2 года назад #

Здравствуйте, !

Ваш комментарий