Автоматически обновлять поле ACF по дате

Вот что я пытаюсь сделать: отключить параметр True/False Advanced Custom Fields(ACF) в сообщении, если текущая дата совпадает с выбранной датой в том же сообщении или превышает ее. Также после этого кода отключите опцию Sample Lesson True/False внутри уроков, прикрепленных к текущему сообщению.

Сначала у меня была только функция update_sample_child_lessons с действием 'init' (т.е.add_action( 'init', 'update_sample_child_lessons' );), но, похоже, это запускается только тогда, когда я нажимаю «Обновить» в сообщении. Это сработало, и все переключилось, но запустилось только тогда, когда я вручную нажал «Обновить» в сообщении. Затем я провел небольшое исследование и обнаружил, что задание Cron должно помочь, если я хочу, чтобы код запускался автоматически без необходимости нажимать кнопку «Обновить», но по какой-то причине я не могу заставить его работать.

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

      //CRON JOB TO RUN EVERYDAY
function myprefix_custom_cron_schedule( $schedules ) {
    $schedules['every_day'] = array(
        'interval' => 86400, //24 HOURS IN SECONDS
        'display'  => __( 'Every 24 hours' ),
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );

if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {
    wp_schedule_event( time(), 'every_day', 'myprefix_cron_hook' );
}
      //AUTOMATICALLY ADJUSTS SAMPLE LESSON FREE OPTIONS AND FREE BANNER IF DATE IS PASSED
add_action( 'myprefix_cron_hook', 'update_sample_child_lessons' );
function update_sample_child_lessons() {
  $allcourses = array(
    'post_type' => 'sfwd-courses', //CUSTOM POST TYPE: COURSES
    'posts_per_page' => -1 //QUERY ALL OF THEM
  );
  $query = new WP_Query($allcourses);

  if ($query->have_posts()) {
    global $post;
    if ( ( in_array( $post->post_type, array( 'sfwd-courses' ), true ) )) { //ONLY DO ACTION IF ON CPT OF COURSES
      while ($query->have_posts()) {
        $query->the_post();
        $course_id = learndash_get_course_id( $post->ID ); //GET THE COURSE ID
        $free = get_field('display_free_lessons', $course_id); //GET THE FREE COURSE OPTION (TRUE/FALSE TICKER)
        if (!empty($free)) { //ONLY DO REST OF CODE IF FREE OPTION IS TURNED ON
          $freeDate = get_field('free_until', $course_id); //GET THE DATE FIELD THAT THE COURSE IS FREE UNTIL
          $currentDate = date('Ymd'); //GET CURRENT DATE
          $diff = strtotime($freeDate) - strtotime($currentDate); //GET THE DIFFERENCE BETWEEN THE TWO DATES
          if ($diff <= 0) { //ONLY DO REST OF CODE IF DATE DIFFERENCE IS LESS THAN OR EQUAL TO ZERO
            $value = '';
            update_field('display_free_lessons', $value, $course_id); //UPDATES THE FREE OPTION FIELD TO FALSE(OR NOTHING)

            //LESSON CODE
            $lessons = array_slice(learndash_course_get_lessons($course_id), 1); //GET ALL THE LESSONS FROM THE COURSE EXCEPT FOR THE FIRST ONE
            foreach ($lessons as $lesson) {
              $lessonID = $lesson->ID; //GET THE LESSON ID
              $lesson_meta = get_post_meta($lessonID); //GET THE METADATA FOR THE LESSON
              if ( is_array( $lesson_meta ) ) {
                foreach ( $lesson_meta as $meta_key => $meta_value ) {
                  if ( '_sfwd-lessons' === $meta_key ) {
                    $lesson_settings = maybe_unserialize( $meta_value[0] ); //SOME OF THE ARRAYS ARE SERIALIZED, SO UNSERIALIZE IF NEEDED
                    if ( isset( $lesson_settings['sfwd-lessons_sample_lesson'] ) ) {
                      $lesson_settings['sfwd-lessons_sample_lesson'] = ''; //TURN OFF THE SAMPLE LESSON OPTION ON THE LESSONS
                    }
                    update_post_meta( $lessonID, $meta_key, $lesson_settings );
                  }
                }
              }
            } //END FOREACH
          } //END IF DIFF IS 0
        wp_reset_postdata();
        } 
      }
    }
  }
}

0 ответов

Другие вопросы по тегам