Вопрос или проблема
Это может быть немного сложно, но есть ли у кого-нибудь идеи о том, как я мог бы автоматически установить время (не дату) на 8 утра для всех вновь созданных черновиков постов в редакторе блоков?
Я думаю, мне нужно подключиться к функции нового поста. Также нам нужно убедиться, что функция изменения времени выполняется только один раз при создании черновика, а не при его сохранении или публикации. И мы не хотим менять дату, только время. Пользователь затем сможет установить дату в будущем для запланированной публикации.
Требуется ли для этого PHP? Или, возможно, jQuery?
Ответ или решение
Да, можно автоматически установить время публикации нового поста на 8:00 утра в редакторе Block Editor. Для достижения этой цели потребуется использовать PHP и взаимодействовать с хуками WordPress, чтобы изменить время публикации только для вновь созданных черновиков, избегая изменений при их сохранении или публикации.
Шаги для реализации:
-
Использование хуков WordPress: Нам нужно подключиться к хуку, который срабатывает при создании нового поста. Хук
save_post
будет идеальным кандидатом. -
Проверка типа поста и статуса: Важно удостовериться, что мы изменяем только новые посты, а не те, которые уже были сохранены или опубликованы. Для этого используем параметры
$post_type
и$post_status
. -
Фильтрация времени публикации: Мы можем установить время на 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);
Объяснение кода:
-
Функция
set_default_publish_time
: Эта функция сначала проверяет, что пост не обновляется ($update
), и что он является новым постом типаpost
. -
Получаем текущую дату: Мы используем
current_time('Y-m-d')
, чтобы получить сегодняшнюю дату. -
Устанавливаем время: Создаем строку с желаемым временем и комбинируем ее с текущей датой для установки новой метки времени.
-
Обновляем пост: Используем
wp_update_post
для изменения времени публикации. -
Удаляем и восстанавливаем хук: Перед вызовом
wp_update_post
удаляем хук, чтобы избежать бесконечного цикла, а затем восстанавливаем его.
Заключение
Такое решение позволяет легко установить автоматическое время публикации для новых черновиков на 8:00. Ваша задача заключается только в том, чтобы настроить и проверить данный код. Также обязательно сохраняйте резервные копии перед изменениям функциональности вашего WordPress сайта.
Этот код написан с учетом производительности и предотвращения потенциальных проблем, что позволяет обеспечить его надежную работу.