简体   繁体   中英

WordPress have_posts() not working inside Functions.php

I want to ajaxify TwentyThirteen WordPress template and I have a function in functions.php

function prefix_ajax_add_foobar() {
    echo("add_foobar is trigered <br/>");
    if ( have_posts() ) { echo ("have posts <br/>");
        while ( have_posts() ) {
            the_post(); echo ("the_post() <br/>");
            the_ID(); echo ("the_ID() <br/>");
        } 
    }
    die("The End");
}

But I only see those results:

add_foobar is trigered 
The End

So can you give me an idea why those functions are not working?

That's because you have to make your own query in that function, Ajax isn't aware of your current loop. And you'd be better using get_posts() , see When should you use WP_Query vs query_posts() vs get_posts()?

It'll be something like:

$my_query = get_posts( $arguments );
if( $my_query ) {
    foreach( $my_query as $p ) {
        echo $p->ID . $p->post_title;
    }
}

have_posts() will return TRUE if it has any results to loop over and FALSE otherwise. It does seem that it is currently not getting any results. Have you tried calling query_posts($args) ? Call it before the have_posts() Example: query_posts( 'posts_per_page=5' ); to show your 5 latest posts

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM