Вопрос или проблема
Я показываю всех пользователей, используя функцию get_user()
. Но мне нужно разбить результаты на страницы. Я пробовал много способов, но не добился успеха. Вот код, который не работает так, как ожидалось:
$args = array( 'meta_query' => array(
array(
'key' => 'ib_s2member_custom_fields',
'value' => trim($_GET["country"]),
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => trim($_GET["city"]),
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => $first_name,
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => $last_name,
'compare' => 'LIKE'
)
) );
$users = get_users( $args );
Вы можете использовать класс WP_User_Query вместо функции get_users() для достижения этой цели. Новый измененный код будет похож на следующий:
<?php
/*
* Мы начинаем с запроса, чтобы получить всех пользователей
* Нам нужно общее количество пользователей, чтобы мы могли рассчитать, сколько страниц будет
*/
$count_args = array(
'number' => 999999
);
$user_count_query = new WP_User_Query($count_args);
$user_count = $user_count_query->get_results();
// подсчитываем количество пользователей, найденных в запросе
$total_users = $user_count ? count($user_count) : 1;
// получаем номер текущей страницы и устанавливаем 1, если номер страницы не установлен
$page = isset($_GET['p']) ? $_GET['p'] : 1;
// сколько пользователей показывать на странице
$users_per_page = 5;
// вычисляем общее количество страниц.
$total_pages = 1;
$offset = $users_per_page * ($page - 1);
$total_pages = ceil($total_users / $users_per_page);
// основной запрос пользователей
$args = array(
'number' => $users_per_page,
'offset' => $offset,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'country',
'value' => 'Israel',
'compare' => '='
),
array(
'key' => 'age',
'value' => array( 20, 30 ),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
)
);
$user_query = new WP_User_Query( $args );
// Получаем результаты
$users = $user_query->get_results();
// Цикл пользователей
if ( ! empty( $users->results ) ) {
foreach ( $users->results as $user ) {
echo '<p>' . $user->display_name . '</p>';
}
} else {
echo 'Пользователи не найдены.';
}
// получаем текущие параметры запроса
$query_string = $_SERVER['QUERY_STRING'];
// Переменная $base хранит полный URL нашей страницы, включая аргумент текущей страницы
// если в админке, ваш базовый URL будет URL админки + ваш путь страницы
$base = admin_url('your-page-path') . '?' . remove_query_arg('p', $query_string) . '%_%';
// если на фронтенде, ваш базовый URL - это текущая страница
//$base = get_permalink( get_the_ID() ) . '?' . remove_query_arg('p', $query_string) . '%_%';
echo paginate_links( array(
'base' => $base, // базовый URL, включая аргумент запроса
'format' => '&p=%#%', // это определяет параметр запроса, который будет использоваться, в данном случае "p"
'prev_text' => __('« Предыдущая'), // текст для предыдущей страницы
'next_text' => __('Следующая »'), // текст для следующей страницы
'total' => $total_pages, // общее количество страниц
'current' => $page, // текущая страница
'end_size' => 1,
'mid_size' => 5,
));
?>
Для получения дополнительной информации о WP_User_Query посетите эту страницу.
Ответ или решение
Конечно! Ниже представлено подробное руководство по пагинации списка пользователей в WordPress с использованием класса WP_User_Query
.
Пагинация списка пользователей
Вам необходимо реализовать пагинацию для списка пользователей, используя мета-запросы. Вместо функции get_users()
, мы будем использовать класс WP_User_Query
, который обеспечивает более гибкие возможности для работы с запросами пользователей в WordPress. Вот как это можно сделать:
Шаг 1: Подсчет общего числа пользователей
Сначала нужно выполнить запрос для получения общего количества пользователей, чтобы вычислить, сколько страниц требуется для отображения.
$count_args = array(
'number' => -1 // Получаем всех пользователей
);
$user_count_query = new WP_User_Query($count_args);
$user_count = $user_count_query->get_results();
$total_users = $user_count ? count($user_count) : 1; // Общее количество пользователей
Шаг 2: Определение текущей страницы и количества пользователей на странице
Затем определяем текущую страницу и количество пользователей, которые вы хотите отображать на каждой странице:
$page = isset($_GET['p']) ? (int) $_GET['p'] : 1; // Текущая страница (по умолчанию 1)
$users_per_page = 5; // Количество пользователей на странице
$offset = $users_per_page * ($page - 1); // Сдвиг
$total_pages = ceil($total_users / $users_per_page); // Общее количество страниц
Шаг 3: Выполнение основного запроса пользователей
Теперь можно выполнить основной запрос для получения пользователей:
$args = array(
'number' => $users_per_page,
'offset' => $offset,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ib_s2member_custom_fields',
'value' => trim($_GET["country"]),
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => trim($_GET["city"]),
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => $first_name,
'compare' => 'LIKE'
),
array(
'key' => 'ib_s2member_custom_fields',
'value' => $last_name,
'compare' => 'LIKE'
)
)
);
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
Шаг 4: Вывод пользователей
Теперь вы можете вывести пользователей из полученного результата:
if (!empty($users)) {
foreach ($users as $user) {
echo '<p>' . esc_html($user->display_name) . '</p>';
}
} else {
echo 'Пользователи не найдены.';
}
Шаг 5: Генерация ссылок пагинации
Для создания ссылок пагинации используем функцию paginate_links()
:
$query_string = $_SERVER['QUERY_STRING'];
$base = admin_url('your-page-path') . '?' . remove_query_arg('p', $query_string) . '%_%'; // базовый URL
echo paginate_links(array(
'base' => $base, // база URL с параметрами запроса
'format' => '&p=%#%', // параметр, который будет использоваться для навигации
'prev_text' => __('« Назад'), // текст для предыдущей страницы
'next_text' => __('Далее »'), // текст для следующей страницы
'total' => $total_pages, // общее количество страниц
'current' => $page, // текущая страница
'end_size' => 1,
'mid_size' => 5,
));
Заключение
Все вышеуказанные шаги обеспечивают правильную пагинацию списка пользователей на вашем сайте WordPress. Проверьте, чтобы обработать параметры извлечения и минимизировать использование глобальных переменных для лучшей организации кода.
Если у вас есть дополнительные вопросы или вам нужна дальнейшая помощь, не стесняйтесь обращаться!