WordPress主题AJAX Have_Posts()

时间:2012-02-20 作者:Yash

我的目标是通过ajax将blogroll加载到我的主题中。但作为响应,我只能得到0(如果省略die()行,否则会得到一个空白响应)。

这是我的代码:

js ajax:

$.ajax({
    url:"http://domain.com/wp-admin/admin-ajax.php",
    type:\'POST\',
    data:\'action=load_men_blog\',
    //dataType:\'html\',
    //cache: false,
    success: function(html){
        $("#b_contentwrapper").empty();
        $("#b_contentwrapper").append(html);
    }
});
PHP(functions.PHP):

function implement_ajax() {
    while (have_posts()):
      echo "azerty";
    endwhile;
    die();
}
add_action(\'wp_ajax_load_men_blog\', \'implement_ajax\');
add_action(\'wp_ajax_nopriv_load_men_blog\', \'implement_ajax\');
由于我的数据库中有帖子,我希望azerty会被返回。但是,如果我对die()行进行注释,我会收到一个空白响应或0。如果我在while循环外放置任何echo,我会在预期的div中获得echo,这意味着javascript正在工作。

有人能给我指出正确的方向吗?

2 个回复
最合适的回答,由SO网友:Matthew Boynes 整理而成

这里的问题是你没有查询任何帖子。之前have_posts 尝试添加以下内容:,query_posts( \'posts_per_page=5\' );

SO网友:Jared

您好,欢迎来到WPSE。我可以建议一种不同的方法来将AJAX实现到您的主题中,在我看来,它也更容易使用。

基于this article, 你能做的最好的事情就是使用WP的nativeadmin-ajax.php 运行函数的文件。根据您在问题中发布的代码,我得出了以下结论:(我添加了一个nonce和一个“success”变量以更好地控制,您可以看到它是如何在中定义的functions.php, 此外,请根据您的需要进行修改,这是一个示例)

some-js-file.js:

$.post( yourajax.ajaxurl, {

    nonce: yourajax.nonce,
    action: \'load_men_blog\'

}, function( response ) {

    if( response.success === true ) {

        $( "#b_contentwrapper" ).empty().append( response.html );

    } else {

        alert( "There was an error with your request" );

    }

}
functions.php:

add_action( \'wp_ajax_nopriv_load_men_blog\', \'load_men_blog\' );
add_action( \'wp_ajax_load_men_blog\', \'load_men_blog\' );
add_action( \'wp_enqueue_scripts\', \'load_some_scripts\' );

function load_some_scripts() {

    wp_enqueue_script( \'jquery\' );
    wp_enqueue_script( \'json2\' );

    wp_register_script( \'some-js-file\', get_bloginfo( \'template_url\' ) . \'/some-js-file.js\', array( \'jquery\', \'json2\' ) );
    wp_enqueue_script( \'some-js-file\' );
    wp_localize_script( \'some-js-file\', \'yourajax\', array(
        \'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
        \'nonce\' => wp_create_nonce( \'some-js-file-nonce\' )
    ));

}

function load_men_blog() {

    $nonce = $_POST[\'nonce\'];
    if ( !wp_verify_nonce( $nonce, \'some-js-file-nonce\' ) )
        die ( __( \'Busted!\' ) );

    $posts = get_posts( \'fields=ids\' ); // Just gets post IDs, can be removed, added to save time
    $return_str = \'\';
    if( count( $posts ) > 0 ) {

        $success = true;
        foreach( $posts as $a_post ) // For each post in the DB..
            $return_str .= "azerty"; // ..add \'azerty\' to the string to return

    } else {
        $success = false;
    }

    $response = json_encode( array( \'success\' => $success, \'html\' => $return_str ) );

    header( "content-type: application/json" );
    echo $response;
    exit;

}

结束

相关推荐

AJAX请求发送URL而不是数据

我的插件运行时出现了一个非常奇怪的错误。我目前正在开发一个插件,允许用户创建路线和路线的具体日期。日期或多或少是游客可以购买的门票。我正在运行ajax请求来创建和删除日期数据。这些ajax请求的返回是HTML片段,用于更新显示路由可用日期的表。当我创建一个路由时,我会得到正确的HTML,并通过jQquery将其放入表中。然而,当我运行几乎相同的请求从表中删除一行时,我不会得到相同的结果。我没有取回HTML,而是取回了我网站的URL。我到处都找遍了,找不到为什么会发生这种情况。抄本上说,就一个错误而言,我得