В настоящее время я пытаюсь создать систему с несколькими оконечными точками для 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 '

id. '" src = "'. $ image_response-> media_details-> sizes-> thumbnail-> source_url. '" width = "auto">
' ;
} Еще {
echo '

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.
Любая помощь будет принята с благодарностью