treehouse : what would you like to learn today?
Web Design Web Development iOS Development

[Solved] Function works everywhere except home page

  • I have a function that pulls in a custom post_type (events) and shows the two upcoming events. It works fine when I pull in the function in a post or page's sidebar. When I use it on the home page (the one place I need it work at) - it doesn't work correctly.

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


    If I simplify it on the homepage:

    <?php
    $todaysDate = date('Y/m/d');
    $event_widget_query = new WP_Query('post_type=events&posts_per_page=2');
    ?>


    It just pulls in the two most recent posts - not the two most recent events. What can I do so that this function works on the home page? Is it a multiple loop issue? I've tried rewind_posts and wp_reset_query.

    I've also posted more information on stack overflow.
  • This has been an issue I've been struggling with for weeks, so anyone who can take a look at this would be great. I'm simply at a loss of what else to try at this point.
  • I thought I had found a solution for you here: http://justintadlock.com/archives/2010/02/02/showing-custom-post-types-on-your-home-blog-page

    BUT I was wrong!! I cannot fathom why the home page would alter the query code. I see you have tried to do the same thing with 'query_posts()' (practically the same as 'WP_query'). Try to echo out the query string, before and after you create your query - just to make sure that your query is not being modified. ('echo $query_string')
  • Thanks for looking into it. There are two sidebars (sidebar.php and sidebar-home.php). For testing purposes, I have them both calling the function. It only works on posts and pages. If I change it so that home.php calls in the normal sidebar (instead of sidebar-home) - it doesn't work. If I change single.php so it calls in sidebar-home (instead of the normal sidebar) - it doesn't work. So, my thought is something must be affecting it inside of home.php. I tried setting it up so the very first thing that home.php does is call in the sidebar. It still doesn't work.

    Home.php is simply running a <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?> loop.

    I might be misunderstanding you, but I tried putting in <?php echo $query_string;?> before and after the wp_query and nothing gets outputted.
  • oh... the $query_string trick was from Chris's 'The Wordpress Loop'.

    I'm none the wiser as to why it's broken...
  • Thanks for looking into it. I'm glad I'm not crazy in thinking everything looks right. There is some sort of conflict with home.php and I just don't know what it is.
  • I actually got it to work using get_posts.
  • Code that solved the problem posted below:

    <?php
    function eventsWidget() {?>
    <div class="uwf_widget">
    <h3 class="events"><span>Featured Events</span></h3>
    <ul>
    <?php
    global $post;
    $todaysDate = date('Y/m/d');
    $event_args = array('post_type' => 'events',
    'numberposts' => 2,
    'meta_key' => 'event_date',
    'post_status' => 'publish',
    'meta_compare' => '>=',
    'meta_value' => $todaysDate,
    'orderby' => 'meta_value',
    'order'=> 'ASC');
    $event_widget_query = get_posts( $event_args );
    foreach ($event_widget_query as $post) : setup_postdata($event_widget_query); ?>
    <?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; ?> &nbsp;&raquo;</a></li>
    <?php endforeach; ?>
    </ul>
    <p class="more"><a href="/about-us/events/">more events &raquo;</a></p>
    </div>
    <?php wp_reset_query(); ?>
    <?php } ?>
  • Thanks for the bonus! I just submitted a review for Tradewinds Cruise Club - BVI's. It's an article that I wrote and will be published in December 2012. senior care