У меня есть custom post type, встроенный в WordPress, с именем Knowledge.
Knowledge в настоящее время имеет всего 4 сообщения. По умолчанию отображаются 3 сообщения, затем при загрузке большего количества кликов я хочу, чтобы показывалась последняя, 4-я карточка блога.
Однако в настоящее время мой запрос 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; ?>loadmore.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.info("success");
} else {
button.remove();
}
},
error : function(error){
button.text( 'Load More' );
console.table("Data: " + data);
console.table("loadmore_params: " + loadmore_params);
// console.info(error);
}
});
}
});
});Следующие два console.info выплевывают [object Object]
console.table("Data: " + data);console.table("loadmore_params: " + loadmore_params);Не уверены, где что-то идет не так?
Редактировать:
console.info("Data:", data) и console.info("loadmore_params:", loadmore_params); результаты ниже:
При дальнейшем осмотре при попытке получить доступ к URL-адресу /wp-admin/admin-ajax.php я вижу 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")
) );И actions:
add_action('wp_ajax_loadmore', 'pagination_ajax_handler'); // wp_ajax_{action}
add_action('wp_ajax_nopriv_loadmore', 'pagination_ajax_handler'); // wp_ajax_nopriv_{action}Спасибо @CBroe - удалось заставить логи работать, чтобы увидеть, что он выводит. Обновите детали в вопросе для справки.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


[object Object]- это то, что вы получаете, когда вы сила объект в строковом контексте - что вы делаете здесь, объединяя их со строковым значением. Вместоconsole.table("Data: " + data)используйтеconsole.table("Data:", data)- тогда вы сможете проверить, что на самом деле содержалось вdata.