Отримати поточний ідентифікатор категорії активної сторінки


78

Хочемо витягнути ідентифікатор категорії певної сторінки в WordPress, де перелічені всі публікації, що використовують цю конкретну категорію. Спробував нижче, але не працює. Я можу отримати назву категорії за допомогою single_term_title.

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

$categoryвідображається, наприклад, "Розваги". Але мені також потрібен ідентифікатор "Розваги". Як би я про це пішов?


Це звичайна сторінка категорії чи спеціальний шаблон сторінки?
— paislee

це taxonomy-event-categories-entertainment.php
— власна

Відповіді:


72

Ви можете спробувати використовувати get_the_category():

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;

16
$ category [0] -> cat_ID, щоб бути точним.
— nemesisdesign

57
Цей метод фактично перевіряє першу категорію першого повідомлення на сторінці. Якщо публікацій немає або якщо перша публікація має кілька категорій, це призведе до помилки або повернення неправильної інформації.
— Jordan Eldredge

5
Я погоджуюсь з @JordanEldredge, це поверне неправильну інформацію.
— Білл

3
Це поверне першу категорію першої публікації сторінки.
— Шаффе

Це також не вдасться, якщо переглянута сторінка є підкатегорією. Перевірте вихід $categoriesмасиву.
— egdavid

194

Якщо це сторінка категорії, ви можете отримати ідентифікатор поточної категорії, виконавши:

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

Якщо ви хочете отримати ідентифікатор категорії будь-якої конкретної категорії на будь-якій сторінці, спробуйте використати:

$category_id = get_cat_ID('Category Name');

3
Саме те, що я шукав. Краще, ніж наведена вище відповідь, якщо ви створюєте загальний шаблон категорії, оскільки ви отримуєте лише категорію, сторінка відображатиметься на відміну від багатокатегорійного масиву з наведеного вище.
— theflowersoftime

У мене це спрацювало ідеально. У мене були проблеми з отриманням посвідчення особи, і я прекрасно працював для мене. Збережені години :)
— prakashchhetri

3
Потрібно замінити правильну відповідь! Відповідь позначилася правильною, ввів мене в оману.
— Mosh Feu

13
Ця відповідь містить непотрібний код. Перший рядок коду отримує повні дані категорії у функції get_category за допомогою одного параметра - CATEGORY ID (оскільки це те, що повертає get_query_var ('cat')). Другий рядок коду фактично отримує ідентифікатор з даних. Це означає, що функція get_category тут повністю не використовується, і якщо хтось хоче лише ідентифікатор, тоді слід використовувати просто get_query_var ('кішка')!
— Bartosz Górski

Дякую, це мені також допомогло!
— Джейсон Елліс,

36

Найстаріший, але найшвидший спосіб, яким ви можете скористатись:

$cat_id = get_query_var('cat');

це здається ідеальним. чи є у цьому недоліки у відповіді Рама Мехара Десваля?
— dewd

Це фактично робоче рішення, воно буде відображати категорію переглянутої сторінки.
— egdavid

1
@dewd шукайте коментар Бартоша Гурського у відповіді Рама Мехара Десваля. Він цілком правий, і ця відповідь тут робить все, що вам потрібно.
— honk31,

@ honk31 thx за вказівку мені на те, що ти хороший ТАК громадянин ти! :)
— dewd

get_query_var ('кішка') для мене
— Домінік

21

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

$current_category = get_queried_object();

Джордан Елдредж правий, get_the_category тут не підходить.


1
Приємно, ніколи раніше цього не бачив.
— Дрю Бейкер

Якщо результат не є очікуваним, wp_reset_query();зателефонуйте , щоб відновити екземпляр WP_Query за замовчуванням.
— Шафф

Це насправді найкорисніша функція Wordpress, яку я коли-небудь знаходив. Це можна використовувати скрізь: сторінки, статті, категорії тощо
— frodeborli

4

Я думаю, що дещо з наведеного може працювати, але використання функції get_the_category здається хитрим і може дати несподівані результати.

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

$wp_query->query_vars['cat']

Ура


Ідеально! Дякую.
— Бені,

1

Я знайшов це запитання, шукаючи саме те, що ви задали. На жаль, ви прийняли неправильну відповідь. Заради інших людей, які намагаються досягти того, чого ми намагалися досягти, я думав, що розміщу правильну відповідь.

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

Як ви вже сказали, single_term_title("", false);правильно повертав заголовок категорії, я не впевнений, чому у вас виникли проблеми з кодом; але наведений вище код працює для мене бездоганно.


1

Я використовував це для хлібних кружків на сторінці шаблону категорії:

$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);

РЕДАГУВАТИ: Наведена вище функція застаріла get_the_category()


FYI: Ця функція застаріла.
— Sagive SEO

1

якщо вам потрібен ідентифікатор категорії, ви отримаєте його через get_query_var , який здатний отримати всі змінні, що публічно запитуються.

$category_id = get_query_var('cat');

ось приклад отримання назви категорії

$category_name = get_query_var('category_name');

і звичайно весь могутній get_queried_object

$queried_object = get_queried_object();

що повертає повний об'єкт терміну таксономії (при використанні на сторінці таксономії-архіву ..)


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

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

$obj = get_queried_object();
$c_id = wp_get_post_categories($obj->ID);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.