Wordpress MU: get posts/pages from different blogs under same installation

How can you create a loop to get posts/pages from different blogs under same MU installation?

1) you can use switch_to_blog function
http://codex.wordpress.org/WPMU_Functions/switch_to_blog

2) create wordpress loop (this will get posts from the blog you just switched)

3) do whatever you want with data

4) restore current blog you are on so everything runs after this code go to the blog it supposed to
http://codex.wordpress.org/WPMU_Functions/restore_current_blog

switch_to_blog(1); // we are switching to blog id # 1
query_posts('showposts=5'); //this would get top 5 posts from blog id # 1. you can change the loop to the get posts from x category
if (have_posts()) :
while (have_posts()) : the_post();
//do whatever you want with data here...
endwhile;
endif;
restore_current_blog();

Wordpress MU Site Upgrade Bug: Your server may not be able to connect to blogs running on it

I was upgrading mu site to 2.8.4. I went to Site Admin -> Upgrade and hit Upgrade Site button. It worked for first 25 – 30 blogs and then died with message

Warning! Problem upgrading . Your server may not be able to connect to blogs running on it.
Error message: 200: Operation timed out after 3 seconds with 0 bytes received

This is what I did to fix my problem

I opened wp-admin/wpmu-upgrade-site.php and wp-includes/http.php

function &_getTransport( $args = array() ) {

on line number 94 of wp-includes/http.php, wordpress tests different http request methods exist on your server during upgrade.

1st test was the culprit on my server which uses http_request method built into PHP. I guess this method was taking long time to resolve DNS and so it was timing out.

if ( true === WP_Http_ExtHttp::test($args) ) {
$working_transport['exthttp'] = new WP_Http_ExtHttp();
$blocking_transport[] = &$working_transport['exthttp'];
}

I did comment out this test and let Wordpress start with next one.

if ( true === WP_Http_Curl::test($args) ) {
$working_transport['curl'] = new WP_Http_Curl();
$blocking_transport[] = &$working_transport['curl'];
}

And guess what? All 150 blogs were updated in a few minutes without any problem.

If even curl does not work for you, you can comment it out and move on to the next until WP upgrade site works for you.

Good Luck!

Comments Pagination – Wordpress – Bug Fixed!

Actually, I did not create a plugin but I wrote a code snippet that did this job for me.

Add these lines to comments.php in your active theme folder.

$comments_per_page = 5;
global $post;
$total = $post->comment_count;
if($total > 0) {
$apage=isset($_GET['apage']) ? intval($_GET['apage']) : 1;
$comments=array_slice($comments, intval(($apage-1)*$comments_per_page),intval($comments_per_page));
}

Insert this code right after if ($comments) statement

$commentCounter = (($apage-1)*$comments_per_page);
$from_page = $commentCounter+1;
if($apage == 1) {
$to_page = $comments_per_page;
if($total < $to_page) {
$to_page = $total;
}
}
else {
$to_page = $from_page + $comments_per_page - 1;
if($to_page > $total) {
$to_page = $total;
}
}

Insert this line where you want page links to appear in comments.php.

<?php echo paginate_links( array(
'base' => add_query_arg( 'apage', '%#%#comments' ),
'format' => '',
'total' => ceil($total / intval($comments_per_page)),
'current' => $apage
));

I think this is it. It should work. Give it a try and share your feedback via comments.