WP-JSON-多端点-重新发生Foreach错误

时间:2019-07-08 12:28:05

标签: php json wordpress

我目前正在尝试在4个网站之间构建用于WP-JSON的多端点系统,大多数情况下都很好,但是有时当我的页面执行该过程时,它将为Foreach抛出错误循环,说“警告:为...中的foreach()提供了无效的参数”

在使用wp_remote_retrieve_body检索正文之前,我尝试了合并数组的替代方法,但是没有运气。我已经使用php在多个端点上查找了各种google解决方案,但我发现似乎没有任何事情可以做得有效

<?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'</pre>';

                echo '<div class="col sm12 m6 l6 multi-search-post">';
                    echo '<div class="row">';
                        echo '<div class="col sm12 m3 l4 multi-search-post">';
                            if(!empty($image_response->media_details->sizes->thumbnail->source_url)){
                                echo '<img class="img_'.$get_post->id.'" src="'.$image_response->media_details->sizes->thumbnail->source_url.'" width="auto"><br>';
                            }else{
                                echo '<img class="img_'.$get_post->id.'" src="'.get_template_directory_uri().'/images/post-placeholder.jpg" width="auto"><br>';
                            }
                        echo '</div>';
                        echo '<div class="col sm12 m9 l8 multi-search-post">';
                            echo '<a href="'.$get_post->link.'">';
                                echo '<h3>'.$get_post->title->rendered.'</h3>';
                            echo '</a>';
                            echo '<p>'.limit_text($get_post->excerpt->rendered, 30).'</p>';
                        echo '</div>';
                    echo '</div>';
                echo '</div>';
            }

        ?>

    </div>

</div>

我想提高查询的加载速度,但是最重要的部分是消除这种偶然的Foreach错误。

任何帮助将不胜感激

0 个答案:

没有答案