WordPress как на ладони

Как сделать постраничную навигацию (пагинацию) для запроса пользователей

Не могу разобраться, не работает постраничная навигация, когда нажимаю на кнопки

<a href="?filter=pf_user_all"><i class="fa fa-user-circle"></i> Все </a>  

Без фильтров работает. (без нажимание на кнопки)

сам код

<span class="version">
<a href="?filter=pf_user_all"><i class="fa fa-user-circle"></i> Все </a>  
<a href="?filter=pf_user_post"><i class="fa fa-address-card"></i> Журналисты</a>  
<a href="?filter=pf_user_comments"><i class="fa fa-graduation-cap"></i> Дикторы</a>  
<a href="?filter=pf_user_donation"><i class="fa fa-rub"></i> Вклад</a>  
<a href="?filter=pf_user_registered"><i class="fa fa-calendar"></i> Регистрация</a>  
</span>

  <div class="pf-list"> <ul style="display: flow-root;">

		<?php
	   //параметры постраничого списока
	   $no=18; $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; if($paged==1){$offset=0; }else { $offset= ($paged-1)*$no;}

	   //приявязка данных
		$us_id = $user_ID; if ( is_user_logged_in() && $us_id > 0 && $us_id !== "" && is_numeric($us_id))
		$user_info = get_userdata( $us_id ); $author->ID = $us_id;
		$user_reg = $user_info->get('user_registered'); $datetime = new DateTime($user_reg);

		$user_query = new WP_User_Query( array( 'orderby' => 'display_name' )); // Показывает всех

	   //фильтры пользователей
	  if ($_GET['filter']=='pf_user_all') {$user_query = new WP_User_Query( array('orderby' => 'display_name' ));} // Все пользователи
	  if ($_GET['filter']=='pf_user_post') {$user_query = new WP_User_Query( array( 'orderby' => 'user_post' ));} // Пользователи с постами
	  if ($_GET['filter']=='pf_user_comments') {$user_query = new WP_User_Query( array('orderby' => 'user_comments' ));} // Пользователи с постами
	  if ($_GET['filter']=='pf_user_donation') {$user_query = new WP_User_Query( array('orderby' => 'donation', 'order' => 'DESC' ));} // Пользователи с вкладом
	  if ($_GET['filter']=='pf_user_registered') {$user_query = new WP_User_Query( array('number' => $no, 'offset' => $offset, 'orderby' => 'user_registered', 'order' => 'DESC'));} // Пользователи с регистраций

	  //сортировка по данным
	  if ( ! empty( $user_query->results ) ) {
		 foreach ( $user_query->results as $author ) {
		   $args = array( 'user_id' => $author->ID, 'count' => true, 'status' => 'approve', ); $commratings = get_comments( $args );

			if ($_GET['filter']=='pf_user_all'){
			if ( $user ) continue;
		   }
		   elseif ($_GET['filter']=='pf_user_post'){
			 $count_posts = count_user_posts( $author->ID, 'post', true );
			  if ( $count_posts == 0 ) continue;
		   }
		   elseif ($_GET['filter']=='pf_user_comments'){
			  $commratings = get_comments( $args );
			  if ( $commratings <= 0 ) continue;
		   }
		   elseif ($_GET['filter']=='pf_user_donation'){
			  $commratings = get_comments( $args );
			  if ( $author->donation == 0 ) continue;
		   }
		   elseif ($_GET['filter']=='pf_user_registered'){
			  $commratings = get_comments( $args );
			   if ( $author->user_registered == 0 ) continue;
		   }

		echo '<li class="spisok-users"><br/>';
		echo '<span class="crug coloryellow" data-tooltip="Вклад "> <i class="fa fa-rub"></i> ' . ($author->donation ?: '0') . '</span><br/>';
		echo '<a href="/author/?uid=' . $author->ID . '">' . get_avatar($author->ID) . '</a><br/>';
		echo '<span class="color-pf-green">' . get_the_author_meta ('display_name', $author->ID) . '</span><br/><br/>';
		echo '<span class="crug" data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span>';
		echo '  <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $commratings . '</span><br/><br/>';
		echo '<span class="crug color-pf-ser" data-tooltip="Регистрация"><i class="fa fa-calendar"></i> ' . (new DateTime($author->user_registered))->format('d.m.Y') . '</span>';
		echo '</li>';
		}
	  } else {
		  echo '<ol><pre>Пользователи не найдены</pre></ol>';
		}
		?>
   </ul></div>

	 <?php
	  //постраничый список
	  $total_user = $user_query->total_users; $total_pages=ceil($total_user/$no);
	  echo '<div class="pagination pf-paging-navi pf-list">' . paginate_links(array('base' => get_pagenum_link(1) . '%_%', 'format' => '?paged=%#%', 'current' => $paged, 'total' => $total_pages, 'prev_text' => '«', 'next_text' => '»', 'type' => 'list', )) . ' </div>';
	 ?>

  <p> </p>
0
pfilan
2.1 год назад 24
  • 1
    Kama9601

    Тебе нужно в параметры запроса добавить отступ https://wp-kama.ru/function/get_comments#offset

    Его нужно высчитать в зависимости от текущей страницы пагинации и добавить в запрос...

    Нужно сделать как тут https://wp-kama.ru/id_2647/kak-ispolzovat-parametr-offset-ne-lomaya-paginatsiyu.html только offset передать в параметр get_comments(). Принцип такой же...

    pfilan 2.1 год назад

    Спасибо большое, буду пробывать

    pfilan 2.1 год назад

    не понимаю sad

    pfilan 2.1 год назад

    последняя версия Тимур не пойму

      <span class="version">
      <a class="crug color-pf-green" data-tooltip="Ваш баланс" href="/moy-balans/"><i class="fa fa-rub" aria-hidden="true"></i></a>
      <a class="vkadka" href="/author/"><span class="pf_user_count_left"><i class="fa fa-user-circle"></i></span> Профиль </a>
      <a class="crug color-pf-green" data-tooltip="Изменить" href="/edit/"><i class="fa fa-pencil-square-o aria-hidden="true></i></a>
      <a class="vkadka coloryellow" href="/users/"><span class="pf_user_count_left"><i class="fa fa-users"></i></span> Пользователи <?php echo '<span class="pf_user_count">' . pfilan_metka_all_users() . '</span>'; ?></a>
    
      <a class="vkadka" href="?filter=pf_user_post"><span class="pf_user_count_left"><i class="fa fa-address-card"></i></span> Журналисты <?php echo '<span class="pf_user_count">' . pfilan_metka_authors() . '</span>'; ?></a>
      <a class="vkadka" href="?filter=pf_user_comments"><span class="pf_user_count_left"><i class="fa fa-graduation-cap"></i></span> Дикторы <?php echo '<span class="pf_user_count">' . pfilan_metka_dictor() . '</span>'; ?></a>
      <a class="vkadka" href="?filter=pf_user_donation"><span class="pf_user_count_left"><i class="fa fa-rub"></i></span> Вклад <?php echo '<span class="pf_user_count">' . pfilan_metka_donation() . '</span>'; ?></a>
      <a class="vkadka" href="?filter=pf_user_registered"><span class="pf_user_count_left"><i class="fa fa-calendar"></i></span> Регистрация <?php echo '<span class="pf_user_count">' . pfilan_metka_all_users() . '</span>'; ?></a>
      </span>
    
    	<div class="pf-list"> <ul style="display: flow-root;">
    
    		  <?php
    
    		 $no=18; $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    		 if ($paged==1) {$offset = 0; }
    		 else { $offset = ($paged-1)*$no; }
    
    		 $user_query = new WP_User_Query( array( 'number' => $no, 'offset' => $offset, 'orderby' => 'display_name' )); // Показывает всех
    
    		 //фильтры пользователей
    		if ($_GET['filter']=='pf_user_post') {$user_query = new WP_User_Query( array('orderby' => 'post_count', 'order' => 'DESC'));} // Пользователи с постами
    		if ($_GET['filter']=='pf_user_comments') {$user_query = new WP_User_Query( array('orderby' => 'comment_count', 'order' => 'DESC'));} // Пользователи с комментариями true
    		if ($_GET['filter']=='pf_user_donation') {$user_query = new WP_User_Query( array('orderby' => 'meta_value_num','meta_key' => 'donation', 'order' => 'DESC', 'meta_value' > 0 ));} // Пользователи с вкладом
    		if ($_GET['filter']=='pf_user_registered') {$user_query = new WP_User_Query( array('orderby' => 'user_registered', 'order' => 'DESC'));} // Пользователи с регистраций
    
    		//сортировка по данным
    		if ( ! empty( $user_query->results ) ) {
    		   foreach ( $user_query->results as $author ) {
    			 $args = array( 'user_id' => $author->ID, 'count' => true, 'status' => 'approve', );
    			 $commratings = get_comments( $args );
    
    			 if ($_GET['filter']=='pf_user_post'){
    			   $count_posts = count_user_posts( $author->ID, 'post', true );
    			   if ( $count_posts == 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_comments'){
    			   if ( $commratings <= 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_donation'){
    			   if ( $author->donation == 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_registered'){
    			   if ( $author->user_registered == 0 ) continue;
    			 }
    
    		  echo '<li class="spisok-users"><br/>';
    		  echo '<a href="/moy-balans/"><span class="crug coloryellow" data-tooltip="Вклад "> <i class="fa fa-rub"></i> ' . ($author->donation ?: '0') . '</span></a><br/>';
    		  echo '<a href="/author/?uid=' . $author->ID . '">' . get_avatar($author->ID) . '</a><br/>';
    		  echo '<span class="color-pf-green">' . get_the_author_meta ('display_name', $author->ID) . '</span><br/><br/>';
    		  echo '<span class="crug" data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span>';
    		  echo '  <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $commratings . '</span><br/><br/>';
    		  // echo '<span class="crug color-pf-ser" data-tooltip="Регистрация"><i class="fa fa-calendar"></i> ' . (new DateTime($author->user_registered))->format('d.m.Y') . '</span>';
    		  echo '</li>';
    		  }
    		} else {
    			echo '<ol><pre>Пользователи не найдены</pre></ol>';
    		  }
    		  ?>
    	 </ul></div>
    <div class="content_sos">
    	   <?php
    		$total_user = $user_query->total_users; $total_pages=ceil($total_user/$no);
    		echo '<div class="pagination pf-paging-navi pf-list">' . paginate_links(array('base' => get_pagenum_link(1) . '%_%', 'format' => '?paged=%#%', 'current' => $paged, 'total' => $total_pages, 'prev_text' => '«', 'next_text' => '»', 'type' => 'list', )) . '</div>';
    	   ?>
    	</div>
    Kama 2.1 год назад

    Ох ну ты и накрутил... Ты делаешь покривому немного, через фильтры тебе нужно только изменять параметры запроса. А запрос делать в одном месте кода. Для фильтров не будет работать, потому что ты в их запросы не передаешь отступ. Ну и в целом лишний код у тебя.

    Примерно так надо, просто написал без каких либо тестов:

    $filter = isset( $_GET['filter'] ) ? $_GET['filter'] : '';
    
    $no = 18;
    $paged = get_query_var( 'paged' ) ?: 1;
    $offset = ( $paged - 1 ) * $no;
    
    $q_args = [
    	'number'  => $no,
    	'offset'  => $offset,
    	'orderby' => 'display_name',
    ];
    
    // фильтры
    
    // Пользователи с постами
    if( 'pf_user_post' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'post_count', 'order' => 'DESC' ] );
    } 
    // Пользователи с комментариями true
    elseif( 'pf_user_comments' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'comment_count', 'order' => 'DESC' ] );
    } 
    // Пользователи с вкладом
    elseif( 'pf_user_donation' === $filter ){
    
    	$q_args = array_merge( $q_args, [
    		'orderby'  => 'meta_value_num',
    		'meta_key' => 'donation',
    		'order'    => 'DESC',
    		'meta_value' > 0,
    	] );
    }
    // Пользователи с регистраций
    elseif( 'pf_user_registered' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'user_registered', 'order' => 'DESC' ] );
    } 
    
    $user_query = new WP_User_Query( $q_args );
    pfilan 2.1 год назад

    Пробую как умею smile

    спасибо. буду переделывать)

    pfilan 2.1 год назад

    так нужно ?

    <div class="pf-list"> <ul style="display: flow-root;">
    
    <?php
    
      $filter = isset( $_GET['filter'] ) ? $_GET['filter'] : '';
    
      $no = 18;
      $paged = get_query_var( 'paged' ) ?: 1;
      $offset = ( $paged - 1 ) * $no;
    
      $q_args = [
    	'number'  => $no,
    	'offset'  => $offset,
    	'orderby' => 'display_name',
      ];
    
      // фильтры
    
      // Пользователи с постами
      if( 'pf_user_post' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'post_count', 'order' => 'DESC' ] );
      } 
      // Пользователи с комментариями true
      elseif( 'pf_user_comments' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'comment_count', 'order' => 'DESC' ] );
      } 
      // Пользователи с вкладом
      elseif( 'pf_user_donation' === $filter ){
    
    	$q_args = array_merge( $q_args, [
    		'orderby'  => 'meta_value_num',
    		'meta_key' => 'donation',
    		'order'    => 'DESC',
    		'meta_value' > 0,
    	] );
      }
      // Пользователи с регистраций
      elseif( 'pf_user_registered' === $filter ){
    	$q_args = array_merge( $q_args, [ 'orderby' => 'user_registered', 'order' => 'DESC' ] );
      } 
    
      $user_query = new WP_User_Query( $q_args );
    
    		//сортировка по данным
    		if ( ! empty( $user_query->results ) ) {
    		   foreach ( $user_query->results as $author ) {
    			 $args = array( 'user_id' => $author->ID, 'count' => true, 'status' => 'approve', );
    			 $commratings = get_comments( $args );
    
    			 if ($_GET['filter']=='pf_user_post'){
    			   $count_posts = count_user_posts( $author->ID, 'post', true );
    			   if ( $count_posts == 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_comments'){
    			   if ( $commratings <= 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_donation'){
    			   if ( $author->donation == 0 ) continue;
    			 }
    			 elseif ($_GET['filter']=='pf_user_registered'){
    			   if ( $author->user_registered == 0 ) continue;
    			 }
    
    		  echo '<li class="spisok-users"><br/>';
    		  echo '<a href="/moy-balans/"><span class="crug coloryellow" data-tooltip="Вклад "> <i class="fa fa-rub"></i> ' . ($author->donation ?: '0') . '</span></a><br/>';
    		  echo '<a href="/author/?uid=' . $author->ID . '">' . get_avatar($author->ID) . '</a><br/>';
    		  echo '<span class="color-pf-green">' . get_the_author_meta ('display_name', $author->ID) . '</span><br/><br/>';
    		  echo '<span class="crug" data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span>';
    		  echo '  <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $commratings . '</span><br/><br/>';
    		  // echo '<span class="crug color-pf-ser" data-tooltip="Регистрация"><i class="fa fa-calendar"></i> ' . (new DateTime($author->user_registered))->format('d.m.Y') . '</span>';
    		  echo '</li>';
    		  }
    		} else {
    			echo '<ol><pre>Пользователи не найдены</pre></ol>';
    		  }
    		  ?>
    	 </ul></div>
    <div class="content_sos">
    	   <?php
    		$total_user = $user_query->total_users; $total_pages=ceil($total_user/$no);
    		echo '<div class="pagination pf-paging-navi pf-list">' . paginate_links(array('base' => get_pagenum_link(1) . '%_%', 'format' => '?paged=%#%', 'current' => $paged, 'total' => $total_pages, 'prev_text' => '«', 'next_text' => '»', 'type' => 'list', )) . '</div>';
    	   ?>
    	</div>
    pfilan 2.1 год назад

    навигация не работает в других вкладках ($filter)

    pfilan 2.1 год назад

    pfilan 1.8 года назад
    . paginate_links(array('$filter' => get_pagenum_link(1) .
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация