WordPress Ajax请求,没有加载正确的类别**

时间:2017-05-03 05:39:42

标签: php ajax wordpress

我正在使用以下内容发出ajax请求,而不是仅返回与特定类别相关的内容,而是返回所有可用的帖子**(在归档/类别页面上运行此更多负载)。我应该在此特定类别页面上加载id为“3”的类别。

非常感谢任何提示或技巧

$('#load-more').click(function (e) {
    e.preventDefault();
    var pageCount = $(this).attr('data-page');
    var nextPage = parseInt($(this).attr('data-page')) + 1;
    var catID = $(this).attr('data-cat');
    console.log(catID);
    if ($(this).hasClass('shake')) {
        (this).removeClass('shake');
    }
    $.ajax({
        dataType: 'JSON',
        url: ajaxurl,
        data: {
            'action': 'more_posts',
            'pageCount': pageCount,
            'cat': catID,
        },
        success: function (data) {
            console.log(data);
            console.log(data.message);
            if (data.message === "nomore") {
                console.log('none');
            } else {
                $('#appended-content').append(data.message);
            }
        },
        complete: function (data) {
            $('#load-more').attr('data-page', nextPage);
            console.log(data);
            console.log(data.message);
        }
    });
});  

如果我手动将它设置为3就可以了,所以如果我不得不假设,我没有纠正在'args'中正确获取和/或设置id

add_action('wp_ajax_more_posts', __NAMESPACE__ . '\\ajax_more_posts');
add_action('wp_ajax_nopriv_more_posts', __NAMESPACE__ . '\\ajax_more_posts');
function ajax_more_posts()
{
    $cat_id = $_POST['cat'];  //not sure if this is actually getting the category
    $paged = $_REQUEST['pageCount'];
    $cat = $_REQUEST['dataCat'];
    ob_start();
    $args = [
        'cat' => $cat_id, //if I set to 3 manually it works
        'posts_per_page' => 4,
        'post_status' => 'publish'
    ];
    if ($paged != "") {
        $args['paged'] = $paged;
    }
    // if($cat != ""){
    //     $args['cat'] = $cat;
    // }
    $moreBlogPosts = new WP_Query($args);
    $html = '';
    if ($moreBlogPosts->have_posts()) {
        while ($moreBlogPosts->have_posts()) : $moreBlogPosts->the_post();
            $id = get_the_ID();
            $cats = get_the_category($id);
            echo '<div class="post-preview">';
            include(locate_template('partials/posts/preview-components/preview-block.php', false, false));
            get_template_part('partials/posts/preview-components/shopstyle-carousel');
            echo '</div>';
        endwhile;
    } else {
        echo "nomore";
    }
    wp_reset_query();
    wp_reset_postdata();
    $message = ob_get_clean();
    echo json_encode(['message' => $message]);
    die();
}

2 个答案:

答案 0 :(得分:2)

如果在这种情况下可以使用$ .post而不是$ .ajax,那将会很好。

var data={
          'action': 'more_posts',
          'pageCount': pageCount,
          'cat': catID,
}
$.post(ajaxurl, data,function(res){
    var json_obj = JSON.parse(res);     
    $('#appended-content').append(json_obj.message);
    //your code here        
});

希望它有所帮助。

答案 1 :(得分:0)

您尚未在Ajax调用中指定该方法。

$.ajax({
    dataType: 'JSON',
    url: targetUrl,
    success: function(data){

    },
    complete: function (data) {

    }
});

因此,默认情况下,请求以GET方式发送。这就是背后的原因。

有两种方法可以解决这个问题。

方法1:在Ajax调用中添加方法

$.ajax({
    dataType: 'JSON',
    url: targetUrl,
    method: 'POST',
    success: function(data){

    },
    complete: function (data) {

    }
});

方法2:更改服务器端脚本以接受GET请求(您可以使用$ _GET或$ _REQUEST)

示例:$ _REQUEST ['cat']或$ _GET ['cat']