diff --git a/category.php b/category.php index db5a5a8..ad322a1 100644 --- a/category.php +++ b/category.php @@ -11,7 +11,7 @@ $paged = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1; $args = array( 'post_type' => 'post', - 'posts_per_page' => 5, + 'posts_per_page' => 11, 'paged' => $paged, 'category__in' => get_queried_object_id() ); diff --git a/front-page.php b/front-page.php index 23b5134..50f55e0 100644 --- a/front-page.php +++ b/front-page.php @@ -18,6 +18,5 @@ ?> false, 'query' => $query]); ?> - diff --git a/functions.php b/functions.php index a2fe768..f9288ba 100644 --- a/functions.php +++ b/functions.php @@ -244,30 +244,43 @@ function custom_pagination($query = null) echo ''; } -function my_theme_scripts() -{ - wp_enqueue_script('my-load-more', get_template_directory_uri() . '/js/load-more.js', array('jquery'), null, true); +function my_theme_scripts() { + + if (is_front_page() || (is_category() && !is_paged())) { + wp_enqueue_script('my-load-more', get_template_directory_uri() . '/js/load-main-scroll.js', array('jquery'), null, true); - $query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 10, 'cat' => '19')); + $query_vars = array('post_type' => 'post', 'posts_per_page' => 10); + if (is_category()) { + $category = get_queried_object(); + $query_vars['cat'] = $category->term_id; + } - // Передаем переменные в скрипт - wp_localize_script('my-load-more', 'my_load_more_params', array( - 'ajaxurl' => admin_url('admin-ajax.php'), // URL для AJAX-запроса - 'posts' => json_encode($query->query_vars), // Параметры запроса - 'current_page' => get_query_var('paged') ? get_query_var('paged') : 1, // Текущая страница - 'max_page' => $query->max_num_pages // Максимальное количество страниц - )); + $query = new WP_Query($query_vars); + + wp_localize_script('my-load-more', 'my_load_more_params', array( + 'ajaxurl' => admin_url('admin-ajax.php'), + 'posts' => json_encode($query->query_vars), + 'current_page' => max(1, get_query_var('paged')), // Начальная страница + 'max_page' => $query->max_num_pages + )); + } } add_action('wp_enqueue_scripts', 'my_theme_scripts'); -function loadmore_ajax_handler() -{ + +function loadmore_ajax_handler() { $args = json_decode(stripslashes($_POST['query']), true); - $args['paged'] = $_POST['page'] + 1; // следующая страница + $args['paged'] = $_POST['page'] + 1; $args['post_status'] = 'publish'; $args['posts_per_page'] = 12; - $args['cat'] = [-17, -20, -21]; + + // Проверка на категорию, если она есть в параметрах запроса + if (isset($args['cat']) && !empty($args['cat'])) { + $args['cat'] = $args['cat']; + } else { + $args['cat'] = [-17, -20, -21]; + } query_posts($args); @@ -278,8 +291,11 @@ function loadmore_ajax_handler() endif; die; } -add_action('wp_ajax_loadmore', 'loadmore_ajax_handler'); // для авторизованных пользователей -add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler'); // для неавторизованных пользователей +add_action('wp_ajax_loadmore', 'loadmore_ajax_handler'); +add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler'); + + + /* * Фильтр добавлен для модификации стандартной формы плагина Contact Form ( Срезаем span элементы, в которые оборачивается input ). diff --git a/js/load-main-scroll.js b/js/load-main-scroll.js new file mode 100755 index 0000000..f72d7f2 --- /dev/null +++ b/js/load-main-scroll.js @@ -0,0 +1,53 @@ +jQuery(function($) { + var loading = false; + var loadCount = 0; + var maxLoads = 5; + + function loadMorePosts() { + if (loading || loadCount >= maxLoads) return; + + var scrollTop = $(window).scrollTop(); + var windowHeight = $(window).height(); + var documentHeight = $(document).height(); + + if (scrollTop + windowHeight >= documentHeight - 200) { + loading = true; + + var data = { + 'action': 'loadmore', + 'query': my_load_more_params.posts, + 'page': my_load_more_params.current_page + }; + + $.ajax({ + url: my_load_more_params.ajaxurl, + data: data, + type: 'POST', + beforeSend: function(xhr) { + $('.articles-preview__show-next').text('Загрузка...'); + }, + success: function(data) { + if (data) { + $('.articles-preview').append(data); + my_load_more_params.current_page++; + loadCount++; + + ym(96621494, 'hit', location.pathname + '?page=' + my_load_more_params.current_page); + + if (my_load_more_params.current_page == my_load_more_params.max_page || loadCount >= maxLoads) { + $(window).off('scroll', loadMorePosts); + $('.articles-preview__show-next').remove(); + } else { + loading = false; + } + } else { + $(window).off('scroll', loadMorePosts); + $('.articles-preview__show-next').remove(); + } + } + }); + } + } + + $(window).on('scroll', loadMorePosts); +});