get_term_link() — функция для вывода ссылки на элемент таксономии

Возвращает ссылку на страницу архива того или иного элемента таксономии.

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

get_term_link( $term, $taxonomy );

Параметры

$term
(объект|целое|строка) (обязательно) — объект/ID/ярлык элемента таксономии.

$taxonomy
(строка) (обязательно) — ярлык самой таксономии, например post_tag, movies и т.д. Не обязателен, если в первом параметре указан объект.

Функция возвращает URL элемента таксономии в виде строки.

Примеры использования

get_term_link бывает удобно использовать в цикле после функции get_terms (более подробно о параметрах функции можете почитать, перейдя по ссылке), например вот два примера вывода ссылки без функции.

С включенными ЧПУ:

echo site_url() . '/movies/' . $term->slug;

Минус этого примера в том, что если на сайте отключить ЧПУ, то все ваши ссылки полетят.

Без ЧПУ:

echo site_url() . '/?movies=' . $term->slug;

Более надежный вариант:

echo get_term_link($term->slug, 'movies');

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

Полный пример:

$terms = get_terms('movies');
foreach ($terms as $term) {
	echo '<a href="' . get_term_link($term->slug, $term->taxonomy) . '">' . $term->name . '</a>';
}

Самый оптимальный на мой взгляд вариант использования в цикле:

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

Если задаете в качестве значения первого параметра ID элемента, для начала убедитесь, что это целое число!

/*
 * при добавлении intval() выскакивает ошибка:
 * Catchable fatal error: Object of class WP_Error could not be converted to string
 * поэтому, помимо всего прочего, заключаем результат в функцию is_string()
 */
$terms = get_terms('movies');
foreach ($terms as $term) {
	echo '<a href="' . is_string(get_term_link(inval($term->term_ID)), $term->taxonomy) . '">' . $term->name . '</a>';
}

Короче говоря, по возможности лучше использовать в качестве первого параметра ярлык или объект.

Комментарии 9

  • Dennis5 мая 2015 в 22:05 #

    Интересный момент.
    А как, например, изменить ЧПУ для определенной рубрики?

    Например, есть рубрика Статьи. как для ее записей добавлять в урл префикс articles_ ???)

    • Миша6 мая 2015 в 14:05 #

      Вам важен именно автоматизм или можете просто к этим постам вручную добавлять?

      • Dennis6 мая 2015 в 17:05 #

        Безусловно, интересуют способы автоматизировать этот процесс.

        • Миша7 мая 2015 в 12:05 #

          Можно изменить это через запрос в базу и потом проставить редиректы, также думаю можно через WP_Rewrite (про него скоро выйдет пост).

  • Дмитрий15 октября 2016 в 00:10 #

    Миша, привет.
    Вывел кол-во постов с указанной таксономией

    $terms = get_terms('my_tax');
    foreach ($terms as $term) {
    echo '<a href="' . get_term_link($term) . '">' . $term->count .'</a>';
    }

    добавил функцию для расчета окончаний (getTerm) в зависимости от кол-ва.
    но если я ее добавлю так, как показано ниже, то отображается правильно, но линк пропадает:

    echo '<a href="' . get_term_link($term) . '">' . getTerm ($term->count) .'</a>';

    или:

    echo '<a href="' . get_term_link($term) . '">' . $term->count .  getTerm ($term->count) .'</a>';

    В последнем случае кол-во с линком а само слово нет, а надо, чтобы была целая фраза с линком.

    Может есть другой вариант добавить эти окончания?

    • Миша15 октября 2016 в 08:10 #

      Привет!

      В этом коде всё в порядке, в функции getTerm() очевидно нет. Предполагаю она выводит значение, вместо того, чтобы его возвращать.

      • Дмитрий15 октября 2016 в 08:10 #

        Видимо, ты прав.
        Вот код:

        function getTerm ($num) {
         
            //Оставляем две последние цифры от $num
            $number = substr($num, -2);
         
            //Если 2 последние цифры входят в диапазон от 11 до 14
            //Тогда подставляем окончание "ЕВ" 
            if($number > 10 and $number < 15)
            {
                $ter = "";
            }
            else
            { 
         
              $number = substr($number, -1);
         
                if($number == 0) {$ter = "x";}
                if($number == 1 ) {$ter = "xx";}
                if($number > 1 ) {$ter = "xp";}
                if($number > 4 ) {$ter = "";}
            }
         
            echo  ' pppppp'.$ter;
        }

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...