@freeman0204

Как сделать отдельную загрузку постов на ajax в табах?

С подгрузкой постов на ajax мне в целом понятно, вот, а если есть, например 3 таба и в каждом табе посты и своя кнопка загрузить еще, как мне отделить эти табы в плане загрузки новых постов? Вывести в каждом табе айди и передать еще в ajax js? Пока не понимаю, как именно это сделать?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
В ajax передаете нужный вам параметр, например post_type

jQuery(document).ready(function ($) {

	$('a.tab').on('click', function (e) {

		$.ajax({
			type: 'POST',
			url: wpz_ajax_obj.ajaxurl, // Путь к файлу admin-ajax.php
			data: {
				'action': 'wpz_ajax_request', // Событие к которому будем обращаться
				'post_type': $(e.currentTarget).attr('data-type'), // Передаём тип записи
				'security': wplb_ajax_obj.nonce, // Используем nonce для защиты
			}
		})

		e.preventDefault();

	});
});


В php используете указанный параметр для запроса постов и возвращаете их функцией wp_send_json_success()

function wpz_ajax_request() {

	if ( isset( $_POST ) ) {

		// Проверяем nonce, а в случае если что-то пошло не так, то прерываем выполнение функции
		if ( !wp_verify_nonce( $_POST['security'], 'wpz-nonce' ) ) {
			wp_die( 'Базовая защита не пройдена' );
		}

		// заказываем посты из базы
		if ( isset( $_POST['post_type'] ) ) {

			$args = array(
				'post_type' => sanitize_text_field( $_POST['post_type'] ),
				'posts_per_page' => 1,
			);

			$post_query = new WP_Query( $args );

			if ( $post_query ) {
				# если записи есть, возвращаем в wp_send_json_success() html-постов
			} else {
				# если записей нет, возвращаем в wp_send_json_success() информацию о том, что их нет
			}

		} else {
			wp_send_json_error();
		}

	} // end if isset( $_POST )

	wp_die();
}


PS. Желательно заранее проверять, что еще есть посты для загрузки, в противном случае скрывать кнопку их загрузки
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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