2012-02-15 5 views
0

私はディレクトリサイトを構築しており、foreachがマルチサイトのブログIDをループするようになっています。コードのコメントから分かるように、ブログIDのクエリは正常に動作しています。print_rチェックでは、配列が埋められていることが示されますが、関数が最初のforeachに到達すると、 foreachループ内のsite_blog_idのprint_rは空であることを示します。ループ内で手動でsite_blog_idを設定すると、残りのコードがうまく動作するため、foreachの配列処理では間違いなく何かが発生します。foreachループで処理する配列の取得に問題がありますか?

これは、私が開発者のサイトで見た配列foreachコードの多くの例と同じように思えるので、私は非常に困惑しています。私はforeachで動作するように配列を保持する変数site_blog_idsで何かをする必要があるのだろうかと思っていますが、率直に言って私は立ち往生しています。 ご協力いただければ幸いです! デビッド

/* 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); 
+0

がPHPとしてタグをしたいし、適切にコードをフォーマットする可能性があります。 – jn1kk

+0

はタグを付けますが、このサイトでは「適切なフォーマット」が難しいので、わかりやすくまとめました。 – Dains

答えて

1

は、以下のことを試してみてください。

/* 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

ty、それはそれです。ループの中にあるものは、値を取得するためにキーを使用する必要があり、どのクエリの例でもキーを参照することはできませんでした。どうもありがとうございました! – Dains

0

print_r("siteid= ".$site_blog_id."</br>"); が正しくありません。

printrセクションに当たって、それは文字列として見ています。

私はあなたがしようとしていたものと思われました:

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

+0

TYギグ、busypeoplesの答えが働いていた。 – Dains

関連する問題