Intereting Posts
Исключить все липкие сообщения на первой странице двадцать двенадцать Разработка плагина WordPress как компонента в Joomla Вставить содержимое в <title> head tag с функцией Нужно ли мне префиксные переменные внутри функции? setup_postdata в php-файле «loop-handling», называемом $ .ajax Возвращать URL-адреса изображений с помощью определенной базовой строки? Как я могу сделать это итеративное условие в работе Loop через функцию? Как я могу извлечь данные Использование wp_send_json_success и wp_redirect одновременно Если инструкция else основана на значении date_diff Почему изображения отображаются только в оригинальном размере, а не в обычном размере? Роль, которая может редактировать только виджеты, а не другие параметры темы Если значение меньше IE9 Включить WP, чтобы принять стандартный код jQuery, заключенный между тегами <body> Удаление методов контакта с пользователем работает с functions.php, но не с плагина

Поиск в WordPress: красивые URL-адреса (постоянные ссылки), настраиваемые типы сообщений и разбиение на страницы

У меня есть три отдельных окна поиска на моем веб-сайте: species поиска CPT, поиск по ключевым словам CPT и общий поиск, который я хотел бы искать в post типа post и species .

Мои вопросы трижды,

  1. Каков наиболее эффективный / эффективный код для создания довольно поисковых URL-адресов, и есть ли причина, по которой WordPress не активирует их по умолчанию?
  2. Принимая во внимание № 1, какой код мне нужно использовать в виде searchform-species , searchform-glossary , search and searchresults чтобы указать, что мой поиск видов будет возвращать только результаты видов, глоссарий вернет результаты глоссария и т. Д.
  3. Как включить разбивку на страницы?

Код, который я сейчас пытаюсь сделать, выглядит следующим образом:

КОД ДЛЯ # 1

 add_action( 'template_redirect', 'my_rewrite' ); function my_rewrite() { if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) { wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) ); exit(); } } 

КОД ДЛЯ # 2 & # 3

searchform.php

 <?php $search_query = get_search_query(); if (!$search_query) { $search_query = "SEARCH"; } ?> <form id="topbar_search" action="<?php echo home_url( '/' ); ?>" method="post"> <p>SEARCH</p> <input type="text" size="50" value="<?php echo $search_query; ?>" name="s" id="s" class="topbar_longinput default-value" /> <input type="submit" value="GO" class="topbar_submit" /> <p class="tinylinks"><a href="#1">advanced search</a></p> </form> 

searchform-species.php

 <h1 class="profilesearch">PROFILE<span class="white">SEARCH</span></h1> <form id="profilesearch" action="<?php echo home_url( '/' ); ?>" method="post"> <input type="hidden" name="type" value="profile" /> <input type="text" size="50" class="default-value" value="SEARCH" name="s" /> <input type="submit" value="GO" class="profilesearch_submit" /> <!-- <p class="tinysearch"><a href="/dev/advanced-search/">ADVANCED SEARCH</a></p> --> <input type="checkbox" name="showthumbnails" id="showthumbnails" class="checkbox" <?php if ($_POST["showthumbnails"] == "on") { echo 'checked="checked" '; } ?>/><label for="showthumbnails">HIDE THUMBNAILS</label> </form> 

search.php

  if (isset($_REQUEST["type"])) { switch ($_REQUEST["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' ); } $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 's' => $search_term, 'post_type' => $post_type, 'paged' => $paged ); ?> <?php get_template_part('searchresults'); ?> 

Что происходит в данный момент:

Индивидуальные поисковые запросы работают, но разбиение на страницы нет. Когда я нажимаю кнопку next/previous_posts_link , он добавляет /page/2/ в URL-адрес и ничего не делает. Если я попытаюсь get_query_var('page') он вернет NULL . Если я попытаюсь выставить 'paged' вместо этого, он вернет 0 .

Кроме того, когда пользователь нажимает на эту ссылку, переменная $search_query из searchform.php отображается как page/bettas (где bettas – это исходный запрос).


В идеале, я бы хотел, чтобы это произошло:

  1. В «общем поиске» пользователь входит в betta . URL-адрес изменен на /search/betta котором перечислены любые данные о содержании или содержании, содержащие слово betta .
  2. В «поиске видов» пользователь входит в betta . URL-адрес изменяется на /search/betta/species (или что-то лучшее для SEO) и отображает список содержимого только species содержащего слово betta .
  3. Тот же пользователь, что и # 2, затем нажимает кнопку « Далее» ( previous_posts_link ). URL-адрес изменяется на /search/betta/species/page/2 и пользователь получает следующие 25 перечисленных видов.

Я полный новичок в перезаписи WP и разбивке на страницы, поэтому любая помощь будет очень признательна.

Solutions Collecting From Web of "Поиск в WordPress: красивые URL-адреса (постоянные ссылки), настраиваемые типы сообщений и разбиение на страницы"

Разметка может выполняться точно так же, как и везде в шаблоне архива поиска.

Вам также не нужно настраивать свой запрос и тип переменной в search.php. Чтобы найти конкретный пользовательский пост, вы можете либо изменить запрос, либо перейти в архив сообщений и добавить поисковый запрос, например

example.com/event_post_type/?s=term

То же самое относится к любой категории или архиву таксономии, просто добавив? S = searchterm в конце, превратит его в поисковый запрос, так же как добавление / фид / в конец URL-адреса даст вам RSS2-канал для этой конкретной страницы / содержимое архива.

Вы преувеличиваете это, это связано с добавлением дополнительного правила перезаписи для преобразования этого в нечто более приятное, например:

 function search_rewrite( $wp_rewrite ) { $feed_rules = array( 'search/(.+)/events' => 'index.php?post_type=events&s='. $wp_rewrite->preg_index(1) ); $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules; } // refresh/flush permalinks in the dashboard if this is changed in any way add_filter( 'generate_rewrite_rules', 'search_rewrite' ); 

Позвольте вам сделать example.com/search/searchterm/events, хотя я советую / events / search / searchterm как лучший способ сделать это.

Используйте плагин анализатора правил перезаписи monkeyman, чтобы проверить свои изменения, и вы можете найти более подробную информацию о правилах перезаписи в этом ответе здесь: Довольно URL с add_query_var