php - Multiple Loops in WordPress. Second loop not resetting -
i've created custom post type custom fields inside wordpress. created new page template runs through loop , works great. i'm trying add similar loop home page's sidebar doesn't work correctly.
first, working code on own page template.
<h2>upcoming events</h2> <?php $todaysdate = date('y/m/d'); $event_query = new wp_query('post_type=events&posts_per_page=-1&post_status=publish&meta_key=event_date&meta_compare=>=&meta_value=' . $todaysdate . '&orderby=meta_value&order=asc'); ?> <ul id="featured_event_list"> <?php if ($event_query->have_posts()): ?> <?php while ($event_query->have_posts()) : $event_query->the_post(); ?> <li> <h3><?php the_title(); ?></h3> <p> <?php if ( get_post_meta($post->id, 'event_featuring', true) ) : ?> <strong>featuring:</strong> <?php echo get_post_meta($post->id, 'event_featuring', true) ?><br /> <?php endif; ?> <?php if ( get_post_meta($post->id, 'event_date', true) ) : ?> <?php $event_date = get_post_meta($post->id, 'event_date', true); $new_event_date = date("f j, y",strtotime($event_date)); ?> <strong>date:</strong> <?php echo $new_event_date ?> <?php endif; ?> <?php if ( get_post_meta($post->id, 'event_end_date', true) ) : ?> <?php $event_end_date = get_post_meta($post->id, 'event_end_date', true); $new_event_end_date = date("f j, y",strtotime($event_end_date)); ?> - <?php echo $new_event_end_date ?> <?php endif; ?> <br /> <?php if ( get_post_meta($post->id, 'event_time', true) ) : ?> <strong>time:</strong> <?php echo get_post_meta($post->id, 'event_time', true) ?><br /> <?php endif; ?> <?php if ( get_post_meta($post->id, 'event_location', true) ) : ?> <strong>location:</strong> <?php echo get_post_meta($post->id, 'event_location', true) ?> <?php endif; ?> </p> <p><?php the_excerpt(); ?></p> </li> <?php endwhile; ?> <?php else: ?> <li>sorry, no upcoming events.</li> <?php endif; ?> </ul>
that works fine, when put modified version of code widget inside of functions.php, doesn't work:
<?php function eventswidget() { ?> <div class="uwf_widget"> <h3 class="events"><span>featured events</span></h3> <ul> <?php $todaysdate = date('y/m/d'); $event_widget_query = new wp_query('post_type=events&posts_per_page=2&post_status=publish&meta_key=event_date&meta_compare=>=&meta_value=' . $todaysdate . '&orderby=meta_value&order=asc'); ?> <?php if ($event_widget_query->have_posts()) :?> <?php while ($event_widget_query->have_posts()) : $event_widget_query->the_post(); ?> <?php $event_date = get_post_meta($post->id, 'event_date', true); $new_event_date = date("f j",strtotime($event_date)); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php echo $new_event_date; ?> »</a></li> <?php endwhile; else: ?> <li>sorry, no upcoming events.</li> <?php endif; ?> </ul> <p class="more"><a href="/about-us/events/">more events »</a></p> </div> <?php } ?>
now, if put code inside normal sidebar (instead of on homepage) - works fine. so, there wrong multiple loops on home page , sidebar. if simplify widget grabs 2 "events" grab 2 posts (regardless of post_type). i've tried rewind_posts , wp_reset_query, i'm not sure else try?
i have same problem , caused wp_hook 'pre_get_posts'
<?php function custom_get_posts( $query ) { if ( !is_admin() && false == $query->query_vars['suppress_filters'] ) $query->set( 'post_type', array('post', 'events', 'pages') ); return $query; } add_filter( 'pre_get_posts', 'custom_get_posts' ); ?>
to solve problem can remove filter before wp_query , add again after query.
<?php remove_filter( 'pre_get_posts', 'custom_get_posts' ); /* * new wp_query */ add_filter( 'pre_get_posts', 'custom_get_posts' ); ?>
Comments
Post a Comment