Загрузить записи из нужной рубрики по ajax WordPress

Загрузить записи из нужной рубрики по ajax WordPress

Всем привет! Сегодня я выложу в запись код загрузки записей в WordPress по ajax. Но особенность этого кода заключается в том, что можно передавать категорию, из которой нужно получить записи. Код поставляется "как есть", а значит требует доработки для работы в том или ином окружении.

js

jQuery(function() {
    // main page events
    const startMainEventCategory = jQuery('.main-events__categories-item.active');
    const startCategory = startMainEventCategory.find('.js-main-events-item').data('category');
    const eventsList = jQuery('.js-main-events-list');
    const eventItem = jQuery('.js-main-events-item');
    const eventsLoader = jQuery('.js-main-events-loader');

    loadPosts(startCategory);

    eventItem.on('click', function() {
       const category =  jQuery(this).data('category');

        jQuery(this).parent().addClass('active').siblings().removeClass('active');

        loadPosts(category);
    });

    function loadPosts(category){
        showLoader();

        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            dataType: "html", // add data type
            data: { action : 'get_ajax_posts', category },
            success: function( response ) {
                hideLoader();

                jQuery( '.loading' ).hide('slow'),
                    eventsList.html( response );
            }
        });
    }

    function showLoader() {
        eventsLoader.show();
        eventsList.hide();
    }

    function hideLoader() {
        eventsLoader.hide();
        eventsList.show();
    }
});

funuctions.php

function get_ajax_posts()
{
	$category    = $_POST['category'];
	
    // Query Arguments
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => '99',
        'category_name' => $category,
        'order' => 'DESC',
    );

    // The Query
    $ajaxposts = new WP_Query($args);

    $response = '';

    // The Query
    if ($ajaxposts->have_posts()) {
        while ($ajaxposts->have_posts()) {
            $ajaxposts->the_post();
             $response .= get_template_part('main-single-event');
        }
    } else {
//         $response .= get_template_part('none');
    }

    echo $response;

    exit; // leave ajax call
}

// Fire AJAX action for both logged in and non-logged in users
add_action('wp_ajax_get_ajax_posts', 'get_ajax_posts');
add_action('wp_ajax_nopriv_get_ajax_posts', 'get_ajax_posts');

Также не забываем добавить до js вот такой код в шаблон:

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
05.09.24
Для просмотра сайта обновите браузер.