首页 > 解决方案 > WP-JSON - 多端点 - 再次发生 Foreach 错误

问题描述

我目前正在尝试在 4 个网站之间为 WP-JSON 构建一个多端点系统,并且大多数时候都很好,但是有时当我的页面执行该过程时,它会为 Foreach 循环返回一个错误,说'警告:为 ... 中的 foreach() 提供的参数无效

在使用 wp_remote_retrieve_body 检索正文之前,我尝试了合并数组的替代方法,但没有这样的运气。我已经使用 php 在多个端点上查找了各种谷歌解决方案,但我发现似乎没有什么能做有效的工作

<?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 错误。

任何帮助将不胜感激

标签: phpjsonwordpress

解决方案


推荐阅读