Intereting Posts
Как получить количество страниц при копировании комментариев? Смещение WP_Query отрицательным 1 Более элегантный способ обработки уведомлений / предупреждений Вопрос по обновлению WordPress Почему я получаю эту ошибку? Ошибка базы данных WordPress: Admin – нет Рекомендуемый выбор изображения в создании нового / страницы | Добавить оценочное значение для сообщения в соответствии с количеством слов Если тег существует, то эхо один раз Удалить действие из плагина штрих-кода woocommerce WP upload / select image, разве это не проблема безопасности? ajax возвращает -1 в многодоменном субдомене 2 Различная таксономия с иерархическими отношениями 404 ошибка при разбиении на страницы пользовательского типа сообщения Нужна помощь с простым правилом перезаписи (не должно ли это быть легким?) как отображать отображаемое изображение для отдельной записи для определенной категории

Использование next / previous_posts_link с индивидуальным поиском

У меня есть несколько разных запросов на моем сайте:

  • «Профили видов» (пользовательский тип поиска по почте)
  • «Глоссарий» (поиск по типу пользовательских сообщений)
  • Общий, поиск по всему сайту

В настоящее время я использую search.php ; $_POST["type"] чтобы определить, какой поиск был использован, и $_POST["s"] для запроса:

 <?php if (isset($_POST["s"])) { $search_term = $_POST["s"]; } if (isset($_POST["type"])) { switch ($_POST["type"]) { case "profile" : $post_type = "species"; break; case "glossary" : $post_type = "glossary"; break; default : $post_type = array( 'post', 'species' ); break; } } else { $post_type = array( 'post', 'species' ); } $args = array( 's' => $search_term, 'post_type' => $post_type ); ?> <?php get_template_part('searchresults'); ?> 

Это работает достаточно хорошо, однако, когда я пытаюсь использовать next_posts_link или previous_posts_link , это не сработает. URL-адрес mywebsite.com/page/2/ на mywebsite.com/page/2/ и отображает « Sorry, you're looking for something that isn't here в соответствии со стандартом 404 на моем сайте.


EDIT. Теперь я обновил свой код, чтобы он включал $paged следующим образом (я также пытался изменить get_query_var на 'paged' а не на 'page' но это не имеет значения):

  $paged = (get_query_var('page')) ? get_query_var('page') : 1; $args = array( 's' => $search_term, 'post_type' => $post_type, 'paged' => $paged ); 

Однако та же проблема возникает.


Вот код из searchresults.php для @MarkDuncan

 <?php global $args; ?> <?php $query = new WP_Query ( $args ); ?> <?php if ($query->have_posts()) : ?> <?php if ($s) : ?> <p class="info">Search results for <em>‘<?php echo $s ?>’</em></p> <?php else : ?> <p class="info">Search results:</p> <?php endif; ?> <?php while ( $query->have_posts() ) : $query->the_post(); ?> <div class="post" id="post-<?php the_ID(); ?>"> <?php if (get_post_type() == "species") { get_template_part('list', 'species'); } else { get_template_part('list', 'index'); } ?> </div> <?php endwhile; ?> <div class="navigation"><?php next_posts_link('&laquo; Previous Entries') ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php previous_posts_link('Next Entries &raquo;') ?></div> <?php else : ?> <?php get_template_part( 'notfound' ); ?> <?php endif; ?> 

Есть ли способ решить эту проблему?

Заранее спасибо,

Solutions Collecting From Web of "Использование next / previous_posts_link с индивидуальным поиском"

Вам не нужна переменная типа и другие биты кода пользовательского поискового запроса или пользовательские функции, такие как другие ответы.

В поле поиска вместо отправки формы / отправьте ее в / my_post_type / вместо этого! WordPress будет обрабатывать все остальное для вас автоматически, без каких-либо усилий.

Более того, это означает, что все обычные функции будут работать так же, как вы ожидали от них!

Например, вместо:

 example.com/?type=species&s=giraffe 

Ты можешь сделать:

 example.com/species/?s=giraffe 

Где example.com/species – это ваша страница архива типа персонализированного сообщения.

И для вашего конкретного окна поиска:

 <form role="search" method="get" id="searchform" action="<?php echo home_url( '/species/' ); ?>"> 

Если вам нужен один поисковый запрос с выбором, вы можете изменить параметр функции home_url с '/ species /' на '/', а затем добавить поле выпадающего окна, имя которого «post_type», содержащее нужные вам значения, например:

 <form role="search" method="get" id="searchform" action="<?php echo home_url( '/species/' ); ?>"> <select name="post_type"> <option value="">Sitewide</option> <option value="species">Species</option> <option value="Glossary">Glossary</option> </select> 

Выполнение этого способа означает отсутствие пользовательских запросов и отсутствие зависания с переменными. Все функции предоставляются из коробки WordPress, и единственная дополнительная часть, которую вам нужно сделать, это изменить свой HTML-код поиска!

Все нормальные функции WordPress на страницах архива теперь будут работать, как ожидалось, без дополнительных шагов

Вы можете использовать тот же трюк с категориями, тегами, таксономиями, авторскими и датскими архивами.

Поэтому удалите WP_Query в шаблонах поиска и удалите лишний код, который вы положили над линией get_template_part в search.php, измените окно поиска и убедитесь, что пользовательские постоянные ссылки активированы

Потому что вы используете <?php $query = new WP_Query ( $args ); ?> <?php $query = new WP_Query ( $args ); ?> глобальный wp_query не изменяется (используется next_posts_link).

Таким образом, вы можете изменить новый вызов query_posts( $args ); только на query_posts( $args ); (и измените свой цикл без $query-> ).

Или вы можете перезаписать <?php global wp_query; $wp_query = new WP_Query ( ); $wp_query->query($args); ?> <?php global wp_query; $wp_query = new WP_Query ( ); $wp_query->query($args); ?> <?php global wp_query; $wp_query = new WP_Query ( ); $wp_query->query($args); ?> и соответственно изменить свой цикл ( $quey-> to $wp->query ).

Если вы хотите использовать исходный запрос после своего поиска, вы можете сохранить его в переменной temp, прежде чем изменять его global $wp_query; $temp = $wp_query; global $wp_query; $temp = $wp_query; , После цикла вы можете сделать $wp_query = $temp чтобы вернуть его в исходный запрос.

Я бы сказал, что самый быстрый способ достичь такого рода ссылок:

 function custom_next_comments_link( $label = '', $max_page = 0, $query = array() ) { global $wp_query; $wp_query = $query; echo get_next_comments_link( $label, $max_page ); } function custom_previous_comments_link( $label = '', $query = array() ) { global $wp_query; $wp_query = $query; echo get_previous_comments_link( $label ); } 

И их вы передадите как аргумент $query используя new WP_Query();

Надеюсь, я помог.