Ich habe ein Suchfeld für die Blog-Posts, aber ich benötige ein anderes für einen benutzerdefinierten Post-Typ. Wie kann ich dieses benutzerdefinierte Suchformular mit einem anderen Suchergebnislayout erstellen ?
44
Ich habe ein Suchfeld für die Blog-Posts, aber ich benötige ein anderes für einen benutzerdefinierten Post-Typ. Wie kann ich dieses benutzerdefinierte Suchformular mit einem anderen Suchergebnislayout erstellen ?
Hier ist, was ich ausprobiert und eine Lösung mit 3 Schritten bekommen habe. Angenommen, Ihr benutzerdefinierter Beitragstyp lautet " Produkte ".
1. Funktionscode hinzufügen Hier können Sie die archive-search.php angeben
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. Erstellen einer Suchergebnisvorlage für einen benutzerdefinierten Beitragstyp (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(); ?>
Suchformular erstellen
In diesem Suchformular ist der Wert "Produkte" ausgeblendet und es werden nur Produktbeiträge durchsucht .
<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>
Für weitere Informationen möchte ich Sie hier verlinken:
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
zurück ein Array (statt einer Zeichenfolge) kann so nicht direkt miteinander verglichen werden. Da ich immer nur einen Beitragstyp suche, habe ich einfach meinen$post_type
var auf geändert$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
umhttp://localhost:3000/search/cloud/product
search_template
Filter scheint eine angemessenere Alternative zu seintemplate_include
Hier ist was für mich funktioniert. Nicht so sauber, aber ich konnte keine dieser anderen Antworten zum Laufen bringen.
Suchformular für benutzerdefinierten Beitragstyp:
In functions.php:
In search.php:
Natürlich müssen Sie an allen drei Stellen "book" durch Ihren benutzerdefinierten Post-Typ ersetzen.
Hoffe das hilft jemandem!
quelle
Ein aktuellerer Kurzcode
quelle
Ich habe versucht, zwei verschiedene Formulare für meine normalen Suchvorgänge und meine Suchvorgänge für einen benutzerdefinierten Beitragstyp zu verwenden.
Mein benutzerdefinierter Beitragstyp verwendet eine andere Kopfzeile als normale Seiten. Auf meiner normalen Seite lautet der Aufruf meines Suchformulars:
Der Aufruf meines Suchformulars in der Kopfzeile des benutzerdefinierten Beitragstyps lautet:
Welches hat ein zusätzliches Feld:
In der Funktionsdatei habe ich den folgenden Code, den Sie zur Verfügung gestellt haben.
Welche erkennt, ob das Suchformular eine Suche in benutzerdefinierten Feldern durchführt und somit die Suche in einer benutzerdefinierten Vorlage anzeigt, verwenden Sie andernfalls die normale Vorlage.
Bearbeiten: Der Funktionsaufruf get_search_form () wurde korrigiert, der auf jeden Fall true zurückgegeben hätte.
quelle
get_search_form('true')
sollte aber seinget_search_form(true)
.get_search_form
sucht nach einer booleschen Eingabe, also entwedertrue
oderfalse
. Indem Sie es in Anführungszeichen setzen, geben Sie ihm einen String und keinen booleschen Parameter. Die Art'true'
und Weise, wie diese Funktion eingerichtet ist, ist beides und'false'
würde dasselbe Ergebnis zurückgeben, da es sich bei beiden um nicht leere Zeichenfolgen handelt (wodurch die Funktion in beiden Fällen true zurückgibt).Um das Problem mit der Suche nach leeren Eingaben zu beheben, können Sie den Funktionscode durch Folgendes ersetzen:
quelle