Php Ajax类后加载器
我有一个可以工作的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');
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');