WordPress Cron Job импорт сообщений - PullRequest
0 голосов
/ 18 сентября 2018

Я создаю сайт для импорта товаров из фида JSON, а затем отображаю их в виде публикаций на моем сайте.

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

Будет ли хорошей практикой импортировать канал, создавать сообщения на основе канала и затем заполнять сообщения на сайте?

Чтобы удалить дубликаты, я бы запустил проверку БД для идентификатора продукта и пропустил уже созданные.

Я действительно новичок в cron и динамически создаю посты, поэтому я не уверен, что это лучший способ сделать это.

1 Ответ

0 голосов
/ 19 сентября 2018

Я решил это, добавив обработчик AJAX в мои functions.php, извлекая задания через запрос curl, а затем перебирая ленту новостей, вставляя новые сообщения в БД и обновляя уже существующие сообщения.

//CURL request to fetch feed when getting AJAX call
function import_feed() {
  $url = "http://url-to-jsonfeed.com";

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  $data = json_decode($response, true);
  create_posts($data);
  wp_die();
}
add_action('wp_ajax_import_feed', 'import_feed');

//Loop through JSON data and create post 
function create_posts($jsonfeed) {
  $data = $jsonfeed['Report'];

  if (!empty($data) ) {
    foreach ($data as $entry) {

      //Set post data before creating post
      $post_data = array( 
        'post_title' => $entry['Entry_Title'],
        'post_name' => $entry['EntryID'], 
        'post_status' => 'publish', 
        'post_author' => 1,
        'post_type' => 'entries'
      );

      if (get_page_by_title($post_data['post_title'], 'entries') == null && empty(get_posts(array('post_type' => 'entries', 'name' => $post_data['post_name'])))) {
        wp_insert_post($post_data, $wp_error);

      } else if (!empty(get_posts(array('post_type' => 'entries', 'name' => $post_data['post_name'])))) {
        $post = get_posts(array('post_type' => 'entries', 'name' => $post_data['post_name']));
        $post_id = $post[0]->ID;
        $post_data['ID'] = $post_id;
        wp_update_post($post_data, $wp_error);
      }

    }
  }
}
...