无法在AJAX调用中使用‘new WP_Query’

时间:2021-09-21 作者:Jakub Karki

我正在尝试为帖子创建类别过滤器。我通常与get_posts 函数,但这次我需要保持分页,这就是为什么我要使用new WP_Query.

我已经成功创建了一个AJAX解决方案,它可以返回帖子并显示出来,但似乎使用new WP_Query 中断AJAX调用。

以下是我的AJAX代码:

(function($){
$(function() {
    $(\'.category-filter .filter a\' ).click( function(e) {
        var category = $(this).data(\'id\');
        var container = $(\'#main\');
        if ( $( \'body\' ).hasClass( \'blog\' ) ) {
            var action = \'get_posts_from_category\';
        } else if( $( \'body\' ).hasClass( \'post-type-archive-event\' ) ) {
            var action = \'get_events_from_category\';
        }
        $(this).closest( \'.category-filter\' ).find( \'.filter\' ).removeClass( \'active\' );
        $(this).parent().addClass( \'active\' );
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: ajax_cat.url,
            dataType: \'html\',
            data: {
                action: action,
                nonce: ajax_cat.nonce,
                category: category,
            },
            success: function( $data ) {
                container.html( $data );
            },
            error: function( error ) {
                console.log( error );
            }
        })
    })
});
})(jQuery);
和php操作:

function get_posts_from_category() {
$category = $_POST[\'category\'];

$args = array(
    \'post_type\' => \'event\',
    \'posts_per_page\' => -1,
);

$myquery = new WP_Query( $args );

if($myquery->have_posts()):
    while($myquery->have_posts()):
        $myquery->the_post();
        the_title();
        echo \'<br>\';
    endwhile;
    wp_reset_query();
endif;

wp_die();
}
add_action( \'wp_ajax_get_posts_from_category\', __NAMESPACE__ . \'\\get_posts_from_category\' );
add_action( \'wp_ajax_nopriv_get_posts_from_category\', __NAMESPACE__ . \'\\get_posts_from_category\' );
尝试了许多变体new WP_Query 这是一个问题。谢谢你的建议。

1 个回复
SO网友:Jakub Karki

为了让可能有类似问题的人明白这一点,查询中找到了所有内容,问题是Wordpress在名称空间文件中查找WP\\u query类,替换为new WP_Query 具有new \\WP_query 解决了此问题:D感谢您的帮助!

相关推荐

WordPress AJAX调用插入数据,但成功响应为假

我试图通过Ajax调用将数据发布到自定义表中,效果很好(在MySQL自定义表中插入了行),但在console.log.这是我的密码。PHPfunction create_link() { global $wpdb; if ( check_ajax_referer( \'create_link\', \'nonce\', false ) == false ) { wp_send_json_error(); }