Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

im sure i must be doing something wrong and would really appreciate a little help.

I am trying to loop through all of my Sub Dir "Multisite" blogs using switch_to_blog, below:

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);

It does work (kinda), it moves to the next blog (id = 2) and is retrieving posts, but goes no further and does not retrieve the main blog posts (id = 1).

I am a self proclaimed php noob, but really enjoy learning and i think im doing quite well lol

Please if someone could help me out?

Regards Rory

UPDATE I am trying to create a loop that i can pass into an already declared query:

// create query the portfolio (pass it to $wp_query)
        $portfolio_query = new WP_Query( $portfolio );
share|improve this question
add comment

1 Answer

No, it's retrieving the posts just fine, but you're not storing them anywhere. Here's your code again, with line-by-line documentation:

// 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);

The trick is that, in every loop of your foreach statement, you're overwriting the contents of $globalquery. It will only ever have a set of posts from the last blog in your network.

Instead, set up a container before your foreach and merge your $globalquery results into it:

$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();
}
share|improve this answer
    
Thanks for the reply, i assume that i then need to merge both the '$globalcontainer' & '$portfolio' arrays? Looking at the code it does make sense and i thank you for helpin me on my learning path :) –  Rory Rothon Jun 16 '12 at 9:41
    
Im not quite there yet lol. Using var_dump i can infact see that i am retrieving posts. Now the $portfolio query is this: '// create query the portfolio (pass it to $wp_query) $portfolio_query = new WP_Query( $portfolio );' I am somehow wanting to merge the '$globalquery' or '$globalcontainer' with the portfolio query. So far i am having little luck, could you point me in the right direction? probably something silly like a global variable knowing me lol Thanks again for your help. –  Rory Rothon Jun 16 '12 at 11:16
    
Please edit your question to add updates, progress, and code changes. It's easier to read code when it's up there rather than in a comment. –  EAMann Jun 16 '12 at 14:23
    
Sorry about that –  Rory Rothon Jun 16 '12 at 14:31
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.