Problem
Ich habe eine Seite auf meiner Website, auf der ich zusätzliche Suchen auf dieser Seite durchführen muss. Ich verwende die Standardmethode der WordPress-Suche <?php get_search_form(); ?>
für meine Haupt-Header-Suche, was großartig funktioniert.
Ich habe auf meiner Seite ein anderes HTML-Formular erstellt, das nicht die Standard-PHP-Methode verwendet, für die zusätzliche Suche wie folgt:
<form action="<?php bloginfo('siteurl'); ?>" id="searchform" method="get">
<div>
<label for="s" class="screen-reader-text">Search for:</label>
<input type="text" id="s" name="s" value="" />
<input type="hidden" name="post_type" value="photo_group" />
<input type="submit" value="Search" id="searchsubmit" />
</div>
</form>
Ich verwende die type=hidden
, um den benutzerdefinierten Beitragstyp zu erhalten, den ich durchsuchen möchte:
<input type="hidden" name="post_type" value="photo_group" />
Das gibt mir einen Link, der ähnlich aussieht wie:
http://mywebsite.com/?s=search&post_type=photo_group
Frage
Wenn ich das neue Suchformular verwende, das auf der Seite erstellt wurde, wird die Standardeinstellung search.php verwendet, um die Ergebnisse anzuzeigen. Wie kann ich die Suchergebnisse der Suche nach benutzerdefinierten Beitragstypen anzeigen, z. B. div
auf derselben Seite?
Ich habe versucht, eine neue Seitenvorlage zu erstellen, die die Ergebnisse ohne Erfolg anzeigt. Könnte dies der richtige Weg sein und ich habe es einfach falsch gemacht?
* Bearbeiten *
Ich versuche die Lösung von Sanchothefat. Sieht das richtig aus? Dies ist mein ganzes Div für meine Suchergebnisse und Suchanfragen.
<div id="photo-search">
<h2>Search Photos:</h2>
<form action="<?php the_permalink(); ?>" id="searchform" method="get">
<div>
<label for="s" class="screen-reader-text">Search for:</label>
<input type="text" id="search" name="search" value="" />
<input type="hidden" name="post_type" value="photo_group" />
<input type="submit" value="Search" id="searchsubmit" />
</div>
</form>
<?php if( isset( $_REQUEST['search'] ) ) {
query_posts( array(
's' => $_REQUEST['search'],
'post_type' => $_REQUEST['photo_group'],
'paged' => $paged
));
if( have_posts() ) : while ( have_posts() ) :
the_title();
the_content();
endwhile; endif;
wp_reset_query();
}
?>
</div>
Ich erhalte die 404-Fehlerseite, die beim Durchlaufen der Suche nicht gefunden wurde.
Antworten:
Die einfachste Option, wenn Sie Suchergebnisse in einem Seitenkontext anzeigen möchten, müssen Sie eine benutzerdefinierte Schleife ausführen, da Sie sonst nicht auf die Seiteninformationen zugreifen können.
Ändern Sie die Eingabe mit dem Namen
s
in etwas anderes wiesearch
oder umq
zu verhindern, dass WordPress die übliche integrierte Suche ausführt.Ändern Sie als Nächstes den Formularparameter
action
in die URL der aktuellen Seite. Sie können dafür verwenden<?php get_permalink(); ?>
.Die Schleife, die Sie ausführen müssen, lautet wie folgt:
quelle
if ( have_posts() ) : while ( have_posts() ) :
,if ( have_posts() ) : while ( have_posts() ) : the_post();
um eine Endlosschleife zu vermeiden (nicht sicher warum). Vielleicht, weil ich eine benutzerdefinierte Vorlage mit rendereget_template_part(...)
.Sie können die Abfrage ändern, bevor sie verarbeitet wird:
Dadurch erhalten Sie Beiträge, die dem angeforderten Beitragstyp entsprechen.
Wenn Sie mehrere Beitragstypen abfragen möchten, übergeben Sie stattdessen einfach ein Array :
array('post', 'page', $post_type)
. Um Beiträge nach Typ zu gruppieren, überprüfen Sie den Typ in der Schleife und speichern Sie Ihre CPTs in einem temporären Array, das Sie iterieren, nachdem die normalen Beiträge angezeigt wurden.quelle