В WordPress по умолчанию владелец поста — это пользователь, который его создал. Но иногда возникает задача назначить или изменить владельца поста программно, например, при массовом импорте контента или при автоматизации процессов. В этой статье мы подробно разберём, как добавить или изменить владельца постов в WordPress с помощью PHP-кода, а также рассмотрим примеры использования и полезные рекомендации.
Почему важно уметь менять владельца поста
Владельцем поста (автором) считается пользователь с определённым ID. По умолчанию WordPress устанавливает текущего пользователя, создающего запись, как автора. Но бывают ситуации, когда нужно изменить этот параметр:
- Импорт статей от имени другого пользователя;
- Автоматическое назначение контента на определённого автора;
- Передача прав на контент при смене редактора;
- Корректировка данных после миграций или конвертации сайтов;
- Управление привязкой постов в мультиязычных или мультиавторских проектах.
В таких случаях ручное изменение автора через админку неудобно и неэффективно, поэтому решение на уровне кода ускоряет и автоматизирует процесс.
Использование функции wp_update_post для смены автора
Основной способ изменить владельца поста — использовать функцию wp_update_post. Важно передавать в массив параметров ID поста и ID нового автора (поле post_author).
function wpcore_change_post_owner( $post_id, $new_author_id ) {
// Проверяем существование поста
$post = get_post( $post_id );
if ( ! $post ) {
return new WP_Error( 'post_not_found', 'Пост с таким ID не найден' );
}
// Проверяем существование пользователя
$user = get_userdata( $new_author_id );
if ( ! $user ) {
return new WP_Error( 'user_not_found', 'Пользователь с таким ID не найден' );
}
// Обновляем автора поста
$updated_post = array(
'ID' => $post_id,
'post_author' => $new_author_id
);
$result = wp_update_post( $updated_post, true );
if ( is_wp_error( $result ) ) {
return $result;
}
return true;
}
Пример использования:
$change = wpcore_change_post_owner( 123, 5 );
if ( is_wp_error( $change ) ) {
echo 'Ошибка: ' . $change->get_error_message();
} else {
echo 'Автор поста успешно изменён';
}
Этот код проверяет, что пост и пользователь существуют, и безопасно меняет автора.
Массовое изменение владельцев постов: пример с циклом
Если нужно поменять владельца сразу у нескольких записей, например, у всех постов категории или с определённым мета-полем, можно использовать WP_Query и цикл.
function wpcore_bulk_change_post_owners( $args, $new_author_id ) {
$query = new WP_Query( $args );
if ( ! $query->have_posts() ) {
return false; // Нет постов для изменения
}
while ( $query->have_posts() ) {
$query->the_post();
$post_id = get_the_ID();
wpcore_change_post_owner( $post_id, $new_author_id );
}
wp_reset_postdata();
return true;
}
Пример вызова, меняем владельца всех постов категории с ID 7:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'cat' => 7
);
wpcore_bulk_change_post_owners( $args, 3 ); // Назначаем автора с ID 3
Такой подход полезен при переносах или реорганизации контентной базы.
Дополнительные советы и рекомендации
Проверка прав пользователя
Важно убедиться, что текущий пользователь, запускающий смену автора, имеет права на редактирование соответствующих постов и изменение авторства. Для этого можно проверять capability edit_post и edit_others_posts.
Использование хуков для автоматизации
Можно автоматически менять владельца при создании поста через хук save_post или во время импорта:
add_action( 'save_post', function( $post_id, $post, $update ) {
if ( ! $update ) { // Только при создании
$new_author_id = 5; // ID автора, которого нужно назначить
wpcore_change_post_owner( $post_id, $new_author_id );
}
}, 10, 3 );
Плагины для управления авторами постов
Если хотите более удобный интерфейс без кода, обратите внимание на плагины:
- Clearfy Pro — содержит множество оптимизаций и улучшений, включая настройки управления авторством.
- WPRemark — полезен для работы с комментариями и авторами.
Вывод
Добавление или изменение владельца постов в WordPress с помощью кода — простая и мощная возможность для автоматизации. Функция wpcore_change_post_owner из примера легко интегрируется в плагины или темы, а массовая смена через WP_Query поможет быстро реорганизовать контент. Не забывайте учитывать права пользователей и тестировать код на резервной копии сайта.