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. Sally Pilkington 7. Januar 2019 um 15:09 Uhr

    Hallo, danke für diese Anleitung.
    Ich versuche, ein benutzerdefiniertes Suchformular zu erstellen, das ich in der Seitenleiste des Blog-Bereichs meiner Website platzieren möchte. Ich möchte, dass das Suchformular nur innerhalb von BEITRÄGEN (Standard-Blogbeiträge, nicht benutzerdefinierte Beitragstypen) sucht – und alle anderen Inhalte, z. B. Seiten, ignoriert. Ist es möglich, diese Methode anzupassen, um das zu erreichen, was ich versuche?
    Ich habe es versucht, aber ohne Erfolg.
    Vielen Dank

    1. Hallo Sally,
      Versuchen Sie diese Anleitung zu wie man Beitragstypen aus Suchergebnissen filtert. Ich hoffe, Sie finden sie hilfreich 🙂

  2. Miau miau miauperfekt )

  3. Pitico Medtler 3. Juli 2015 um 14:16 Uhr

    Perfekt. Danke!

  4. Entschuldigung für die Anfängerfrage, aber gibt es eine Möglichkeit, das noch einen Schritt weiter zu gehen und nur ein benutzerdefiniertes Metafeld innerhalb des benutzerdefinierten Beitragstyps zu durchsuchen? Ich suche seit Tagen und dies ist das nächstgelegene Skript, das ich finden konnte. Im Moment durchsucht es die Titel und den Inhalt des Beitrags, aber ich habe eine Menge benutzerdefinierter Felder für das CPT und möchte, dass der Benutzer nur ein bestimmtes Feld durchsucht. Gedanken?

  5. Ist es möglich, diese Anweisungen anzupassen, um eine benutzerdefinierte Taxonomie anstelle eines benutzerdefinierten Beitrags zu durchsuchen? Ich versuche, eine separate Suche für jede benutzerdefinierte Taxonomie zurückzugeben, und ich komme nicht ganz dahinter. Danke!

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

  7. 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.

  8. 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

  9. 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

  10. 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!

  11. Brillant. Danke. Du rockst!

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

  12. Brillant. Danke. Du rockst!

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

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

  15. 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);
      ?>

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

  17. Gut gemacht, Sir. Toller Tipp.

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

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

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

    Vielen Dank! 🙂

  21. 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?

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

    1. Welchen Fehler erhalten Sie?

  23. 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.

     

  24.  function custom_search_template() {

    $search_refer = $_GET[“post_type”];

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

    }

  25. 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);
      ?>

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!