Intereting Posts
Переустановка WordPress без потери данных Удалить конечную точку перезаписи при деактивации? Отображение дополнительных полей профиля в admin – проблема с подчеркиванием Для чего предназначена группа настроек? Добавить уведомление пользователям при первом входе в админ-зону Проблема создания экземпляра массива в виджетах в обновлении 4.4 Неработающее мобильное меню для мобильных телефонов TwentyTwelve не работает Пользовательский пост, не показывающий Переопределить индекс с помощью настраиваемой страницы PHP Дублировать уведомления для регистрации нового пользователя Детская тема function.php вызывает фатальную ошибку Безопасна ли база данных после слияния ветви более поздней версии более старой? PHP Неустранимая ошибка: вызов неопределенной функции plugin_basename Woocommerce – Проверить наличие запаса продукта из внешней базы данных WP Rest API v2 возвращает сообщения с определенным тегом

Pagination всегда добавляет ссылку «Next», когда результаты приходят из Custom Post Type WP_query

Или, по крайней мере, так оно и есть.

У меня есть страница, на которую я передаю несколько аргументов для запроса post_meta для настраиваемого поля, и я всегда получаю дополнительную ссылку «Далее» независимо от количества сообщений. Если запрос одного типа сообщений без передачи каких-либо переменных в meta_query (установка $ female в null) в моем WP_query, разбиение на страницы работает так, как ожидалось.

Я просмотрел каждую ссылку, которую я могу найти о пользовательской типе публикации типа (и их очень много), установили page-navi и просмотрели код, отключили и повторно подключили мои плагины. Я чувствую себя несколько глупо, поэтому, пожалуйста, будь красивой, поскольку я смущен. Я не могу заставить это работать. Вот мой урезанный код, и любые идеи будут оценены.

URL:

http://dev.huntingtonmedical.com/doctors/page/7/ http://dev.huntingtonmedical.com/doctors/page/5/?gender=female (следующая ссылка приведет вас к пустой странице)

get_header(); $gender = $_GET['gender']; if ( $gender != 'female' ) unset( $gender ); global $paged; $paged = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1; $args = array( 'post_type' => 'doctors', 'meta_key' => 'last_name', 'orderby' => 'meta_value', 'order' => 'ASC', 'paged' => $paged, 'meta_query' => array( array( 'key' => 'gender', 'value' => $gender, 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); while( $query->have_posts() ) { $query->the_post(); the_title(); echo '<br>'; } posts_nav_link(' | ',' Previous Page ',' Next Page '); 

/doctors/ – это архив типа post, поэтому мы можем проверить, выполняется ли этот запрос в действии pre_get_posts через условный тег is_post_type_archive( 'doctors' ) и соответствующим образом модифицировать эти запросы.

WordPress передает объект запроса в функцию по ссылке ( $query в этом примере), поэтому мы можем модифицировать вазы запросов с помощью метода set объекта запроса. Этот код будет включен в файл functions.php вашей темы:

 function wpa_doctor_gender( $query ) { // if this is the main query on the doctors post type archive if ( $query->is_post_type_archive( 'doctors' ) && $query->is_main_query() ) { // set query vars for all doctors queries $query->set( 'meta_key', 'last_name' ); $query->set( 'orderby', 'meta_value' ); $query->set( 'order', 'ASC' ); // set meta_query if gender is female if ( isset( $_GET['gender'] ) && 'female' == $_GET['gender'] ){ $meta_query = array( array( 'key' => 'gender', 'value' => $_GET['gender'], 'compare' => 'IN' ) ) $query->set( 'meta_query', $meta_query ); } } } add_action( 'pre_get_posts', 'wpa_doctor_gender' ); 

Теперь в шаблоне мы можем избавиться от всего пользовательского кода запроса и цикла и просто запустить цикл vanilla для вывода сообщений:

 while( have_posts() ) { the_post(); the_title(); // etc.. }