Можно ли автоматически установить время публикации на 8 утра для новых записей?

Вопрос или проблема

Это может быть немного сложно, но есть ли у кого-нибудь идеи о том, как я мог бы автоматически установить время (не дату) на 8 утра для всех вновь созданных черновиков постов в редакторе блоков?

Я думаю, мне нужно подключиться к функции нового поста. Также нам нужно убедиться, что функция изменения времени выполняется только один раз при создании черновика, а не при его сохранении или публикации. И мы не хотим менять дату, только время. Пользователь затем сможет установить дату в будущем для запланированной публикации.

Требуется ли для этого PHP? Или, возможно, jQuery?

Ответ или решение

Да, можно автоматически установить время публикации нового поста на 8:00 утра в редакторе Block Editor. Для достижения этой цели потребуется использовать PHP и взаимодействовать с хуками WordPress, чтобы изменить время публикации только для вновь созданных черновиков, избегая изменений при их сохранении или публикации.

Шаги для реализации:

  1. Использование хуков WordPress: Нам нужно подключиться к хуку, который срабатывает при создании нового поста. Хук save_post будет идеальным кандидатом.

  2. Проверка типа поста и статуса: Важно удостовериться, что мы изменяем только новые посты, а не те, которые уже были сохранены или опубликованы. Для этого используем параметры $post_type и $post_status.

  3. Фильтрация времени публикации: Мы можем установить время на 8:00, не изменяя при этом дату публикации.

Пример кода:

Ниже представлен пример кода, который вы можете добавить в файл functions.php вашей темы или в плагин:

function set_default_publish_time( $post_id, $post, $update ) {
    // Проверяем, что это не обновление существующего поста
    if ( $update ) return;

    // Проверяем тип поста
    if ( $post->post_type !== 'post' ) return;

    // Получаем текущую дату
    $current_date = current_time('Y-m-d');

    // Устанавливаем время публикации на 8:00
    $time = '08:00:00';

    // Обновляем время публикации
    $new_date = $current_date . ' ' . $time;
    $new_timestamp = strtotime( $new_date );

    // Устанавливаем новые метаданные
    remove_action('save_post', 'set_default_publish_time'); // Удаляем хук, чтобы избежать бесконечного цикла
    wp_update_post(array(
        'ID' => $post_id,
        'post_date' => $new_date,
        'post_date_gmt' => gmdate('Y-m-d H:i:s', $new_timestamp)
    ));
    add_action('save_post', 'set_default_publish_time'); // Восстанавливаем хук
}

add_action('save_post', 'set_default_publish_time', 10, 3);

Объяснение кода:

  1. Функция set_default_publish_time: Эта функция сначала проверяет, что пост не обновляется ($update), и что он является новым постом типа post.

  2. Получаем текущую дату: Мы используем current_time('Y-m-d'), чтобы получить сегодняшнюю дату.

  3. Устанавливаем время: Создаем строку с желаемым временем и комбинируем ее с текущей датой для установки новой метки времени.

  4. Обновляем пост: Используем wp_update_post для изменения времени публикации.

  5. Удаляем и восстанавливаем хук: Перед вызовом wp_update_post удаляем хук, чтобы избежать бесконечного цикла, а затем восстанавливаем его.

Заключение

Такое решение позволяет легко установить автоматическое время публикации для новых черновиков на 8:00. Ваша задача заключается только в том, чтобы настроить и проверить данный код. Также обязательно сохраняйте резервные копии перед изменениям функциональности вашего WordPress сайта.

Этот код написан с учетом производительности и предотвращения потенциальных проблем, что позволяет обеспечить его надежную работу.

Оцените материал
Добавить комментарий

Капча загружается...