wphow.ru wordpress WPHow

Как изменить автора постов в WordPress через функции

В 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 через функции — мощный и гибкий инструмент, позволяющий автоматизировать рутинные задачи и обеспечить корректность данных на сайте. Приведённые выше примеры помогут быстро внедрить нужный функционал и адаптировать его под свои задачи.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙