WordPress php if post category

has_category() │ WP 3.1.0

Проверяет находится ли текущая (или указанная) запись хоть в одной из указанных категорий. Работает только для таксономии category , если нужно проверить если ли у записи элементы другой таксономии, то используйте has_term().

Если не переданы никакие рубрики для сравнения, то функция будет проверять присвоена ли посту хоть одна рубрика.

Возвращает

Использование

has_category( $category, $post );

$category(строка/число/массив) name/term_id/slug рубрики или массив из этих значений в которых нужно проверить присутствие записи.
По умолчанию: » $post(число/объект) Запись (пост), у которого нужно проверить наличие указанных рубрик.
По умолчанию: null

Примеры

#1 Проверим есть ли у поста хоть одна указанная рубрика

$post_id = 6235; if( has_category( array(37,’history’), $post_id) )

Список изменений

Код has_category() has category WP 6.2.2

function has_category( $category = », $post = null )

Cвязанные функции

Условные теги (все)

  • cat_is_ancestor_of()
  • category_exists()
  • comments_open()
  • email_exists()
  • has_block()
  • has_custom_header()
  • has_excerpt()
  • has_nav_menu()
  • has_post_thumbnail()
  • has_shortcode()
  • has_tag()
  • has_term()
  • have_comments()
  • have_posts()
  • in_category()
  • in_the_loop()
  • is_404()
  • is_active_sidebar()
  • is_admin()
  • is_admin_bar_showing()
  • is_archive()
  • is_attachment()
  • is_author()
  • is_blog_admin()
  • is_category()
  • is_child_theme()
  • is_comment_feed()
  • is_customize_preview()
  • is_date()
  • is_day()
  • is_dynamic_sidebar()
  • is_email()
  • is_embed()
  • is_feed()
  • is_front_page()
  • is_header_video_active()
  • is_home()
  • is_local_attachment()
  • is_login()
  • is_main_query()
  • is_month()
  • is_multi_author()
  • is_multisite()
  • is_nav_menu()
  • is_network_admin()
  • is_new_day()
  • is_page()
  • is_page_template()
  • is_paged()
  • is_plugin_active()
  • is_post_type_archive()
  • is_post_type_hierarchical()
  • is_preview()
  • is_robots()
  • is_search()
  • is_single()
  • is_singular()
  • is_ssl()
  • is_sticky()
  • is_tag()
  • is_tax()
  • is_taxonomy_hierarchical()
  • is_textdomain_loaded()
  • is_time()
  • is_trackback()
  • is_user_admin()
  • is_user_logged_in()
  • is_year()
  • pings_open()
  • post_exists()
  • post_password_required()
  • shortcode_exists()
  • tag_exists()
  • taxonomy_exists()
  • term_exists()
  • term_is_ancestor_of()
  • wp_attachment_is()
  • wp_doing_ajax()
  • wp_doing_cron()
  • wp_is_mobile()
  • wp_is_post_autosave()
  • wp_is_post_revision()
  • wp_is_using_https()
  • wp_script_is()
Читайте также:  Javascript class private method

Для записей

  • get_object_taxonomies()
  • get_objects_in_term()
  • get_the_category()
  • get_the_category_list()
  • get_the_tag_list()
  • get_the_tags()
  • get_the_taxonomies()
  • get_the_term_list()
  • get_the_terms()
  • is_object_in_taxonomy()
  • is_object_in_term()
  • the_category()
  • the_tags()
  • the_taxonomies()
  • wp_delete_object_term_relationships()
  • wp_get_object_terms()
  • wp_get_post_categories()
  • wp_get_post_tags()
  • wp_get_post_terms()
  • wp_remove_object_terms()
  • wp_set_object_terms()
  • wp_set_post_categories()
  • wp_set_post_tags()
  • wp_set_post_terms()

Источник

in_category() │ WP 1.2.0

Проверяет принадлежит ли текущий (или указанный) пост к указанной категории (можно указать несколько категорий). Условный тег. Проверяется прямая принадлежность поста к категории, т.е. содержит ли указанная категория текущий/указанный пост. Если, например, пост принадлежит родительской категории или дочерней к указанной, то функция вернет false.

Чтобы проверить отношение поста к дереву категорий используйте самописную функцию post_is_in_descendant_category() (см. пример ниже).

  • Внутри Цикла WordPress.
  • Или за пределами Цикла ВП, но тогда только на отдельной странице записи — is_single().
  • Или можно использовать где угодно, если указать какой именно пост нужно проверить.

Возвращает

true|false . true, если условие выполняется и false, если нет.

Использование

if( in_category( $category, $post ) )< // . >

ID, название или ярлык (slug) категории, которую нужно проверить принадлежит ли ей пост.

Можно указать несколько параметров в массиве вперемешку.

$post(число/объект) ID или объект поста. По умолчанию текущий пост определяется автоматически внутри Цикла WordPress или на странице поста.

Примеры

#1 Проверка текущего поста внутри Цикла WordPress.

in_category часто используется внутри Цикла, чтобы проверить относится ли пост к указанной категории, если «да», то сделать какие-либо действия:

if ( in_category( 'pachyderms' ) ) < // действия, если пост относится к категории 'pachyderms' >elseif ( in_category( [ 'Tropical Birds', 'small-mammals' ] ) ) < // действия, если пост относится к одной из категорий 'Tropical Birds', 'small-mammals' >else < // если никакие из предыдущих условий не выполнены. >

П.С. Лучше указывать не названия, а ID категории для проверок

#2 Проверка текущего поста за пределами Цикла.

На странице поста (обычно это файл шаблона single.php) проверку можно выполнять за пределами Цикла:

if ( in_category('fruit') ) < include 'single-fruit.php'; >elseif ( in_category('vegetables') ) < include 'single-vegetables.php'; >else < // Ниже начинается Цикл WordPress if ( have_posts() ) : while ( have_posts() ) : the_post(); // . >

#3 Проверка принадлежности поста к текущей или вложенной в текущую категории

Бывают случаи, когда нужно проверить относиться ли пост к дереву категорий. Например, мы указываем в проверке ID категории 60, а пост принадлежит категории 70, которая является дочерней к категории 60. Но in_category() вернет в данном случае false, а иногда нужно чтобы вернула true.

Для того, чтобы проверить принадлежность к дереву категорий, можно последовательно указать в массиве все названия категорий:

if( in_category( array( 'Малина', 'Яблоки', 'Бананы', 'Груши', 'Сливы' ) )) < // Действие если выполнено условие >

Такой подход проверки, совершенно не гибкий, потому что если мы добавим новую подкатегорию к категории «Фрукты», нам так же нужно будет добавить её и в массив, для проверки.

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

// Проверка принадлежности поста к категории "Фрукты" или любой вложенной в эту категорию категории. if ( in_category( 11 ) || post_is_in_descendant_category( 11 ) ) < // Здесь все "фрукты" >

Также, менее желательный, но вариант — указать названия:

post_is_in_descendant_category( get_term_by( 'name', 'fruit', 'category' ) )

А вот сама функция post_is_in_descendant_category() :

function post_is_in_descendant_category( $cats, $_post = null ) < foreach( (array) $cats as $cat )< // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category' ); if( $descendants && in_category( $descendants, $_post ) )< return true; >> return false; >

#4 Древовидная проверка принадлежности к термину

Проверим входит ли пост в термин произвольной таксономии (будем проверять и дочерние термины к указанному):

if( has_term( 11, 'taxonomy', $post->ID ) || post_is_in_descendant_term( 11, 'taxonomy', $post->ID ) )< // Текущая запись в термине 11 или в его дочернем термине >
function post_is_in_descendant_term( $term_ids, $taxonomy = 'category', $post = null ) < foreach( (array) $term_ids as $term_id )< $descendants = get_term_children( (int) $term_id, $taxonomy ); if ( $descendants && has_term( $descendants, $taxonomy , $post ) ) return true; >return false; >

Список изменений

Код in_category() in category WP 6.2.2

function in_category( $category, $post = null ) < if ( empty( $category ) ) < return false; >return has_category( $category, $post ); >

Cвязанные функции

Условные теги (все)

  • cat_is_ancestor_of()
  • category_exists()
  • comments_open()
  • email_exists()
  • has_block()
  • has_category()
  • has_custom_header()
  • has_excerpt()
  • has_nav_menu()
  • has_post_thumbnail()
  • has_shortcode()
  • has_tag()
  • has_term()
  • have_comments()
  • have_posts()
  • in_the_loop()
  • is_404()
  • is_active_sidebar()
  • is_admin()
  • is_admin_bar_showing()
  • is_archive()
  • is_attachment()
  • is_author()
  • is_blog_admin()
  • is_category()
  • is_child_theme()
  • is_comment_feed()
  • is_customize_preview()
  • is_date()
  • is_day()
  • is_dynamic_sidebar()
  • is_email()
  • is_embed()
  • is_feed()
  • is_front_page()
  • is_header_video_active()
  • is_home()
  • is_local_attachment()
  • is_login()
  • is_main_query()
  • is_month()
  • is_multi_author()
  • is_multisite()
  • is_nav_menu()
  • is_network_admin()
  • is_new_day()
  • is_page()
  • is_page_template()
  • is_paged()
  • is_plugin_active()
  • is_post_type_archive()
  • is_post_type_hierarchical()
  • is_preview()
  • is_robots()
  • is_search()
  • is_single()
  • is_singular()
  • is_ssl()
  • is_sticky()
  • is_tag()
  • is_tax()
  • is_taxonomy_hierarchical()
  • is_textdomain_loaded()
  • is_time()
  • is_trackback()
  • is_user_admin()
  • is_user_logged_in()
  • is_year()
  • pings_open()
  • post_exists()
  • post_password_required()
  • shortcode_exists()
  • tag_exists()
  • taxonomy_exists()
  • term_exists()
  • term_is_ancestor_of()
  • wp_attachment_is()
  • wp_doing_ajax()
  • wp_doing_cron()
  • wp_is_mobile()
  • wp_is_post_autosave()
  • wp_is_post_revision()
  • wp_is_using_https()
  • wp_script_is()

Рубрики

  • category_description()
  • get_cat_ID()
  • get_cat_name()
  • get_categories()
  • get_category()
  • get_category_by_slug()
  • get_category_link()
  • get_category_parents()
  • get_the_category_by_ID()
  • single_cat_title()
  • wp_create_category()
  • wp_dropdown_categories()
  • wp_insert_category()
  • wp_list_categories()

Таксономии: рубрики, метки, .

Источник

in_category() — функция, позволяющая проверить, принадлежит ли пост к указанным категориям

Функция возвращает логическое true, если пост принадлежит одной из указанных рубрик, в обратном случае — false. Родительские рубрики не учитываются .

Использование

in_category( $category, $post )

Параметры

$category
(целое|строка|массив) (обязательное) одна или несколько (через массив) категорий, перечисленных по ID, имени или ярлыку,

$post
(целое|объект) (необязательно) ID или объект поста, по умолчанию — текущий пост в цикле

Примеры использования

Проверяем, принадлежит ли пост с указанным ID к рубрикам «WordPress» или «HTML»:

if ( in_category( array('WordPress', 'HTML'), 5 )) { // действия в случае, если принадлежит категориям }

То же самое условие, только с использованием в качестве параметров ID рубрик:

if ( in_category( array(15, 4), 5 )) { // WordPress с HTML с style="">}
if ( !in_category( array('WordPress', 'HTML'), 5 )) { // действия в случае, если НЕ принадлежит категориям }

Параметр $post можно не указывать в цикле, а также в файле single.php — автоматически будет определен текущий пост.

if ( in_category( 'wordpress') ) { // в качестве параметра указан ярлык рубрики }

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

if ( in_category(4) && in_category('wordpress') && in_category('css') ) { // находится во всех трех рубриках }

Короче говоря условие будет выполняться, если:

пост находится в категориях CSS, HTML и WordPress

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Комментарии — 12

Помогите решить проблему, использую код (что бы во всех рубриках, кроме рубрик с id 538 190 300 выводилась , например, точка, как в этом случае)

 if (in_category('538, 190, 300')) : ?> 

.

} ?>

ошибка возникает из-за неправильного построения конструкции if и неправильной передачи аргумента, можете использовать один из следующих вариантов:

 if( !in_category( array(538, 190, 300) ) ) : ?> 

.

endif; ?>
 if( !in_category( array(538, 190, 300) ) ) { ?> 

.

} ?>
if ( in_category( array(15, 4), 5 ))

Проблема не в именно этом коде, на главной странице получается срабатывает is_home — с этим проблем нет, и in_category первой новости которая выводится на странице.

Да, если in_category() задействована внутри цикла и не имеет второго аргумента. Какая собственно ставится задача?

Если к примеру пользователь находится на странице категории то появлялись под категории соответствующие данной категории.

Спасибо, решение простое!
Это будет быстрее в плане скорости, чем делать то же плагином.
Например, думал, как сделать, чтобы отдельные записи были доступны неавторизованным пользователям (сайт с материалами «для своих»).
Прописал

if( current_user_can( 'edit_users' ) || in_category( 15, $post ) ){ // выводить обычный код, отвечающий за обработку поста (записи) } else { echo '403 Forbidden'; }

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Источник

Оцените статью