X

Mehrere Suchvorlagen für benutzerdefinierte Beitragstypen erstellen

Schnipsel von IsItWP

Suchen Sie nach einer Möglichkeit, mehrere Suchvorlagen für benutzerdefinierte Beitragstypen zu erstellen? Obwohl es wahrscheinlich ein Plugin dafür gibt, haben wir einen schnellen Code-Schnipsel erstellt, den Sie verwenden können, um mehrere Suchvorlagen für benutzerdefinierte Beitragstypen in WordPress zu erstellen.

Anweisungen:

Suchvorlage

Erstellen Sie eine neue Datei namens search.php und fügen Sie die folgende Suchvorlage hinzu. Ändern Sie $search_refer= CUSTOM_POST_TYPE in die Namen Ihrer Beitragstypen. Sie müssen auch den Vorlagenpfad zur entsprechenden Vorlage ändern, die Sie anzeigen möchten, um Ergebnisse anzuzeigen.

<?
/* Template Name: Search Results */

$search_refer = $_GET["post_type"];
if ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_one-name.php'); }
elseif ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_two-name.php'); };

?>

Suchergebnisse anzeigen

Fügen Sie diese query_post direkt über der Schleife in den von Ihnen erstellten Suchvorlagen ein. Vergessen Sie nicht, CUSTOM_POST_TYPE für jede Ihrer Vorlagen zu ändern.

<?php 
	$args = array(
		'post_type'=> 'CUSTOM_POST_TYPE',
                's'    => $s,
                'paged' => $paged,
                );
		query_posts($args);
?>

Suchformular

Fügen Sie diesen HTML-Code in die Vorlage ein, in der Sie das Suchformular anzeigen möchten. Sie müssen den Namen CUSTOM_POST_TYPE in den Beitragstyp ändern, nach dem Sie suchen möchten. Sie müssen ein neues Formular für jeden benutzerdefinierten Beitragstyp erstellen oder ein Dropdown-Menü verwenden, um den post_type festzulegen.

<form id="searchform" action="<?php bloginfo('home'); ?>/" method="get">
	<input id="s" maxlength="150" name="s" size="20" type="text" value="" class="txt" />
	<input name="post_type" type="hidden" value="CUSTOM_POST_TYPE" />
	<input id="searchsubmit" class="btn" type="submit" value="Search" />
</form>

Hinweis: Wenn Sie zum ersten Mal Code-Schnipsel in WordPress hinzufügen, lesen Sie bitte unseren Leitfaden, wie Sie Code-Schnipsel richtig in WordPress hinzufügen, damit Sie Ihre Website nicht versehentlich beschädigen.

Wenn Ihnen dieser Code-Schnipsel gefallen hat, ziehen Sie bitte in Betracht, unsere anderen Artikel auf der Website zu lesen, wie z. B.: 43 beste Fotografie-Themes für WordPress und wie man ein Kontaktformular in WordPress erstellt.

Kommentare   Hinterlasse eine Antwort

  1. Ich hatte einige Syntaxfehler, elseif ohne Semikolon am Ende, danach funktionierte alles einwandfrei 🙂

  2. Wenn der Suchwert leer ist, z. B. ?s=&post_type=products, werden immer Ergebnisse in der Standardvorlage zurückgegeben, unabhängig davon, welcher post_type sich im Suchstring befindet. Gibt es dafür eine Lösung?

    Zum Beispiel: ?s=+&post_type=products DAS WIRD FUNKTIONIEREN, öffnet in search-products.php
    Dies: ?s=&post_type=products WIRD NICHT FUNKTIONIEREN, öffnet in search-post.php

    1. Ich würde denken, dass es am besten wäre, JavaScript zu verwenden, um etwas im Feld zu verlangen, bevor sie suchen können.

    2. Ich würde denken, dass es am besten wäre, JavaScript zu verwenden, um etwas im Feld zu verlangen, bevor sie suchen können.

    3. Ich würde denken, dass es am besten wäre, JavaScript zu verwenden, um etwas im Feld zu verlangen, bevor sie suchen können.

  3. Wenn der Suchwert leer ist, z. B. ?s=&post_type=products, werden immer Ergebnisse in der Standardvorlage zurückgegeben, unabhängig davon, welcher post_type sich im Suchstring befindet. Gibt es dafür eine Lösung?

    Zum Beispiel: ?s=+&post_type=products DAS WIRD FUNKTIONIEREN, öffnet in search-products.php
    Dies: ?s=&post_type=products WIRD NICHT FUNKTIONIEREN, öffnet in search-post.php

  4. Wenn der Suchwert leer ist, z. B. ?s=&post_type=products, werden immer Ergebnisse in der Standardvorlage zurückgegeben, unabhängig davon, welcher post_type sich im Suchstring befindet. Gibt es dafür eine Lösung?

    Zum Beispiel: ?s=+&post_type=products DAS WIRD FUNKTIONIEREN, öffnet in search-products.php
    Dies: ?s=&post_type=products WIRD NICHT FUNKTIONIEREN, öffnet in search-post.php

  5. Lebensrettender Artikel, danke, ich habe nach einer guten Lösung gesucht, das hat sehr geholfen

    1. Kein Problem, wir freuen uns, dass wir helfen konnten!

  6. Brillant. Danke. Du rockst!

    1. Kein Problem, wir freuen uns, dass Ihnen der Snippet gefällt!

  7. Brillant. Danke. Du rockst!

  8. Ich habe ein Child-Theme verwendet. Ich musste { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); } verwenden

  9. Danke für den Tipp! Funktioniert perfekt…

  10. Ich liebe die Idee dahinter, so clever.
    Ich habe jedoch ein Problem mit der Paginierung. Das macht es irgendwie nutzlos, es sei denn, ich zeige alle Ergebnisse mit einem 'showposts' => 999 an,

    1. OH SNAP… ich habe etwa eine Stunde daran gearbeitet, bevor ich aufgegeben und kommentiert habe… und dann habe ich es herausgefunden…
      Die query_posts-Argumente wurden wie folgt geändert:

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

  11. Das gibt mir eine leere Seite zurück. Irgendwelche Hilfe?

  12. Gut gemacht, Sir. Toller Tipp.

  13. Vielen Dank! Sie haben mir gerade den Morgen versüßt.

  14. Ist das nur für benutzerdefinierte Post-Typen?

  15. Der Code funktioniert in 3.4.2 einwandfrei, aber ich musste „post_type“ in „posttype“ ändern.

    Vielen Dank! 🙂

  16. Funktioniert bei mir in 3.3.1 nicht. Die Variable $s erhält möglicherweise keinen Wert. Irgendwelche Vorschläge?

    1. Ich werde die Dinge in einer neueren Version von WordPress testen, um sicherzugehen, obwohl Sie keine Probleme haben sollten. Ich würde auch empfehlen, auf 3.4 zu aktualisieren. Ich werde hier mit den Ergebnissen posten.

    2. Habe die Dinge getestet und es scheint einwandfrei zu funktionieren. Haben Sie die benutzerdefinierten Vorlagendateien erstellt und alles korrekt eingerichtet?

  17. Ich erhalte einen Serverfehler, wenn ich versuche, dies zu implementieren 🙁

    1. Welchen Fehler erhalten Sie?

  18. Okay, hier ist, was ich als Fallback gemacht habe:

    1. Ich habe in meinen Vorlagendateien einen Ordner namens „search“ erstellt. –> TEMPLATEPATH .’/search/’

    2. dann benutzerdefinierte Beitragsvorlagen mit dem Standardcode von Wordpress search.php erstellt.
    Bsp.: search-xxxxx.php, wobei xxxxx der benutzerdefinierte Beitragstyp ist.

    3. alle benutzerdefinierten Beitragsvorlagen search-xxxxx.php im neu erstellten Suchordner platziert.

    4. die Standard-Wordpress-Datei search.php umbenannt in –> default-search.php

    5. eine neue search.php erstellt und den folgenden Code eingefügt:

     

    6. wir rufen im Grunde eine Funktion namens custom_search_template() auf.

    7. definieren wir diese Funktion in der Datei fuctions.php:

    function custom_search_template() {

    $search_refer = $_GET[“post_type”];

    if ( isset($_GET[“post_type”]))
    {
        if (file_exists(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’))
       
        load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
       
        else
        {
            load_template(TEMPLATEPATH . ‘/search-default.php’);
        }
    }
    else
    {
        load_template(TEMPLATEPATH . ‘/search-default.php’);
    }

    8. Schließlich das Suchformular:

    <form id="searchform" action="/” method=”get”>
           

           

          
     

                Beitragstyp auswählen

               
                    Unternehmen
                    Nachrichten
                    LABEL
                    
              

    9. Grundsätzlich, wenn Sie dieses Formular verwenden, um eine Suchanfrage zu senden,
       Wordpress erhält name=”post_type” –> d.h.    $_GET[“post_type”];

    Die Funktion prüft dann, ob  $_GET[“post_type”] gesetzt wurde,
     wenn ja, wird eine Vorlagendatei basierend auf $search_refer = $_GET[“post_type”]
    aus dem von uns erstellten Ordner /search/ geladen. D.h. search-xxxxx.php  —>  search-$search_refer.php

    Wenn keine Vorlage namens „search-$search_refer.php“ existiert, verwendet die Funktion default-search.php, um Suchergebnisse anzuzeigen.

    10. Bitte kommentieren Sie, wenn ich mich irre.

     

  19.  function custom_search_template() {

    $search_refer = $_GET[“post_type”];

    load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);

    }

  20. Ich habe ein Problem mit der Paginierung, wenn die Suchergebnisse des benutzerdefinierten Beitragstyps mehr als 5 betragen.

    Irgendwelche Ratschläge?

    1. Ich habe dies im arg-Array versucht

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

  21. Vadim Goncharov März 7, 2012 um 22:18

    Wie richte ich etwas ein, bei dem eine „Nichts gefunden“-Nachricht angezeigt wird, wenn keine Datensätze in der DB vorhanden sind? 

  22. Ooh, großartig! Was ist mit Formularfeldern, die auf Taxonomien oder benutzerdefinierten Feldern basieren, wie bei einem Immobilien-Suchfeld? Wenn ich mir den Ausschnitt ansehe, sieht es wie eine normale Freitext-Suchleiste aus, die den Beitragstyp des Beitrags durchsucht, den Sie gerade ansehen. Was ist, wenn es sich um eine Suchleiste auf der Homepage oder einer anderen Nicht-CPT handelt? Es sieht nicht so aus, als gäbe es einen Fallback zu einer normalen WordPress-Suche. Bitte korrigieren Sie, wenn falsch.

    1. Nein, nein, mein Freund, du scheinst ein wenig verwirrt zu sein
       Schau dir diese Zeile an:

      Sie könnten es zu einem benutzerdefinierten Beitragsselektor ändern:

      Geschäft
      Nachrichten LABEL

      und so weiter..

      Beachten Sie, dass:
        name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.meaning die Suche nicht auf dem Beitragstyp des Beitrags basiert, den Sie gerade ansehen. Sie basiert auf: name=”post_type” value.

  23. Flávio Leonard Vargas 30. Januar 2012 um 04:30 Uhr

    Funktioniert super! Vielen Dank!

  24. Das funktioniert (brillant! danke Kevin), das einzige Problem ist, dass in der
    Anzeige der Suchergebnisse ein } falsch platziert ist. Das könnte die Ursache für Lin D.s Problem sein.

    1. @toomanyairmiles:disqus  Freut mich zu hören, dass Ihnen der Snippet gefällt, und danke für den Hinweis auf das zusätzliche } Ich habe den Snippet aktualisiert.

  25. Das hat bei mir nicht funktioniert

    1. Hallo Lin D., das funktioniert, ich habe es mit mehreren Kunden im Einsatz. Wenn Sie mich über das unten stehende Formular kontaktieren möchten, kann ich Ihnen per E-Mail weiterhelfen, damit alles läuft, und ich kann mir sogar Ihre Vorlagen ansehen, wenn Sie möchten.

      http://wpsnipp.com/contact/

Kommentar hinzufügen

Wir freuen uns, dass Sie einen Kommentar hinterlassen haben. Bitte beachten Sie, dass alle Kommentare gemäß unserer Datenschutzrichtlinie moderiert werden und alle Links nofollow sind. Verwenden Sie KEINE Schlüsselwörter im Namensfeld. Lassen Sie uns ein persönliches und bedeutungsvolles Gespräch führen.

WordPress Launch Checkliste

Die ultimative Checkliste für den Start von WordPress

Wir haben alle wichtigen Checklistenpunkte für den Start Ihrer nächsten WordPress-Website in einem praktischen E-Book zusammengefasst.
Ja, senden Sie mir das kostenlose E-Book!