I tried the code below with the wp_reset_postdata() it seemed to work great, 
until I put a second get_posts loop in the page, after that the 2nd one always 
showed what the first one did despite me change the post_type in the query.

This is the actual code I was using.

$posts = '';

// Set options for post query
$post_args = array(
        'orderby'       =>  $sort_column,
        'order'         =>  $sort_order,
        'numberposts'   =>  $limit,
        'post_type'     =>  'post',
);

wp_reset_postdata();

$theposts = get_posts($post_args);

if (count($theposts)>  0) {
        foreach($theposts as $post) {
                setup_postdata($post);

                $posts .= '<li><a href=' . get_permalink() . ' title="' . sprintf(esc_attr__('Permalink to 
%s'), the_title_attribute('echo=0')) . '" rel="bookmark">' . get_the_title() .'</a></li>';
        }

        $posts_header = (empty($posts_header)) ? __('Posts') : $posts_header;
        $posts = '<div id="wp-realtime-sitemap-posts"><h3>' . $posts_header .'</h3><ul>' . 
$posts .'</ul></div>';
}

$post_types = get_post_types(array('public' =>  true, '_builtin' =>  false), 
'objects');

foreach ($post_types as $post_type) {
        $custom_post_type_posts = '';

        // Set options for query
        $post_args = array(
                'orderby'       =>  $sort_column,
                'order'         =>  $sort_order,
                'numberposts'   =>  $limit,
                'post_type'     =>  $post_type->name,
        );

        wp_reset_postdata();

        $theposts = get_posts($post_args);

        if (count($theposts)>  0) {
                foreach($theposts as $post) {
                        setup_postdata($post);

                        $custom_post_type_posts .= '<li><a href=' . get_permalink() . ' title="' . 
sprintf(esc_attr__('Permalink to %s'), the_title_attribute('echo=0')) . '" rel="bookmark">' . 
get_the_title() .'</a></li>';
                }

                $custom_post_types[$post_type->name] = '<div id="wp-realtime-sitemap-' . strtolower($post_type->name) . 
'"><h3>' . $post_type->labels->name . '</h3><ul>' . $custom_post_type_posts .'</ul></div>';
        }
}

wp_reset_postdata();

------------------------------

Message: 2
Date: Sun, 30 Jan 2011 17:04:38 -0700
From:[email protected]
Subject: Re: [wp-testers] possible bug in get_posts
To:[email protected]
Message-ID:
        <[email protected]>
Content-Type: text/plain;charset=iso-8859-1

I don't think that there is a bug in core. Your code looks a bit off to me
though. Please try the following:

$movies = get_posts( array(
        'numberposts' =>  '-1',
        'post_type'   =>  'movies',
        ) );

/* Backup global $post object !IMPORTANT! */
$_post_backup = $post;

foreach( (array) $movies as $post ) {
        setup_postdata( $post );
        print '<li><a href=' . get_permalink() . ' title="' .
sprintf(esc_attr__('Permalink to %s'), the_title_attribute('echo=0')) .
'" rel="bookmark">' . get_the_title() .'</a></li>';
}

/* Restore global $post object !IMPORTANT! */
$post = $_post_backup;

Best wishes,
-Mike

_______________________________________________
wp-testers mailing list
[email protected]
http://lists.automattic.com/mailman/listinfo/wp-testers

Reply via email to