WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_term_link() WP 2.5.0

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

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

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

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

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

Основа для: get_tag_link(), get_category_link()
Хуки из функции

Возвращает

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

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

get_term_link( $term, $taxonomy = '' );
$term(строка/число/объект/WP_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>';

#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>';

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

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

Заметки

  • Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.

Список изменений

С версии 2.5.0 Введена.

Код get_term_link() WP 5.8.2

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 term 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 ( ! empty( $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
		 * @since 2.5.0 Deprecated in favor of {@see 'term_link'} filter.
		 * @since 5.4.1 Restored (un-deprecated).
		 *
		 * @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
		 * @since 2.5.0 Deprecated in favor of {@see 'term_link'} filter.
		 * @since 5.4.1 Restored (un-deprecated).
		 *
		 * @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 WP_Term $term     Term object.
	 * @param string  $taxonomy Taxonomy slug.
	 */
	return apply_filters( 'term_link', $termlink, $term, $taxonomy );
}

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

term (термины таксономий)

Любые таксономии

9 комментов
    Войти