Пагинация AJAX не загружается в новых сообщениях (admin-ajax не найден)

У меня есть 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); результаты ниже:

Пагинация AJAX не загружается в новых сообщениях (admin-ajax не найден)

При дальнейшем осмотре при попытке получить доступ к 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}
[object Object] - это то, что вы получаете, когда вы сила объект в строковом контексте - что вы делаете здесь, объединяя их со строковым значением. Вместо console.table("Data: " + data) используйте console.table("Data:", data) - тогда вы сможете проверить, что на самом деле содержалось в data.
CBroe 06.04.2021 14:03

Спасибо @CBroe - удалось заставить логи работать, чтобы увидеть, что он выводит. Обновите детали в вопросе для справки.

Freddy 06.04.2021 15:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
35
0

Другие вопросы по теме