Получение ID текущего термина

21 апр. 2011 г., 04:25:29
Просмотры: 32.4K
Голосов: 2

Я использую следующий код для получения массива дочерних таксономий и вывода их в виде ссылок в неупорядоченном списке.

    <?php
$termID = 10;
$taxonomyName = "products";
$termchildren = get_term_children( $termID, $taxonomyName );

echo '<ul>';
foreach ($termchildren as $child) {
    $term = get_term_by( 'id', $child, $taxonomyName );
    echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
?>

Я пытаюсь получить фактический ID термина (категории), чтобы использовать его в переменной $termID и не прописывать ID термина вручную.

Буду благодарен за любую помощь!

Спасибо!

0
Все ответы на вопрос 4
1

Вот функция, которую я использую для вывода подкатегорий:

/**
 * Выводит все подкатегории таксономии.
 *
 * @return void
 */
function ttt_get_subterms( $args = array () )
{
    if ( ! isset ( get_queried_object()->taxonomy ) )
    {
        return;
    }

    $options = array (
        'child_of'           => get_queried_object_id()
    ,   'echo'               => 0
    ,   'taxonomy'           => get_queried_object()->taxonomy
    ,   'title_li'           => FALSE
    ,   'use_desc_for_title' => FALSE
    );

    $settings = array_merge( $options, $args );

    $subtermlist = wp_list_categories( $settings );

    // Если результатов нет, WP создает пустой элемент без ссылок
    ! empty ( $subtermlist ) and FALSE !== strpos( $subtermlist, '<a ' )
        and print "<ul class=subterms>$subtermlist</ul>";
}

Используйте её так же, как wp_list_categories().

Избегайте get_term_by(). Это очень ресурсоемко и не обязательно.

21 апр. 2011 г. 05:13:41
Комментарии

Работает отлично, и термины выводятся так же, как в wp_list_categories. Спасибо!

Rise Rise
21 апр. 2011 г. 05:38:31
0

Чтобы получить текущий термин, можно использовать get_query_var( 'term' );, а для получения текущей таксономии - get_query_var( 'taxonomy' ). Таким образом, можно сделать что-то вроде этого:

$term_slug = get_query_var( 'term' );
$taxonomyName = get_query_var( 'taxonomy' );
$current_term = get_term_by( 'slug', $term_slug, $taxonomyName );
$termchildren = get_term_children( $current_term->term_id, $taxonomyName );

echo '<ul>';
foreach ($termchildren as $child) {
    $term = get_term_by( 'id', $child, $taxonomyName );
    echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
21 апр. 2011 г. 04:43:43
0

Или вы можете использовать: term_exists( $term, $taxonomy, $parent )

$term_id = term_exists( $term_name );

Смотрите WordPress Codex

Проверяет существование указанного термина и возвращает его ID

Возвращает ID термина, если таксономия не указана и термин существует.

4 февр. 2013 г. 13:19:01
0

Чтобы получить ID текущего термина, используйте:

$term_id = get_queried_object()->term_id;

get_query_var нельзя использовать в этом случае, так как term_id отсутствует в списке публично доступных переменных.

21 мая 2018 г. 19:35:05