@redesupar

Как изменить статус поста wordpress через месяц?

Делаю так, но в постах есть специальные условия где Expiries указан как никогда, немогу понять как его вытащить и нигде нет его?
а еще как можно указать ровно 1 months в дате? а то у меня грубо 30 дней, а надо либо 30/31/29/28 в зависимости от месяца

object(WP_Post)#19263 (24) { ["ID"]=> int(10225) ["post_author"]=> string(4) "4782" ["post_date"]=> string(19) "2022-02-17 17:28:49" ["post_date_gmt"]=> string(19) "2022-02-17 14:28:49" ["post_content"]=> string(1435) "
" ["post_title"]=> string(58) "Техник по очистке и дезинфекции" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(6) "closed" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(4) "3961" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2022-05-27 11:43:03" ["post_modified_gmt"]=> string(19) "2022-05-27 08:43:03" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(28) "3961" ["menu_order"]=> int(0) ["post_type"]=> string(3) "job" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }


// Добавляем хук на сохранение поста
add_action( 'save_post', 'action_save_post' );
function action_save_post( $post_id ) {
    // Если это ревизия, то ничего не делаем
    if ( wp_is_post_revision( $post_id ) || get_post($post_id)->post_status !== 'publish'  || get_post($post_id)->post_type !== 'job' ) {
        return;
    }
    // Регистрируем одиночное событие через 30 дней.
    wp_schedule_single_event( time() + 86400 * 30, 'change_post_status_event', array( $post_id ) );
}

// Добавляем хук на событие
add_action( 'change_post_status_event', 'change_post_status', 10, 1 );
function change_post_status( $post_id ) {
    // Удаляем действие по сохранению поста, чтобы избежать зацикливания
    remove_action('save_post', 'action_save_post');

    // Создаем данные поста
    $post = array(
        'ID' => $post_id,
        'post_status' => 'draft',
    );
    // Обновляем пост
    wp_update_post( $post );

    // Возвращаем действие по сохранению поста
    add_action('save_post', 'action_save_post');
}
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@evilgodhedgehog
Создай произвольное поле даты и времени тут в помощь datapicker и timepicker. Далее через функцию strtotime превращаешь это в секунды. Получаешь разницу между текущим временем используя функцию time() и тем что задаёшь в поле. Дальше в своей функции просто wp_schedule_single_event( time() + результат разности ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы