Как сделать постраничную навигацию (пагинацию) для запроса пользователей
Не могу разобраться, не работает постраничная навигация, когда нажимаю на кнопки
<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>
Тебе нужно в параметры запроса добавить отступ 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(). Принцип такой же...
Спасибо большое, буду пробывать
не понимаю
последняя версия Тимур не пойму
<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>Ох ну ты и накрутил... Ты делаешь покривому немного, через фильтры тебе нужно только изменять параметры запроса. А запрос делать в одном месте кода. Для фильтров не будет работать, потому что ты в их запросы не передаешь отступ. Ну и в целом лишний код у тебя.
Примерно так надо, просто написал без каких либо тестов:
$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 );Пробую как умею
спасибо. буду переделывать)
так нужно ?
<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>навигация не работает в других вкладках ($filter)
. paginate_links(array('$filter' => get_pagenum_link(1) .