Mam pole wyszukiwania dla postów na blogu, ale potrzebuję innego dla niestandardowego typu postu. Jak mogę utworzyć ten niestandardowy formularz wyszukiwania z innym układem wyników wyszukiwania ?
44
Mam pole wyszukiwania dla postów na blogu, ale potrzebuję innego dla niestandardowego typu postu. Jak mogę utworzyć ten niestandardowy formularz wyszukiwania z innym układem wyników wyszukiwania ?
Oto, co próbowałem i mam rozwiązanie w 3 krokach. Załóżmy, że Twoim niestandardowym typem postu są „ produkty ”
1. Dodaj kod funkcji , aby określić archiwum-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) Utwórz szablon wyników wyszukiwania dla niestandardowego typu postu (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(); ?>
Utwórz formularz wyszukiwania
W tym formularzu wartość „produkty” jest ukryta i będzie wyszukiwać tylko posty produktów .
<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>
więcej, chciałbym cię tutaj link do
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
zwróciła tablicę (a nie ciąg znaków), więc nie można jej bezpośrednio porównać. Ponieważ szukam tylko jednego typu postów na raz, po prostu zmieniłem swój$post_type
var na$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
http://localhost:3000/search/cloud/product
search_template
filtr wydaje się być bardziej odpowiednią alternatywętemplate_include
Oto, co działa dla mnie. Nie tak czysty, ale nie udało mi się uzyskać żadnej z tych odpowiedzi.
Formularz wyszukiwania niestandardowego typu postu:
W functions.php:
W search.php:
Oczywiście we wszystkich trzech miejscach trzeba zastąpić „książkę” niestandardowym typem posta.
Mam nadzieję, że to komuś pomoże!
źródło
Krótki kod bardziej zaktualizowany
źródło
Chciałem użyć dwóch różnych formularzy do normalnego wyszukiwania i wyszukiwania niestandardowego typu postu.
Mój niestandardowy typ posta używa innego nagłówka niż zwykłe strony, na mojej normalnej stronie wezwanie do mojego formularza wyszukiwania to:
A wywołanie mojego formularza wyszukiwania w niestandardowym nagłówku typu posta to:
Który ma dodatkowe pole:
W pliku funkcji mam następujący kod, który podałeś.
Który wykrywa, czy formularz wyszukiwania wykonuje wyszukiwanie w niestandardowych polach, tym samym pokazując wyszukiwanie w niestandardowym szablonie, w przeciwnym razie użyj normalnego szablonu.
Edycja: naprawiono wywołanie funkcji get_search_form (), które zwracałoby wartość true bez względu na wszystko.
źródło
get_search_form('true')
powinno byćget_search_form(true)
.get_search_form
szuka wartości logicznej, więc albotrue
albofalse
. Zawijając go w cudzysłów, podajesz mu ciąg, a nie parametr boolowski. Sposób, że funkcja jest skonfigurowana, zarówno'true'
i'false'
wróci ten sam rezultat, ponieważ obaj są niepuste ciągi (który powoduje, że funkcja zwraca prawda w obu przypadkach).Aby rozwiązać problem z pustym wyszukiwaniem wejściowym, możesz zastąpić kod funkcji następującym:
źródło