anton-s
8/1/2016 - 10:15 AM

Ajax-подгрузка постов

Ajax-подгрузка постов

<!-- Ссылка для запуска подгрузки постов -->
<a href="#"  data-ajax="<?php echo get_option('siteurl').'/wp-admin/admin-ajax.php'; ?>" data-category="<?php echo get_query_var('cat'); ?>" data-offset="<?php echo get_option('posts_per_page'); ?>" data-perpage="<?php echo get_option('posts_per_page'); ?>" class="more-posts">Загрузить еще</a>

<!-- Скрипт отправки аякса -->

<script>
$('.more-posts').click(function(e) {
  // обезоружим ссылку
  e.preventDefault();

  // Покажем что мы трудимся
  $(this).text('Загружаю игры...');

  // Определим начальные параметры
  var perpage = $(this).data('perpage'), offset = $(this).data('offset'), ajaxurl = $(this).data('ajax'), category = $(this).data('category');

  // Делаем запрос к обработчику
  $.ajax({
  type: 'POST',
  url: ajaxurl,
  data: {
    'action': 'getpost',
    'perpage': perpage,
    'offset': offset,
    'category': category,
  },
  success: function(data){
    // Если меньше постов чем нужно - пишем, что как бы кончились посты
    var countposts = data.split('уникальная часть кода по которой считаем').length -1;

    // Вставим посты
    $('#game-wrap').append(data);

    // Если постов в ответе меньше, чем нужно нам - делаем кнопку неактивной
    if (countposts < perpage) { $('.more-posts').text('Увы, постов больше нет').addClass('nomore');}; 

    // Если постов достаточно 
    if (countposts == perpage) { $('.more-posts').text('Еще посты');};

    // Увеличим офсет на кол-во постов
    var newoffset = offset + perpage;
    $('.more-posts').data('offset', newoffset)
  }
});


});
</script>

<!-- Обработчик запроса -->
<?php
add_action('wp_ajax_nopriv_getpost', 'getpost_callback');
add_action('wp_ajax_getpost', 'getpost_callback');

function getpost_callback() {
	$args = array(); // подготовим массив
	$args['meta_query'] = array('relation' => 'AND'); // отношение между условиями, у нас это "И то И это", можно ИЛИ(OR)

	// Сортировка по просмотрам
	if ($_POST['sortby'] == "views") {
		$args['meta_key'] = 'views';
		$args['orderby'] = 'meta_value';
		$args['order'] = 'DESC';
	}

	// По категории
	if ($_POST['category']!= '') {
		$args['cat'] = $_POST['category'];
	}

	$args['numberposts'] = $_POST['perpage'];


	$args['offset'] = $_POST['offset'];


	//Возвращаем посты
	global $post;  $myposts = get_posts( $args );  foreach( $myposts as $post ){ setup_postdata($post); ?>

	  <!-- ТУТ КОД ВЫВОДА ПОСТОВ В ЦИКЛЕ -->

<?php } wp_die();
}