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

get_term_link()WP 2.5.0

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

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

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

Если в параметр $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(строка)
Название таксономии, ссылку на элемент которой нужно получить.
По умолчанию: ''

Примеры

0

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

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

#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 6.1.1

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 );
}
7 комментариев
    Войти