Я создаю сайт-каталог и застрял на том, чтобы цикл foreach просматривал идентификаторы блога мультисайта.Как видно из комментариев в коде, запрос идентификаторов блога работает нормально, проверки print_r показывают, что массив заполнен, но когда функция достигает первого foreach, цикл каждый раз возвращает один и тот же результат,и print_r для site_blog_id в цикле foreach показывает, что он пуст.Установка site_blog_id вручную в цикле делает остальную часть кода работоспособной, так что это определенно что-то с обработкой массива foreach.
Я очень озадачен, потому что это похоже на многие примеры кода для массива-foreach, которые я видел на сайте разработчика, в том числе на странице документации по запросу.Мне интересно, нужно ли мне что-то делать с переменной site_blog_ids, содержащей массив, чтобы он работал с foreach, но, честно говоря, я застрял.Любая помощь будет оценена!Дэвид
/* get all subsite blog ids */
global $wpdb;
$site_blog_ids = $wpdb->get_results($wpdb->prepare("SELECT blog_id FROM wp_blogs where blog_id > 1"));
print_r( $site_blog_ids );
/* check output - shows "Array ( [0] => stdClass Object ( [blog_id] => 2 ) [1] => stdClass Object ( [blog_id] => 3 ) [2] => stdClass Object ( [blog_id] => 5 ) ) ". Looks fine? */
/* loop to iterate through the ids and display info from each blog */
foreach( $site_blog_ids AS $site_blog_id ) {
print_r( "siteid= ".$site_blog_id."</br>" );
/* check output - this shows $site_blog_id is empty, no value. That's not right, should be each blog ID in turn from the site_blog_ids array. */
$oldblog = $wpdb->set_blog_id( $site_blog_id );
/* sets the system to use the loop blog ID instead of the current one. Since site_blog_id is empty, this doesn't work so the rest of the code uses the current blog, not the intended one. */
global $post;
$first_posts = get_posts('p=1'); //get the first post
foreach ( $first_posts AS $post ) {
setup_postdata();
the_title();
the_excerpt();
the_content();
the_category();
}
}
/* Tell the $wpdb object to go back to using the current site */
$wpdb->set_blog_id( $oldblog );