WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Не правильно формирует ссылки пагинации wp-paginavi(), kama_pagenavi() . Когда получаешь посты через ajax.

Первый раз при загрузки страниции привильно формирует ссылку : http://wordpress.loc/integrations/page/2/ и пагинация работает.
При подгрузки через ajax ,получаю посты по категории :
http://wordpress.loc/integrations/wp-admin/admin-ajax.php?page=2.

Вопрос почему вставляет wp-admin/admin-ajax.php.

Запрос

JS

    function getCategory() {
		$(".sidebar .category-menu-desktop .list-category li span").click(function(event) {
			event.preventDefault();
			$(".sidebar .category-menu-desktop .list-category li span").removeClass("selected");
			$(this).addClass("selected");
			$('.cutome_post_with_search_and_pagination .content').fadeOut('fast');

			var categoryIdDesktop = $(this).attr('data-category-id');
			$.ajax({
				url: ajax.url,
				type: 'POST',
				dataType: "html",
				data: {
					action: 'get_ajax_posts',
					category_id: categoryIdDesktop
				},
				success: function(response) {
					$('.cutome_post_with_search_and_pagination .content').html(response).fadeIn('fast');
				}
			});

		});
	}

PHP

function get_ajax_posts()
{
	global $wp_query;
	$paged = (get_query_var('page')) ? get_query_var('page') : 1;
	$category_id = $_POST["category_id"];
	ob_start();
	$query_args = array(
		'paged' => $paged,
		'posts_per_page' => 5,
		'tax_query' => array(
			array(
				'taxonomy' => 'integrations_taxonomy',
				'field' => 'id',
				'terms' => $category_id

			)
		)
	);

	$query = new WP_Query($query_args);
	$i = 1;
	?>
<div class="row">
	<?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
	<article class="post">
		<div class="heading">
			<div class="thumbnail">
				<?php the_post_thumbnail(); ?>
			</div>
			<div class="title">
				<h5 class="sub-title">
					<?php echo get_field("sub-title"); ?>
				</h5>
				<h4>
					<?php the_title(); ?>
				</h4>
			</div>
		</div>
		<div class="description">
			<?php the_excerpt(); ?>
		</div>
		<div class="learn-more"><a href="<?php the_permalink(); ?>">Learn more</a></div>
	</article>
	<?php if ($i % 2 == 0) {
		echo '</div><div class="row">';
	} ?>
	<?php $i++; ?>
	<?php endwhile; ?>
</div>
<div class="pagination">

	<?php
		if(function_exists('wp_pagenavi') && $query->max_num_pages>1)
		{
			wp_pagenavi( array( 'query' => $query ) );
		}
		?>
</div>
<?php else: ?>
<?php echo '<h2>no posts here</h2>'; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
<?php
	$ajax_posts2 = ob_get_contents();
	ob_clean();
	echo $ajax_posts2;
	wp_die();
	?>
<?php
}
add_action('wp_ajax_get_ajax_posts', 'get_ajax_posts');
add_action('wp_ajax_nopriv_get_ajax_posts', 'get_ajax_posts');
0
Денис
5 лет назад
  • 1
    el-lable620 el-lable.ru

    Вы не передаете аяксом номер текущей пагинации, только id категории. Вам нужно доработать скрипт, а именно вы должны еще передавать значение $paged, этого значения нет в аякс запросе. Вы не правильно реализовали функцию get_ajax_posts().

    Денис 5 лет назад

    А разве я не передаю $ paged = (get_query_var ('page'))? get_query_var ('page'): 1 ?.

    Можете пожалуйста более подробние объясните.

    el-lable 5 лет назад

    Это передается в обычной генерации страницы, при аякс запросе ничего этого нет.

    Денис 5 лет назад

    Я не пойму зачем мне текущую страницу передавать. Пуска будет текущей страницей первая по умолчанию. Как это повлияет на генерацию ссылок ?

    el-lable 5 лет назад

    Вам нужно гуглить что такое GET, POST, HEAD и что такое XMLHttpRequest.
    У Вас непонимание основ.

    Денис 5 лет назад

    Вы что читать не умеет. Или вы вопрос не поняли. Давайте с начала .Просто Ajax пагинация у меня работает погружаются посты делит на страницы. Но когда фильтруешь по таксономиям (категориям) . То тоже все правильно , делит на страницы, но ссылки формирует не правильно. Так понято ? И причем тут основы HTTP ?.

    Денис 5 лет назад

    el-lable если вы знаете как сделать ответе , или сделаете за деньги если уж та то пошло, а то я внятного ответа не получил. И погрузка пагинации у меня так реализована.

            jQuery(document).on('click', '.cutome-post-integrations .wp-pagenavi a', function(event) {
    			event.preventDefault();
    			var link = jQuery(this).attr('href');
    			$('.cutome-post-integrations .content .posts').fadeOut('fast', function() {
    				$('.cutome-post-integrations .content .posts').load(link + ' .content .posts> *', function() {
    					$('.cutome-post-integrations .content .posts').fadeIn('fast');
    				});
    			});
    		});
    
    Комментировать
  • 0

    Вероятно оба варианта вывода навигации генерируют "базовый" url страницы используя для этого get_pagenum_link, которая берет базовый url из текущего запроса. А при ajax запрос как раз идут на wp-admin/admin-ajax.php вот оно и добавляется, может не ясно объяснил, но надеюсь суть понятна.

    Я с похожей проблемой разобрался так, не найдя другого решения (ну если только не создавать свою навигацию)

    $pagenum = (int) $_GET['page'];
    if (!$pagenum) $pagenum = 1;
    $result =  paginate_links( array(
    	'base'         => @add_query_arg('page','%#%'),
    	'format'       => 'page=%#%',
    	'current'   => $pagenum,
    	'mid_size'  => 7,
    	'total'   => $query->max_num_pages,
    	'prev_text' => '<',
    	'next_text' => '>'
    ) );
    $result = str_replace ('/wp-admin/admin-ajax.php', '', $result);
    echo ($result) ? "<div class='wp-pagenavi'>".$result."</div>" : '';
    
    Денис 5 лет назад

    Да я так тоже подумал изначально и посмотрел код в wp-paginavi как формируется ссылка . Так и есть , что плагин берет "базового url" и формирует ссылку. И я примерно тоже так сделал только через фильтр wp-paginavi

    add_filter('get_pagenum_link','function_get_pagenum_link');
    	function function_get_pagenum_link($result)
    	{
    		$result= str_replace ("wp-admin/admin-ajax.php" , "", $result);
    		return  $result ;
    	}

    Но опять же почему так сделано ? . Нету нормально плагина или кода который нормально формировала ссылку на пагинация . А не через "костыли" так скажем , c вырезанием /wp-admin/admin-ajax.php.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация