[wp-hackers] Loops and Cloning

Jess Planck jess at funroe.net
Fri Oct 31 21:27:34 GMT 2008


I'm sharing because I totally ripped this off from drupal and I feel  
guilty for it :)

The problem I had was a multiple loop in a template for a theme that  
displayed posts by a custom field category. Everything worked fine but  
I forgot that I not only have to clone or duplicate the orginal $post,  
but also the $wp_query. I only noticed it because the page menus with  
wp_list_pages lost the current_page CSS classes. Buried in  
wp_list_pages is a global $wp_query.

Moving the original code from an old php4 box to a php5 box really  
hated me. So I dug around and found a nice compatibility wrapper  
function for cloning and duplication of objects from drupal. Don't  
feed it anything but an "object" though...

Happy Halloween!
Jess

-- Helper function to clone objects for php4 and php5

function wp_clone($object) {
   return version_compare(phpversion(), '5.0') < 0 ? $object :  
clone($object);
}

--- A snip of theme template code --

<?php
if ( ( $page_category_name =  
get_post_custom_values( 'page_category' ) ) ) {
	
	// duplicate post and wp_query for later recovery	
	$temp_wp_query = wp_clone( $wp_query );
	$temp_post = wp_clone( $post );

	// set $more to 0 for more links
	global $more;
	$more = 0;
	
	query_posts( 'category_name=' . $page_category_name[0] .  
'&showposts=' . get_option('posts_per_page') );
?>

do loop stuff...

<?php
	// recover post and wp_query
	$post = wp_clone( $temp_post );
	$wp_query = wp_clone( $temp_wp_query );

} // end if ( ( $page_category_option =  
get_post_custom_values( 'page_category' ) ) )
?>


[  :P  ]  jess planck  -  http://funroe.net



More information about the wp-hackers mailing list