В WordPress иногда возникает необходимость массово или выборочно изменить автора уже опубликованных постов. Это может понадобиться при смене ответственного редактора, объединении аккаунтов пользователей или корректировке данных при миграции сайта. В данной статье мы разберём, как программно управлять авторами постов через функции и хуки WordPress, без использования сторонних плагинов.
Почему стоит менять автора постов через функции, а не вручную
Большое количество постов вручную менять неудобно и рискованно — можно ошибиться, потратить много времени. Использование кода даёт точный контроль, позволяет автоматизировать процесс, например, менять автора по определённым условиям (дата публикации, категория, метки и т.д.). Кроме того, код можно сохранить и использовать повторно или расширить под новые задачи.
Если вы хотите простой UI, то можно рассмотреть плагины, однако они зачастую не дают гибких условий и могут нагружать сайт. В качестве примера можно упомянуть плагин Author Change, но мы сосредоточимся на программном подходе.
Использование функции wphow_change_post_author для обновления автора
Создадим функцию, которая принимает ID поста и ID нового автора, после чего обновляет автора. Вот пример кода, который можно добавить в functions.php вашей темы или в отдельный плагин:
function wphow_change_post_author($post_id, $new_author_id) {
// Проверяем, существует ли пост
$post = get_post($post_id);
if (!$post) {
return new WP_Error('invalid_post', 'Пост с таким ID не найден');
}
// Проверяем, существует ли пользователь-автор
$user = get_userdata($new_author_id);
if (!$user) {
return new WP_Error('invalid_user', 'Пользователь с таким ID не найден');
}
// Обновляем автора поста
$updated = wp_update_post(array(
'ID' => $post_id,
'post_author' => $new_author_id
));
if (is_wp_error($updated)) {
return $updated;
}
return true;
}Эта функция вернёт true при успешном обновлении или WP_Error с соответствующим сообщением об ошибке.
Пример вызова функции
Допустим, нужно поменять автора поста с ID 123 на пользователя с ID 7:
$result = wphow_change_post_author(123, 7);
if (is_wp_error($result)) {
echo 'Ошибка: ' . $result->get_error_message();
} else {
echo 'Автор успешно изменён';
}Массовое изменение автора по категории с помощью цикла
Частая задача — сменить автора для всех постов из определённой категории. Это можно сделать с помощью WP_Query и цикла:
function wphow_change_author_by_category($category_slug, $new_author_id) {
$args = array(
'category_name' => $category_slug,
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
);
$query = new WP_Query($args);
if (!$query->have_posts()) {
return 'Посты не найдены для категории "' . $category_slug . '"';
}
foreach ($query->posts as $post_id) {
wphow_change_post_author($post_id, $new_author_id);
}
return 'Автор изменён для ' . count($query->posts) . ' постов';
}Используйте функцию так:
echo wphow_change_author_by_category('novosti', 5);Это изменит автора всех постов в категории с ярлыком novosti на пользователя с ID 5.
Использование хука save_post для автоматической смены автора
Если вы хотите, чтобы при сохранении поста автоматически менялся автор по определённому условию, можно использовать хук save_post. Например, меняем автора поста на администратора (ID 1), если в мета-поле change_author_automatically стоит значение yes:
function wphow_auto_change_author_on_save($post_id) {
// Проверяем, не автосохранение ли
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Проверяем тип поста
if (get_post_type($post_id) !== 'post') {
return;
}
// Получаем значение мета-поля
$auto_change = get_post_meta($post_id, 'change_author_automatically', true);
if ($auto_change === 'yes') {
// Меняем автора на пользователя с ID 1
wp_update_post(array(
'ID' => $post_id,
'post_author' => 1
));
}
}
add_action('save_post', 'wphow_auto_change_author_on_save');Такой подход полезен для автоматизации и интеграции с кастомными полями или формами.
Советы и рекомендации по работе с авторами в WordPress
1. Проверяйте существование пользователей
Перед сменой автора всегда проверяйте, что пользователь с таким ID существует. Иначе получите ошибки и возможно потерю данных.
2. Будьте осторожны с правами доступа
Изменение автора поста может повлиять на права редактирования и отображение авторства. Убедитесь, что новый автор имеет нужные права.
3. Используйте резервное копирование
Перед массовыми изменениями всегда делайте бэкап базы данных, чтобы можно было откатить изменения при ошибках.
4. Интегрируйте с плагинами
Если на сайте установлен плагин Expert Review или другие, учитывайте, что смена автора может влиять на доступ к обзорам или рейтингам.
Выводы
Изменение автора постов в WordPress через функции — мощный и гибкий инструмент, позволяющий автоматизировать рутинные задачи и обеспечить корректность данных на сайте. Приведённые выше примеры помогут быстро внедрить нужный функционал и адаптировать его под свои задачи.