私はディレクトリサイトを構築しており、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);
がPHPとしてタグをしたいし、適切にコードをフォーマットする可能性があります。 – jn1kk
はタグを付けますが、このサイトでは「適切なフォーマット」が難しいので、わかりやすくまとめました。 – Dains