У меня есть поле поиска для сообщений в блоге, но мне нужно другое для пользовательского типа сообщения. Как я могу создать эту пользовательскую форму поиска с другим форматом результатов поиска ?
44
У меня есть поле поиска для сообщений в блоге, но мне нужно другое для пользовательского типа сообщения. Как я могу создать эту пользовательскую форму поиска с другим форматом результатов поиска ?
Вот что я попробовал и получил решение с 3 шагами. Допустим, ваш пользовательский тип записи " продукты "
1 Добавьте код функции, здесь вы можете указать archive-search.php
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
2 Создать шаблон результатов поиска для пользовательского типа записи (archive-search.php)
<?php
/* Template Name: Custom Search */
get_header(); ?>
<div class="contentarea">
<div id="content" class="content_right">
<h3>Search Result for : <?php echo "$s"; ?> </h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="posts">
<article>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php the_exerpt(); ?></p>
<p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p>
<span class="post-meta"> Post By <?php the_author(); ?>
| Date : <?php echo date('j F Y'); ?></span>
</article><!-- #post -->
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Создать форму поиска
В этой форме поиска значение «продукты» скрыто, и оно будет искать только сообщения о продуктах .
<div>
<h3>Search Products</h3>
<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search Products"/>
<input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
<input type="submit" alt="Search" value="Search" />
</form>
</div>
для получения дополнительной информации я хотел бы сослаться на вас здесь
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
возвращен массив (а не строка), поэтому нельзя сравнивать напрямую. Так как я ищу только один тип сообщения за раз, я просто изменил свою$post_type
переменную на$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
доhttp://localhost:3000/search/cloud/product
search_template
фильтра , как представляется, более подходящей альтернативыtemplate_include
Вот что работает для меня. Не так чисто, но я не мог заставить ни один из этих других ответов работать.
Форма поиска для пользовательского типа сообщения:
В functions.php:
В search.php:
Естественно, во всех трех местах вам нужно заменить «книгу» на ваш собственный тип записи.
Надеюсь, это поможет кому-то!
источник
Короткий код более актуален
источник
Я искал, чтобы использовать две разные формы для моих обычных поисков и моих поисков по пользовательскому типу записи.
Мой пользовательский тип записи использует заголовок, отличный от обычных страниц, на моей обычной странице запрос к моей форме поиска:
И вызов для моей формы поиска в заголовке пользовательского типа сообщения:
Который имеет дополнительное поле:
В файле функций у меня есть следующий код, который вы предоставили.
Который определяет, выполняет ли форма поиска поиск в пользовательских полях, таким образом, показывая поиск в пользовательском шаблоне, в противном случае использует обычный шаблон.
Редактировать: исправлен вызов функции get_search_form (), который возвращал бы значение true, несмотря ни на что.
источник
get_search_form('true')
должно бытьget_search_form(true)
.get_search_form
ищем булев ввод, так какtrue
илиfalse
. Оборачивая его в кавычки, вы передаете ему строку, а не логический параметр. Способ установки этой функции, оба'true'
и'false'
будет возвращать один и тот же результат, потому что они обе непустые строки (что заставляет функцию возвращать true в обоих случаях).Чтобы исправить проблему поиска пустого ввода, вы можете заменить код функции следующим образом:
источник