Проблемы с получением массива для обработки циклом foreach - помогите, пожалуйста? - PullRequest
0 голосов
/ 15 февраля 2012

Я создаю сайт-каталог и застрял на том, чтобы цикл 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 );

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Попробуйте следующее:

/* 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->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. */
0 голосов
/ 15 февраля 2012

print_r( "siteid= ".$site_blog_id."</br>" ); неверно.

Когда он попадает в раздел printr, он выглядит как строка.

Я думаю, что вы пытались сделать следующее:

echo "siteid=". print_r($site_blog_id, true) ."</br>";

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