javascript - AJAX 分页未在新帖子中加载(未找到 admin-ajax)
问题描述
我有一个custom post type
内置的 WordPress,名为Knowledge
.
Knowledge
目前总共只有 4 个帖子。默认情况下,显示 3 个帖子,然后在加载更多点击时,我希望显示最后的第四个博客卡。
但是,目前,我的 AJAX 请求没有成功,它给了我/wp-admin/admin-ajax.php 403 (Forbidden)
错误。类似的问题表明它可能与安全插件有关。但是,我已禁用任何与安全相关的插件(Jetpack)并且错误仍然存在。
到目前为止,这是我的方法:
知识列表.php
<?php
global $post;
$args = array(
'post_type' => 'knowledge',
'posts_per_page' => 3,
'post_status' => 'publish',
'orderby' => 'publish_date',
'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()):
while ($query->have_posts()):
$query->the_post();
get_part('templates/snippets/knowledge-card', array(
'heading' => get_the_title() ,
'subheading' => get_the_excerpt() ,
'background' => wp_get_attachment_url(get_post_thumbnail_id($post->ID)) ,
));
endwhile;
wp_reset_postdata(); ?>
<div class="knowledgeListing__loadmore">
<a href="#" id="loadmore" class="button--loadmore" data-type="knowledge" data-max-num-pages="<?php echo $query->max_num_pages; ?>">
<?php echo _e('Load More', 'theme'); ?>
</a>
</div>
<?php
endif; ?>
加载更多.js
jQuery(function($){
$(document).ready(function(){
$("#loadmore").on('click', function (e) {
e.preventDefault();
var btn = $(this);
showNextItems(btn);
});
function showNextItems(btn) {
var max_num_pages = btn.data('max-num-pages');
var post_type = btn.data('type');
var button = btn,
data = {
'action':'loadmore',
'query': loadmore_params.posts,
'page' : loadmore_params.current_page,
// 'security' : loadmore_params.security,
// 'max_num_pages' : max_num_pages,
// 'post_type' : post_type
};
$.ajax({
url : loadmore_params.ajaxurl,
data : data,
type : 'POST',
beforeSend : function ( xhr ) {
button.text('Loading...');
},
success : function( data ){
if( data ) {
button.text( 'Load More' ).prev().before(data);
loadmore_params.current_page++;
$('.knowledgeListing__wrapper').find('.knowledgeCard').last().after( data );
if ( loadmore_params.current_page == max_num_pages ){
button.remove();
}
console.log("success");
} else {
button.remove();
}
},
error : function(error){
button.text( 'Load More' );
console.table("Data: " + data);
console.table("loadmore_params: " + loadmore_params);
// console.log(error);
}
});
}
});
});
下面两个console.log
的吐槽[object Object]
console.table("Data: " + data);
console.table("loadmore_params: " + loadmore_params);
不确定哪里出了问题?
编辑:
console.log("Data:", data)
和console.log("loadmore_params:", loadmore_params);
下面的结果:
在进一步检查中,当我尝试访问该/wp-admin/admin-ajax.php
url 时,我看到一个0
. 在线搜索时,建议使用die()
. 但是,当我添加die()
到末尾时knowledge-listing.php
,它仍然显示一个0
.
这是我的本地化脚本供参考:
global $wp_query;
wp_localize_script( 'theme', 'loadmore_params', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'posts' => json_encode( $wp_query->query_vars ),
'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,
'max_page' => $wp_query->max_num_pages,
'security' => wp_create_nonce("load_more")
) );
和action
小号:
add_action('wp_ajax_loadmore', 'pagination_ajax_handler'); // wp_ajax_{action}
add_action('wp_ajax_nopriv_loadmore', 'pagination_ajax_handler'); // wp_ajax_nopriv_{action}
解决方案
只是我的 2 美分,但“loadmore”作为动作名称很常见,可能会被其他一些插件/主题功能使用。你真的应该考虑切换到像 wp_ajax_mypluginname_loadmore 这样的命名空间。
也就是说,另一个常见的问题是你执行 add_actions 太晚了,或者在 wp-admin-ajax 做他的事情之前它们永远不会被代码击中。请在代码输入 wp-admin-ajax 之前 100% 地点击 add_actions。要进行快速测试,您可以将这些行(包括函数)移动到子主题 functions.php 文件中
推荐阅读
- java - 获取特定列 JPA,Spring boot
- python - 如何从python中的嵌套字典中提取特定键的值并返回值列表
- python - 如何编写正则表达式从银行存折中提取帐号?
- ios - 来自 iOS 13 应用程序的 Xcode 内存图上约 500 个 NSZombie 警告
- jquery - 无法对齐 UI 工具提示中的部分文本?
- tsql - SQL Server LEN 函数报告错误结果
- javascript - 过滤器数组递归
- python - 函数生成总和为输入数字的数字数组
- jenkins-pipeline - 如何传递 jenkins 的凭据以将 docker 映像推送到我自己的注册表?
- php - php 二维数组排列...;单拼音有多个英文字母