- has_category() │ WP 3.1.0
- Возвращает
- Использование
- Примеры
- #1 Проверим есть ли у поста хоть одна указанная рубрика
- Список изменений
- Код has_category() has category WP 6.2.2
- Cвязанные функции
- Условные теги (все)
- Для записей
- in_category() │ WP 1.2.0
- Возвращает
- Использование
- Примеры
- #1 Проверка текущего поста внутри Цикла WordPress.
- #2 Проверка текущего поста за пределами Цикла.
- #3 Проверка принадлежности поста к текущей или вложенной в текущую категории
- #4 Древовидная проверка принадлежности к термину
- Список изменений
- Код in_category() in category WP 6.2.2
- Cвязанные функции
- Условные теги (все)
- Рубрики
- Таксономии: рубрики, метки, .
- in_category() — функция, позволяющая проверить, принадлежит ли пост к указанным категориям
- Использование
- Параметры
- Примеры использования
- Миша
- Комментарии — 12
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()
Для записей
- 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') ) { // находится во всех трех рубриках }
Короче говоря условие будет выполняться, если:
Миша
Впервые познакомился с 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'; }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.