is_multi_author()
Определяет, есть ли на сайте более одного автора, который публиковал записи. Условный тег.
Функция проверяет, сколько уникальных авторов опубликовали хотя бы одну запись, и возвращает true, если таких авторов больше одного.
Это условная функция (conditional tag) — обычно используется в шаблонах тем для вывода дополнительных элементов (например, ссылки на автора), только если это мульти-авторский блог.
Кэширование
Результат кешируется в transient‑кеш is_multi_author и фильтруется через хук is_multi_author перед возвращением.
При добавлении новых записей или авторов transient может устареть — можно очищать кеш вручную с помощью delete_transient( 'is_multi_author' ).
Использует глобальный объект $wpdb и SQL‑запрос к таблице posts, выбирая до двух уникальных авторов, имеющих опубликованные посты.
Можно изменить поведение через фильтр is_multi_author, чтобы переопределить значение по логике разработчика:
add_filter( 'is_multi_author', 'ваша_функция' );
Хуки из функции
Возвращает
true|false.
true— на сайте более одного автора опубликовали посты.false— на сайте только один автор публикует посты.
Использование
<?php
if( is_multi_author() ){
// более одного автора на сайте
}
?>
Примеры
#1 Выведем ссылку на посты автора, только если на блоге несколько авторов:
<?php
if( is_multi_author() ){
the_author();
}
?> #2 Добавление CSS‑класса при нескольких авторах
Если нужно добавить в <body> класс group-blog для мультиавторских сайтов:
add_filter( 'body_class', 'wpdocs_body_classes' );
function wpdocs_body_classes( $classes ) {
if ( is_multi_author() ) {
$classes[] = 'group-blog';
}
return $classes;
} #3 Очистка кеша после публикации новой записи
Чтобы сбросить результат при добавлении записи:
add_action( 'save_post', 'clear_multi_author_cache' );
function clear_multi_author_cache( $post_id ) {
delete_transient( 'is_multi_author' );
}
Заметки
- Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
| С версии 3.2.0 | Введена. |
Код is_multi_author() is multi author WP 6.9
function is_multi_author() {
global $wpdb;
$is_multi_author = get_transient( 'is_multi_author' );
if ( false === $is_multi_author ) {
$rows = (array) $wpdb->get_col( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 2" );
$is_multi_author = 1 < count( $rows ) ? 1 : 0;
set_transient( 'is_multi_author', $is_multi_author );
}
/**
* Filters whether the site has more than one author with published posts.
*
* @since 3.2.0
*
* @param bool $is_multi_author Whether $is_multi_author should evaluate as true.
*/
return apply_filters( 'is_multi_author', (bool) $is_multi_author );
}