laura
  • 0
Новичок

Получить идентификатор категории в шаблоне категории

  • 0

как мне получить идентификатор кошки внутри шаблона. Очень важно: я не могу сделать это по имени, потому что у нас есть несколько кошек с одинаковым именем. Только слизь другая. Если бы я получил слизняка, это тоже было бы хорошо. Но, как я уже сказал: я не могу использовать титул Кошки…..

Share
  1. $wp_query->get_queried_object() даст вам «запрошенный в настоящее время объект». В архиве категорий это объект категории, на странице автора это автор, в отдельном посте это сам пост,… ну, вы поняли идею. Если вам нужен только идентификатор, вы также можете использовать $wp_query->get_queried_object_id() .

    • 0
  2. на основе моего поиска вы должны использовать это:

    $category = get_queried_object();
    echo $category->term_id;
    
    • 0
  3. Хм, я пока не могу комментировать, но ответ VicePrez действительно работает. Следующее прекрасно работает на странице архива категорий (хотя вы, вероятно, захотите сделать что-то другое, а не просто повторить это):

    <?php
    $category = get_the_category(); 
    echo $category[0]->cat_ID;
    ?>
    

    РЕДАКТИРОВАТЬ: Сотрите это, это работало для меня, пока я не наткнулся на категорию, в которой не было сообщения, затем он выбрал подкатегорию вместо основной категории. Вы не можете полагаться на get_the_category на странице шаблона категории.

    • 0
  4. Если я неправильно понимаю вопрос, я думаю, вы также можете добавить идентификатор/слаг категории в класс тела:

    <?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
    <body <?php body_class($cat_ID); ?>>
    
    • 0
  5. Ответ @Jan Fabry на самом деле является правильным ответом, вот почему: поскольку WordPress допускает несколько категорий для сообщения, использование $category = get_the_category() и запрос $category[0] не будут работать в каждом случае, поскольку на самом деле вы запрашиваете первую категорию первого сообщения. Представьте, что у вас есть категории A, B и C. Если у вас есть только одно сообщение, в нем есть категории A и B, и вы находитесь на странице категории B, вместо этого вы можете получить информацию A.

    Вот почему лучше использовать $category = $wp_query->get_queried_object(), потому что в предыдущем примере он всегда будет получать информацию о B, когда вы находитесь на странице категории B.

    • 0
  6. Вы могли бы использовать get_the_category(), чтобы сделать это.

    Пример:

    <?php
    
    $category = get_the_category(); 
    
    // use this to echo the slug
    echo $category[0]->slug;
    
    // use this to echo the cat id
    echo $category[0]->cat_ID;
    
    // if you've got multiple categories you can run a foreach loop like so
    foreach ( $category as $cat ) :
    
        echo '<li>' . $cat->name . '</li>';
    
    endforeach;
    
    ?>
    

    Вы можете использовать:

    <?php
        echo '<pre>';
        print_r($category);
        echo '</pre>';
    ?>
    

    для просмотра массива возвращаемых объектов.

    • 0
  7. $category = get_category( get_query_var( 'cat' ) );
    
    $cat_id = $category->cat_ID;
    
    $catname=explode(",",get_category_parents($cat_id,'',','));
    print_r($catname);
    
    • 0
  8. Большинство приведенных выше примеров работают, но если вы используете несколько категорий, НИ ОДИН (на момент написания, версия WP 3.6) из других методов не работает, чтобы получить все категории, которые были переданы либо «cat», либо «category_name».

    Единственный способ, который я нашел, — это вытащить данные из:

    $wp_query->query['category_name']
    

    По какой-то причине это возвращает другое значение, get_query_var( 'category_name' ) которое возвращает только первую категорию.

    При использовании нескольких категорий вам придется использовать некоторую функцию, например explode, для получения массива слагов категорий, а затем выполнить цикл, чтобы получить все идентификаторы:

    <?php
    global $wp_query;
    
    //grab all categories from query string (if using `category_name`)
    $category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));
    
    $categories = array();
    $category_ids = array();
    
    //loop through all the slugs
    foreach($category_slugs_array as $category_slug)
    {
        //get category object using slug
        $category = get_category_by_slug( $category_slug );
    
        //check to make sure a matching category has been found
        if(isset($category->cat_ID))
        {
            $categories[] = $category;
            $category_ids[] = $category->cat_ID;
        }
    }
    
    var_dump($categories); //array of categories
    var_dump($category_ids); //array of category IDs
    
    ?>
    

    Очевидно, что при использовании операторов И (+) или ИЛИ (,) необходимо учитывать некоторые соображения.

    • 0
  9. add_action( 'loop_start', 'demo_cat_id' );
    function demo_cat_id() {
    
    $terms = get_the_terms( get_queried_object_ID(), 'category' );
    
    $term = array_pop( $terms );
    
    echo $term->term_id;
    
    }
    

    Вы также можете использовать get_the_terms внутри шаблона архива или файла функций и использовать второй параметр, чтобы указать свою таксономию в качестве категории.

    • 0

Оставить ответ

You must login to add an answer.