WP-JSON - Multi-endpoint - Повторная ошибка Foreach - PullRequest
0 голосов
/ 08 июля 2019

В настоящее время я пытаюсь создать систему с несколькими оконечными точками для WP-JSON между 4 веб-сайтами, и в большинстве случаев это нормально, однако иногда, когда моя страница выполняет этот процесс, она возвращает ошибку Foreach. цикл, в котором говорится: «Предупреждение: введен неверный аргумент для foreach () в ...»

Я пробовал альтернативные методы слияния массивов перед извлечением тела с помощью wp_remote_retrieve_body, но такой удачи не было. Я искал различные решения Google на нескольких конечных точках, используя php, но ничего из того, что я нашел, похоже, не работает эффективно

<code><?php 

    function limit_text($text, $limit) {
      if (str_word_count($text, 0) > $limit) {
          $words = str_word_count($text, 2);
          $pos = array_keys($words);
          $text = substr($text, 0, $pos[$limit]) . '...';
      }
      return $text;
    }

    /* BASE DETAILS FOR SEARCH*/
    $b_url = get_site_url(); // Base URL
    $posts_merged;

    $args = array(
        'sslverify' => false
    );

    if($_GET['search'] or !empty($_GET['search'])){
        $filter_query = '?search='.$_GET['search']; 
    }else{
        $filter_query = '';
    }

    $post_url_collective = array(
        $b_url.'/wp-json/wp/v2/posts'.$filter_query, // Main Site
        $b_url.'/db/wp-json/wp/v2/posts'.$filter_query, // DB Site
        $b_url.'/dc/wp-json/wp/v2/posts'.$filter_query, // DC Site
        $b_url.'/fw/wp-json/wp/v2/posts'.$filter_query // FW Site
    );

    $post_response = wp_remote_get($post_url_collective[0], $args);
    $post_response = wp_remote_retrieve_body($post_response);
    $post_response = json_decode($post_response);

    $post_response_two = wp_remote_get($post_url_collective[1], $args);
    $post_response_two = wp_remote_retrieve_body($post_response_two);
    $post_response_two = json_decode($post_response_two);

    $post_response_three = wp_remote_get($post_url_collective[2], $args);
    $post_response_three = wp_remote_retrieve_body($post_response_three);
    $post_response_three = json_decode($post_response_three);

    $post_response_four = wp_remote_get($post_url_collective[3], $args);
    $post_response_four = wp_remote_retrieve_body($post_response_four);
    $post_response_four = json_decode($post_response_four);


    $posts_merged =  array_merge( $post_response, $post_response_two, $post_response_three, $post_response_four );

?>

<div class="container multi-search-wrap">

    <div class="row" style="margin-bottom: 0px">
        <div class="col sm12 m12 l12">
            <form class="multi-search-form" method="GET">
                <div class="row" style="margin-bottom: 0px">
                    <div class="col sm8 m9 l10">
                        <input type="text" name="search" value="<?php echo ( isset( $_GET['search'] ) ? $_GET['search'] : '' ); ?>" placeholder="Search for..."/>
                    </div>
                    <div class="col sm4 m3 l2">
                        <input type="submit" value="Search" />
                    </div>
                </div>
            </form>
        </div>
    </div>

    <div class="row" style="background: #eeeeee;padding: 10px;font-size: 12px;margin:0px 0px 20px 0px">
        <div class="col sm12 m12 l12">
            We've found <strong><?php echo count($posts_merged);?></strong> results for <?php echo $_GET['search'];?>...
        </div>
    </div>

    <div class="row">

        <?php

            // Post Loop
            foreach($posts_merged as $get_post) {

                $image_url = $b_url.'/wp-json/wp/v2/media/'.$get_post->featured_media;
                $image_response = wp_remote_get($image_url, $args);
                $image_response = json_decode($image_response['body']);
                //echo'<pre>';print_r($image_response);echo'
'; echo '
'; echo '
'; echo '
'; если (! пусто ($ image_response-> media_details-> sizes-> thumbnail-> SOURCE_URL)) { echo 'image id. '" src = "'. $ image_response-> media_details-> sizes-> thumbnail-> source_url. '" width = "auto">
' ; } Еще { echo 'image id. '" src = "'. get_template_directory_uri (). '/ images / post-placeholder.jpg" width = "auto">
'; } echo '
'; echo '
'; echo 'link.'">'; echo '

'. $ get_post-> title-> rendered. '

'; echo '
'; echo '

'. limit_text ($ get_post-> excerpt-> render, 30). '

'; echo '
'; echo '
'; echo '
'; } ?>

Я хотел бы улучшить скорость загрузки запросов, но самая важная часть - это устранение этой случайной ошибки Foreach.

Любая помощь будет принята с благодарностью

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