Как ограничить результаты per_page и отображать ссылки на страницы для настраиваемой конечной точки API REST API?

Я настроил собственный маршрут WP REST API, и мне нужна помощь, ограничив результаты до 5 на страницу, а затем добавив ссылки на страницы для отображения следующей страницы и т. Д.

Я пробовал добавлять 'per_page => 5' в массиве аргументов, но ничего не меняется в результатах URL. Я также не могу понять, как включить нумерацию страниц вообще. Извините, это мой первый опыт с этим.

function staffSearchEndpoint(){
    register_rest_route('staffbio/v1', 'staffsearch', array(
        'methods' => WP_REST_SERVER::READABLE,
        'callback' => 'staffSearchJSONResults',
    ));
}

function staffSearchJSONResults($data) {
    $staffBio = new WP_Query(array(
        'post_type' => 'staff_bios',
        's' => $data['term'],
        'orderby' => 'title',
        'order' => 'asc'
    ));

Если вы можете, пожалуйста, дайте мне знать, что добавить в $staffBio array или что-нибудь еще, что будет высоко оценено. Также, если Javascript необходим для вашего ответа, пожалуйста, используйте только простой JS, без JQuery, пожалуйста.

1 ответ

Похоже, вы используете неправильный аргумент в WP Query для поста на странице. Вам нужно использовать 'posts_per_page' => 5, вместо 'per_page => 5' в WP_Query аргумент.

Так что ваши staffSearchJSONResults функция будет:

function staffSearchJSONResults($data) {
$staffBio = new WP_Query(array(
    'post_type' => 'staff_bios',
    'posts_per_page' => 5,
    's' => $data['term'],
    'orderby' => 'title',
    'order' => 'asc'
));

Для нумерации страниц я бы предложил использовать offset аргумент.

Допустим, у вас есть общее количество сообщений в staff_bios и значение posts_per_page и сказать по умолчанию offset значение будет 0

Итак, основное логическое представление для нумерации страниц будет:

$pagination_number = 1; //Default pagination number, change as per pagination number
$total_posts = 30;
$posts_per_page = 5;
//This will change based on pagination number, it indicate how many post to skip
$offset = ($pagination_number - 1) * $posts_per_page;  

$data = WP_Query(array(
'post_type' => 'staff_bios',
'posts_per_page' => $posts_per_page,
's' => $data['term'],
'orderby' => 'title',
'order' => 'asc',
'offset' => $offset,
));

$total_pagination = $total_posts/$posts_per_page; //(1, 2, 3 ,4 , 5, ....)

//LOOP THGOUGH DATA

Вы можете проверить все аргументы WP_Query здесь: https://www.billerickson.net/code/wp_query-arguments/

0
Другие вопросы по тегам