Получить идентификатор текущей категории активной страницы

64

Ищите идентификатор категории определенной страницы в WordPress, в котором перечислены все сообщения, использующие эту определенную категорию. Пробовал ниже, но не работал. Я могу получить название категории с помощью single_term_title.

$category = single_term_title("", false);
$catid = get_cat_ID( $category );

$category отображается, например, "Развлечения". Но мне также нужен идентификатор "Развлечения". Как я могу это сделать?

  • 0
    Это обычная страница категории или пользовательский шаблон страницы?
  • 0
    это пользовательская таксономия - пытаясь использовать ее в файле с именем taxonomy-event-categories-entertainment.php
Теги:
wordpress-theming
category

10 ответов

51
Лучший ответ

Вы можете попробовать использовать get_the_category():

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;
  • 15
    $ category [0] -> cat_ID, чтобы быть точным.
  • 47
    Этот метод фактически проверяет первую категорию первого поста на странице. Если нет сообщений или если первое сообщение имеет несколько категорий, это приведет к ошибке или вернет неверную информацию.
Показать ещё 7 комментариев
172

Если это страница категории, вы можете получить идентификатор текущей категории:

$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;

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

$category_id = get_cat_ID('Category Name');
  • 2
    Именно то, что я искал. Лучше, чем приведенный выше ответ, если вы создаете общий шаблон категории, поскольку вы получаете только категорию, которая будет отображаться на странице, в отличие от массива из нескольких категорий, описанного выше.
  • 0
    Это отлично сработало для меня. У меня были проблемы с получением удостоверения личности, и я прекрасно работал. Сохраненные часы :)
Показать ещё 10 комментариев
28

Самый старый, но самый быстрый способ, которым вы можете воспользоваться:

$cat_id = get_query_var('cat');
  • 0
    это кажется идеальным. Есть ли недостатки в этом ответе Рам Мехар Десвал?
  • 0
    На самом деле это рабочее решение, оно будет отображать категорию просматриваемой страницы.
Показать ещё 2 комментария
16

Я использую функцию get_queried_object, чтобы получить текущую категорию на странице шаблона category.php.

$current_category = get_queried_object();

Иордания Eldredge прав, get_the_category здесь не подходит.

  • 1
    Хорошо, никогда не видел этого раньше.
  • 0
    Если результат не является ожидаемым, вызовите wp_reset_query(); восстановить экземпляр WP_Query по умолчанию.
Показать ещё 1 комментарий
2

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

Я думаю, что самый прямой и простой способ доступа к кошачьему идентификатору на странице категории:

$wp_query->query_vars['cat']

Приветствия

  • 0
    Отлично! Благодарю.
1

Я использовал это для breadcrums на странице шаблона категории:

$cat_obj = $wp_query->get_queried_object();
$thiscat_id = $cat_obj->term_id;
$thiscat = get_category($thiscat_id);
$parentcat = get_category($thiscat->parent);
1

Альтернатива -

 $catID = the_category_ID($echo=false);

EDIT: Вышеуказанная функция устарела, используйте get_the_category()

  • 0
    К вашему сведению: эта функция устарела.
0

Выше пытались найти решения для определения идентификатора сообщения, но ничего не получалось, вместо этого использовали следующее:

$obj = get_queried_object();
$c_id = wp_get_post_categories($obj->ID);
0
$cats = wp_get_post_terms( $post->ID, 'product_cat' );
foreach($cats as $cat){
/*check for category having parent or not except category id=1 which is wordpress default category (Uncategorized)*/
  if($cat->parent != '0' && $cat->term_id != 1){
    echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">'.$cat->name.'</a></h2>';
    break;
  }
}
0

Я нашел этот вопрос, ища именно то, что вы просили. К сожалению, вы приняли неверный ответ. Ради других людей, которые пытаются достичь того, чего мы пытаемся достичь, я думал, что опубликую правильный ответ.

$cur_cat = get_cat_ID( single_cat_title("",false) );

Как вы сказали, single_term_title("", false); правильно вернул название категории, я не уверен, почему у вас были бы проблемы с вашим кодом; но приведенный выше код работает безупречно для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню