paulfcdd
@paulfcdd
PHP/Sf/WEB developer

Почему в Wordpress периодически не работает AJAX?

Добрый день.
Я создал в вордпрессе кастомный тип постов, для этого кастомного типа постов написал пагинатор на аяксе. Код пагинатора в файле functions.php выглядит следующим образом:

add_action('wp_ajax_paginate_action', 'paginator_callback');

function paginator_callback()
{

    $args = [
        'posts_per_page' => $_POST['limit'],
        'offset' => $_POST['offset'],
        'category' => '',
        'category_name' => '',
        'orderby' => 'date',
        'order' => 'DESC',
        'include' => '',
        'exclude' => '',
        'meta_key' => '',
        'meta_value' => '',
        'post_type' => 'blog_post',
        'post_mime_type' => '',
        'post_parent' => '',
        'author' => '',
        'author_name' => '',
        'post_status' => 'publish',
        'suppress_filters' => true
    ];

    $posts = get_posts($args);
    print_r(renderView($posts)); //функция кастомная, отвечающая за вывод загруженных постов в HTML
    wp_die();
}

function renderView($posts)
{
    $view = '';
    foreach ($posts as $post) {
        $postMeta = get_post_meta($post->ID);
        $timeToRead = $postMeta['time_to_read'][0];
        $image_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'single-post-thumbnail');
        $single_post = '
            <div class=" vc_col-lg-4 vc_col-md-4 vc_col-sm-6 vc_col-xs-12 blog-post-masonry masonry-block post-offset norebro-card-wrapper grid-item" data-lazy-item="true">
                <div class="blog-grid grid-1 boxed">
                    <header>
                        <a href="https://studiosoftware.com/blog/billing-model-choose-company-discuss-fp-tm-fbsc/">
                            <img src="' . $image_src[0] . '" alt="' . null . '">
                        </a>
                        ' . getPostTags($post) . '
                    </header>
    
                    <div class="content">
                        <h3>
                            <a href="https://studiosoftware.com/blog/' . $post->post_name . '/">
                                ' . $post->post_title . '			
                             </a>
                        </h3>
                        <p>
                            ' . getPostPreview($post) . '…		
                        </p>
                    </div>
                    
                    <footer>
                        <span class="data">' . getPostDateTime($post) . '</span>
                        <strong>—</strong>
                        <span class="data">' . $timeToRead . ' min. to read</span>
                    </footer>
                </div>
                <div class="clear"></div>
            </div>
        ';

        $view .= $single_post;

    }

    return ' <div class="norebro-masonry" data-lazy-container="true" style="position: relative;">' . $view . '</div>';
}


Писал я его согласно документации с сайта ВП. При этом периодически пагинатор не работает, а в консоли появляется такая ошибка
POST https://my-site.com/wp-admin/admin-ajax.php 400 ()
  • Вопрос задан
  • 701 просмотр
Решения вопроса 1
paulfcdd
@paulfcdd Автор вопроса
PHP/Sf/WEB developer
Решение вопроса оказалось до смешного банальным. Так как аякс-запросы в ВП идут на admin-ajax.php, соответственно, вордпрессовый фаерволл (или что там отвечает за безопасность) позволяет отправлять на сервер запросы только авторизированным пользователям. Чтобы и неавторизированные пользователи могли отправлять запросы на сервер, следует подключить еще один хук:

add_action('wp_ajax_nopriv_paginate_action', 'paginator_callback');


и тогда запросы отправляются без проблем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы