Skip to content

Instantly share code, notes, and snippets.

@seredniy
Created August 1, 2016 10:15
Show Gist options
  • Save seredniy/7fb83290566c56ed4c0c5dc669e06435 to your computer and use it in GitHub Desktop.
Save seredniy/7fb83290566c56ed4c0c5dc669e06435 to your computer and use it in GitHub Desktop.
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();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment