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


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.