Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Ajax类后加载器_Php_Jquery_Ajax - Fatal编程技术网

Php Ajax类后加载器

Php Ajax类后加载器,php,jquery,ajax,Php,Jquery,Ajax,我有一个可以工作的AJAX后期加载程序,但我无法在分类页面上工作。我做错了什么?我想我没有得到正确的分类 category.php代码: <div id="ajaxCatPosts" class="cat-post-side left small-12 large-9"> <?php while ( have_posts() ) : the_post(); include(__DIR__.'/views/cat-post-thumb.php');

我有一个可以工作的AJAX后期加载程序,但我无法在分类页面上工作。我做错了什么?我想我没有得到正确的分类

category.php
代码:

<div id="ajaxCatPosts" class="cat-post-side left small-12 large-9">
    <?php 
    while ( have_posts() ) : the_post();
       include(__DIR__.'/views/cat-post-thumb.php');
    endwhile;
    ?>
    <div class="load-button">
       <button id="more_cat_posts">Veel uudiseid</button>
    </div>
</div>
function more_post_ajax(){

        $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 16;
        $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;

        header("Content-Type: text/html");

        $args = array(
            'suppress_filters' => true,
            'posts_per_page' => $ppp,
            'paged'    => $page,
        );

        $loop = new WP_Query($args);

        if ($loop -> have_posts()) :  while ($loop -> have_posts()) : $loop -> the_post();

            include(__DIR__.'/views/cat-post-thumb.php');

        endwhile;
        endif;
        wp_reset_postdata();
        die($out);
    }

    add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax');
    add_action('wp_ajax_more_post_ajax', 'more_post_ajax');
下面是
loadmore.js

$(function() {
    var ppp = 16; // Post per page
    var pageNumber = 1;

    function load_posts(){
        pageNumber++;
        var str = '&pageNumber=' + pageNumber + '&ppp' + ppp + '&action=more_post_ajax';
        $.ajax({
            type: "POST",
            dataType: "html",
            url: ajax_posts.ajaxurl,
            data: str,
            success: function(data){
                var $data = $(data);
                if($data.length){
                    $("#ajax-posts").append($data);

                    $("#more_posts").attr("disabled",false);
                } else{
                    $("#more_posts").attr("disabled",true);
                }
            },
            error : function(jqXHR, textStatus, errorThrown) {
                $loader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown);
            }

        });
        return false;
    }

    $('#more_posts').unbind('click');

    $("#more_posts").on("click",function(){ // When btn is pressed.
        $("#more_posts").attr("disabled",true); // Disable the button, temp.
        load_posts();
    });
});

你的问题的答案似乎是正确的

具体来说,在调用
WP\u Query
之前,您需要指定所需的类别。您当前正在此处设置查询:

$args = array(
    'suppress_filters' => true,
    'posts_per_page' => $ppp,
    'paged'    => $page,
);
您需要将其扩展到:

$args = array(
    'category_name' => $category
    'suppress_filters' => true,
    'posts_per_page' => $ppp,
    'paged'    => $page,
);
这意味着您的AJAX调用将需要在JSON中包含您想要的类别(`$category),或者您必须从页面url中提取它。一种方法是:

$args = array(
    'suppress_filters' => true,
    'posts_per_page' => $ppp,
    'paged'    => $page,
);
if (isset($_POST["category"]){
    $args['category_name'] = $_POST["category"];
}
相应地,您需要更新AJAX调用,以获得category元素:

var str = '&pageNumber=' + pageNumber + '&ppp' + ppp + '&action=more_post_ajax' + '&category=milk';

使它能够更动态地与任何分类法或分类法的组合一起工作,这样该解决方案不仅可以在category.php中工作,而且可以在任何其他情况下工作。例如,JS可以将分类术语参数传递给获取PPOT的位置

因此,首先在AJAX调用中,我们需要传递我们希望从何处加载文章的术语,比如说类别名为
milk
。(还可以使POST参数更具可读性)

在PHP代码中

function more_post_ajax(){

    $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 16;
    $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;
    $term = isset($_POST['term']) ? $_POST['term'] : 0;

    header("Content-Type: text/html");

    $args = array(
        'suppress_filters' => true,
        'posts_per_page' => $ppp,
        'paged'    => $page,
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'slug', // Depends whether JS passes you slug or ID of taxonomy term, in our case it is a slug
                'terms'    => array( $term ),
            )
        ),
    );

    $loop = new WP_Query($args);

    if ($loop -> have_posts()) :  while ($loop -> have_posts()) : $loop -> the_post();

        include(__DIR__.'/views/cat-post-thumb.php');

    endwhile;
    endif;
    wp_reset_postdata();
    die();
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax');
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');

您的WP_查询现在已硬编码为从
类别
分类法中搜索,其中帖子的术语与查询的术语相匹配。您可以将其更改为您想要的任何内容,而只有在您的参数中更改
tax\u query
时,您才可以使用
category
分类法。为了更安全,您可能需要首先检查该分类法中是否存在该术语。

什么“不起作用”?你需要明确你的期望和你实际得到的回报。我得到了所有的帖子。但我想有门戈里的帖子。比如,如果im在归档页面milk上,那么它只加载带有类别milk而不是全部的帖子。如何使这个AJAX调用类别元素动态?这取决于这个按钮是什么类别页面?您可能需要用javascript解析url。
function more_post_ajax(){

    $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 16;
    $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;
    $term = isset($_POST['term']) ? $_POST['term'] : 0;

    header("Content-Type: text/html");

    $args = array(
        'suppress_filters' => true,
        'posts_per_page' => $ppp,
        'paged'    => $page,
        'tax_query' => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'slug', // Depends whether JS passes you slug or ID of taxonomy term, in our case it is a slug
                'terms'    => array( $term ),
            )
        ),
    );

    $loop = new WP_Query($args);

    if ($loop -> have_posts()) :  while ($loop -> have_posts()) : $loop -> the_post();

        include(__DIR__.'/views/cat-post-thumb.php');

    endwhile;
    endif;
    wp_reset_postdata();
    die();
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax');
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');