@ligisayan

Почему CRON задача отрабатывает некорректно в сравнении с хуком admin_init?

Всем привет!
Есть медиатека фильмов на wordpress, данные для которой я получаю по Rest API и записываю в посты соответственно на каждый из фильмов.

Настроил CRON задачу (при помощи wordpress) для периодического обновления контента, но столкнулся с проблемой корректного стягивания контента: при каждой попытке активации, создаётся выборочный пост из запроса, причём без постера, т.е. функция set_post_thumbnail не отрабатывает..

Но, если отключаю хук с активацией крона cron_activation и вместо хука query_films прописываю

add_action('admin_init', 'function_query_films');, то непосредственно принудительное создание постов отрабатывает корректно.

В чем может быть причина и как поправить?

Код
add_action( 'admin_head', 'cron_activation' );
function cron_activation() {
    if( ! wp_next_scheduled( 'query_films' ) ) {
        wp_schedule_single_event( time(), 'query_films' );
    }
}

//add_action('admin_init', 'function_query_films');
add_action( 'query_films','function_query_films' );
function function_query_films(){

   $term_id     = 500; // get_queried_object()->term_id;
   $term_childs = get_term_children( $term_id, 'category' );

   foreach ( $term_childs as $child ) {

      $company_id = get_term_meta( $child, 'company_id', true );

      if($company_id) {

        $url = URL_PATH .'films?companyId='. $company_id;
        $options = array('http' => array(
           'method'  => 'GET',
           'header' => 'Authorization: Bearer '.BEARER_TOKEN
        ));
        $context  = stream_context_create($options);
        $response = file_get_contents($url, false, $context);

        if($response) {
          $json_array = json_decode($response, true);
          if(is_array($json_array)) {
             foreach($json_array as $json_value) {
                $post_data = array(
                   'post_title'    => sanitize_text_field( $name ),
                   'post_content'  => $content,
                   'post_category' => array(5),
                   'post_status'   => 'publish',
                   'post_type'      => 'post',
                   'post_author' => 1
                );
                $post_id = wp_insert_post( $post_data );
                $img_id = media_sideload_image( $json_value["img_url"], $post_id); 
                $thumbnail = set_post_thumbnail( $post_id, $img_id );
             }
          }
        }
      }
   }
}
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
@ligisayan Автор вопроса
В силу того, что cron необходимы функции, как для фронта, а не админки, то для работы необходимо обязательно подключить
require_once ABSPATH . '/wp-admin/includes/image.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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