wordpress - извлечение данных внешнего API не работает из функций. php - PullRequest
0 голосов
/ 11 июля 2020

Этот код извлекает некоторые данные из внешнего API, проверяет, не сохранены ли извлеченные события в базе данных WP как пользовательские сообщения (события) (если да, то он выполняет еще один вызов API, чтобы получить подробную информацию о событии, чтобы увидеть если он не был закрыт и не обновил метаданные.

Если извлеченное событие не соответствует ни одному из событий, уже имеющихся в базе данных WP, оно добавляет его, назначая указанный термин таксономии.

Если я иметь весь приведенный ниже код в моем файле шаблона архива пользовательской таксономии, все работает так, как задумано. Однако я понимаю, что это не лучшее место для хранения такого кода. Если я переместу приведенный ниже код в functions. php, кажется для работы с выполнением назначения термина таксономии (короткий фрагмент чуть ниже). Он просто вообще не назначает никаких терминов таксономии. Как только я верну весь код в свой шаблон, все снова будет хорошо

$is_category_specified = ($category ? $category: 'Other' );
          $hq_category = ( term_exists($is_category_specified, 'event_category') ? $is_category_specified: 'Other' );
          wp_set_object_terms($pid, $hq_category, 'event_category');

Полный фрагмент:

<?php

  $request = wp_remote_get( 'https://api.xxxxxxx' );
  
  if( is_wp_error( $request ) ) {
    echo "wrong request";
    return false; // Bail early
  }
  
  function utf8ize($mixed) {
    if (is_array($mixed)) {
    foreach ($mixed as $key => $value) {
    $mixed[$key] = utf8ize($value);
    }
    } else if (is_string ($mixed)) {
    return utf8_encode($mixed);
    }
    return $mixed;
    }
  
  function getContent($req) {
    $b = wp_remote_retrieve_body( $req );
    $d = json_decode(utf8ize($b), true);
    return $d; 
  }

  $body = wp_remote_retrieve_body( $request );
  $data = json_decode(utf8ize($body), true);
  $data_events = $data['events'];

  if( ! empty( $data_events ) ) {
    function add_event($title, $id, $uri, $event_date, $event_status, $entries_close_date, $type, $category) {
      $new_post = array(
        'post_title' => $title,
        'post_content' => '',
        'post_status' => 'publish',
        'post_author' => '2',
        'post_type' => 'event',
        'meta_input' => array(
          'hq_id' => $id,
          'event_uri' => $uri,
          'event_date' => $event_date,
          'event_status' => $event_status,
          'entries_close_date' => $entries_close_date,
          'type' => $type,
          'category' => $category,
        )
      );
      $pid = wp_insert_post($new_post);
      $is_category_specified = ($category ? $category: 'Other' );
      $hq_category = ( term_exists($is_category_specified, 'event_category') ? $is_category_specified: 'Other' );
      wp_set_object_terms($pid, $hq_category, 'event_category');
      $get_meta_time = get_post_meta($pid, 'event_date');
      $newformat = date('Ymd', strtotime($get_meta_time[0]));
      update_post_meta($pid, 'event_date', $newformat);
      update_post_meta($pid, 'event_uri', $uri);
    } // end of add_event function
        
      foreach( $data_events as $event ) {
      // Get the id and status of the event currently looped over
      $api_id = $event["id"];
      $api_status = $event["status"];

      
      // Specify the matching criteria for extracting the post from WP
      $existing_posts_arguments = array(
        'hierarchical' => 1,
        'meta_key' => 'hq_id',
        'meta_value' => $event['id'],
        'post_type' => 'event',
      );
      // extracting all posts matching the criteria. In theory, there should only be one post matching the criteria.
      $existing_posts = get_posts( $existing_posts_arguments );
      // extract the post HQ ID and status as pulled at the post creation time
      $post_hq_id = get_post_meta($existing_posts[0]->ID, 'hq_id');
      $post_hq_status = get_post_meta($existing_posts[0]->ID, 'event_status');
      
      // Check if the status of the event on RHQ has not changed since its creation
      // If so, update it in WP
      if ( $api_id == $post_hq_id[0] ) {
        if ( $api_status != $post_hq_status[0] ) {
          update_post_meta($existing_posts[0]->ID, 'event_status', $api_status);
        }
      }

      // If there are no matching events in wordpress => Create a new one
      if ( count($existing_posts) < 1 ) {
        //Pull the details of the individual event
        $request_event = wp_remote_get( 'https://api.xxxxxxxx' . $api_id );
        if( is_wp_error( $request_event ) ) {
          echo "wrong request";
          return false; // Bail early
        } 
     
        $data_event = getContent( $request_event );
        $event_category_description = $data_event['event']['category_description'];

        add_event($event['name'], $event['id'], $event['uri'], $event['start_date'], $event['status'], $event['entries_close_date'], $event['type'], $event_category_description );
      } // end of the if the count if statement

        
    } // end of foreach event
  } // end of looping over data_events

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...