web-dev-qa-db-ja.com

switch_to_blogループを使用した最新の5件の投稿

私は私が何か悪いことをしているに違いないし、本当に少しの助けに感謝するだろうと確信しています。

私は以下のswitch_to_blogを使って私のすべてのSub Dir "Multisite"ブログをループしようとしています:

global $wpdb, $blog_id, $post;
    $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );
    foreach ($blogs as $blog){

        switch_to_blog($blog->blog_id);
        $globalquery = get_posts('numberposts=5&post_type=any');
        restore_current_blog();

    }
    array_merge($globalquery, $portfolio);

それは仕事をし(ちょっと)、それは次のブログ(id = 2)に移動して投稿を検索していますが、それ以上は行かずそしてメインのブログ投稿(id = 1)を検索しません。

私は自己宣言phpのnoobですが、本当に学習を楽しんで、私はimがかなりよく笑っていると思います

誰かが私を手伝ってくれるかもしれませんか?

よろしくロリー

_ update _ 私はすでに宣言されたクエリに渡すことができるループを作成しようとしています:

// create query the portfolio (pass it to $wp_query)
        $portfolio_query = new WP_Query( $portfolio );
3
Rory Rothon

いいえ、投稿は正常に取得されていますが、保存はされていません。ここにあなたのコードが、行ごとのドキュメントと共にあります。

// Set up global variables. Great
global $wpdb, $blog_id, $post;

// Get a list of blogs in your multisite network
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );

// Iterate through your list of blogs
foreach ($blog_ids  as $id){

    // Switch to the next blog in the loop.
    // This will start at $id == 1 because of your ORDER BY statement.
    switch_to_blog($id);

    // Get the 5 latest posts for the blog and store them in the $globalquery variable.
    $globalquery = get_posts('numberposts=5&post_type=any');

    // Switch back to the main blog
    restore_current_blog();
}

// Merge the results of $globalquery with a $portfolio array
array_merge($globalquery, $portfolio);

トリックは、foreachステートメントのすべてのループで、 上書き $globalqueryの内容です。それはあなたのネットワークの最後のブログからの投稿のセットだけを持つでしょう。

代わりに、foreachの前にコンテナを設定し、$globalqueryの結果をそれにマージしてください。

$globalcontainer = array();
foreach ($blog_ids  as $id){

    switch_to_blog( $id );

    $globalquery = get_posts( 'numberposts=5&post_type=any' );

    $globalcontainer = array_merge( $globalcontainer, $globalquery );

    restore_current_blog();
}
2
EAMann

ブログIDを取得するには、次の方法を使用できます。

$blogs = wp_get_sites ();
$blogs_id = array();
foreach ($blogs as $blog) {
    $blogs_id [] = $blog["blog_id"];
}

の代わりに:

global $wpdb, $blog_id, $post;
$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );
1
Ali Basheer