Как можно исправить ошибку, которая возникает при нажатии на кнопку "Показать еще" на следующей вкладке после переключения на вкладку ajax-label и использования различных значений term для каждой вкладки?
Для настройки кнопки "Показать еще" на сайте WordPress с использованием AJAX, вам потребуется создать функцию обработчик для AJAX запросов, которая будет загружать дополнительные записи при нажатии на кнопку. Пример кода для создания кнопки "Показать еще" с использованием AJAX: 1. Создайте скрипт JavaScript для отправки AJAX запроса: ```javascript jQuery(function($) { var page = 1; var term = 'your_term_here'; // Замените на нужное значение $('#show-more-button').on('click', function() { page++; var data = { action: 'load_more_posts', page: page, term: term }; $.post(ajaxurl, data, function(response) { $('#post-container').append(response); }); }); }); ``` 2. Создайте PHP функцию обработчик для AJAX запросов в файле functions.php вашей темы: ```php function load_more_posts() { $page = $_POST['page']; $term = $_POST['term']; $args = array( 'post_type' => 'post', 'posts_per_page' => 5, 'paged' => $page, 'tax_query' => array( array( 'taxonomy' => 'your_taxonomy_here', 'field' => 'slug', 'terms' => $term ) ) ); $posts = new WP_Query($args); if ($posts->have_posts()) { while ($posts->have_posts()) { $posts->the_post(); // Выводите содержимое записей } } wp_die(); } add_action('wp_ajax_load_more_posts', 'load_more_posts'); add_action('wp_ajax_nopriv_load_more_posts', 'load_more_posts'); ``` 3. Добавьте кнопку "Показать еще" на вашу страницу WordPress: ```html <button id="show-more-button">Показать еще</button> <div id="post-container"> <!-- Сюда будут добавляться дополнительные записи --> </div> ``` Чтобы исправить ошибку, которая возникает при нажатии на кнопку "Показать еще" на следующей вкладке после переключения на вкладку ajax-label и использовании различных значений term для каждой вкладки, вы можете добавить дополнительный атрибут data-term к кнопке "Показать еще" и передавать его значение в AJAX запросе. Таким образом, AJAX запрос будет использовать правильное значение term для каждой вкладки. Например: ```html <button class="show-more-button" data-term="term1">Показать еще</button> ``` И в JavaScript скрипте измените переменную term на: ```javascript var term = $(this).data('term'); ``` Таким образом, при клике на кнопку "Показать еще" на каждой вкладке будет использоваться соответствующее значение term.
Решил проблему:
Нужно добавить атрибут для кнопки до AJAX запроса. Обновленный код:
const container = $("#works-response"); let paged = 1; let maxPages = 1; $(".ajax-label").click(function (e) { e.preventDefault(); let term = $(this).data("term"); if ($(this).hasClass("ajax-label")) { $(this).siblings().removeClass("active"); $(this).addClass("active"); } $("#loadmore-works button").data("term", term); console.log("PAGED до запроса", paged); $.ajax({ url: perviy_ajax_obj.ajaxurl, type: "POST", data: { action: "get_works", term: term, // paged: 0, }, success: function (response) { if (response.message) { console.log(response.message); } else { console.log(response); response.posts.forEach(function (post) { console.log(post); container.html(""); container.append(post.html); }); paged = 1; console.log("PAGED ПОСЛЕ запроса", paged); maxPages = response.max_pages; $("#loadmore-works button").attr("data-term", term); $("#loadmore-works button").removeAttr("data-max_pages"); $("#loadmore-works button").removeAttr("data-paged"); if (paged == maxPages) { $("#loadmore-works button").addClass("none"); } else { $("#loadmore-works button").removeClass("none"); } $(".works__images").twentytwenty(); } }, }); }); $(document).on("click", "#loadmore-works button", function (e) { e.preventDefault(); let term = $(this).data("term"); paged = 1; $.ajax({ url: perviy_ajax_obj.ajaxurl, type: "POST", data: { action: "get_works", term: term, paged: paged, }, success: function (response) { if (response.message) { console.log(response.message); } else { console.log(response); response.posts.forEach(function (post) { console.log(post); container.append(post.html); }); maxPages = response.max_pages; paged++; console.log("PAGED после запроса показать еще", paged); if (paged == maxPages) { $("#loadmore-works button").addClass("none"); } else { $("#loadmore-works button").removeClass("none"); } $(".works__images").twentytwenty(); } }, }); });