WordPress-Suchfunktion, um nur Beiträge zu durchsuchen

Lesezeit: 4 Minuten

Benutzeravatar von Davey
Davey

Ich möchte die WordPress-Suchfunktion verwenden, aber ich möchte, dass sie nur meine Blog-Beiträge durchsucht und meine statischen Seiten von der Abfrage ausschließt. Wie macht man das? Ich bin nicht gegen die Verwendung eines Plugins.

  • Ihr Fix wird überschrieben, wenn Sie WordPress aktualisieren.

    – kͩeͣmͮpͥ ͩ

    14. November 2012 um 12:25 Uhr

Antwort ist hier

http://www.shilling.id.au/2011/06/23/wordpress-search-only-show-post-and-not-pages/

<?php
function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');
?>

  • Die akzeptierte Antwort (und der verlinkte Forumsbeitrag) skizzieren schlechte Ergebnisse. Es ist nie eine gute Idee, Core-Dateien zu bearbeiten, und das Überspringen von Ergebnissen in der foreach-Schleife könnte zu unordentlichen Dingen führen, wenn es um Paginierung geht. Dieser Haken ist eine viel bessere Lösung!

    – mjsarfatti

    7. Juli 2013 um 13:48 Uhr

  • Das ist eigentlich nicht eine gute Antwort, es sei denn, Sie möchten nur in JEDEM Suchfeld auf Ihrer Website nach Beiträgen suchen. Daher werden alle Suchfelder im Admin-Bereich und anderswo wahrscheinlich kaputt gehen, es sei denn, Sie möchten sie alle nur zum Durchsuchen von Beiträgen verwenden. Dies ist möglicherweise nicht sofort nach der Implementierung dieser Lösung offensichtlich, aber Sie können darauf wetten, dass es später zu Problemen führen wird.

    – mikebeck

    27. August 2015 um 4:51 Uhr


  • Gibt es eine Möglichkeit, diese Funktion in einer Suchleiste zum Laufen zu bringen, die nur auf Blogseiten angezeigt wird? Es scheint, als wäre dies für den WP-Administrator gedacht, aber ich versuche, etwas auf der Benutzerseite zu machen, damit sie Blog-Posts von jeder /blog/-Seite aus durchsuchen können.

    – James

    23. Februar 2021 um 21:33 Uhr

Einfach hinzufügen <input type="hidden" name="post_type" value="post" /> zum Themensuchformular… Grüße!

  • Leider ist dies nicht in allen Fällen möglich (oder einfach) umzusetzen. Zum Beispiel wird mein Suchformular von Elementor erstellt und ich kann es nicht bearbeiten.

    – Gérard Reches

    6. Juli 2020 um 19:00 Uhr

Diese Lösung bewirkt, dass die Suche nur Beiträge abruft, wenn Sie keinen anderen Beitragstyp angegeben haben. Diese Methode stört nicht, wenn Sie einen benutzerdefinierten Beitragstyp in einem versteckten Feld in einem anderen Suchfeld angeben.

function searchFilter($query) {
    if ($query->is_search) {
        if ( !isset($query->query_vars['post_type']) ) {
            $query->set('post_type', 'post');
        }
    }
    return $query;
}
add_filter('pre_get_posts','searchFilter');

Diese Seite des wp-Forums enthält eine Reihe verschiedener Beispiele, wie Sie dies tun können, je nachdem, wo Sie Ihre Website bearbeiten möchten (index.php oder wp-includes/query.php sind meiner Meinung nach Ihre Optionen):

http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

Die skizzierten Lösungen sind schlecht. Das Bearbeiten des Kerns behindert die Aufrüstbarkeit der WordPress-Installation – Sie müssen diese Änderung bei jedem Update wiederholen, was Sie tun sollten. Die andere Lösung belastet die Datenbank unnötig, indem sie Ergebnisse filtert nach sie abrufen. Die bessere Lösung:

Fügen Sie in der functions.php Ihres Themes eine neue Funktion hinzu, um ein Suchformular zu schreiben:

function custom_search_form( $form, $value = "Search", $post_type="post" ) {
    $form_value = (isset($value)) ? $value : attribute_escape(apply_filters('the_search_query', get_search_query()));
    $form = '<form method="get" id="searchform" action="' . get_option('home') . "https://stackoverflow.com/" >
    <div>
        <input type="hidden" name="post_type" value="'.$post_type.'" />
        <input type="text" value="' . $form_value . '" name="s" id="s" />
        <input type="submit" id="searchsubmit" value="'.attribute_escape(__('Search')).'" />
    </div>
    </form>';
    return $form;
}

Nun, in der Vorlage, in der Sie das Formular haben möchten (oder in allen Widgets, die Sie erstellt haben, könnte dies stattdessen einfach als Widget registriert werden), dies:

<?= custom_search_form( null, 'Search posts', 'post'); ?>

Die Argumente könnten aus der Funktion & dem Aufruf weggelassen werden, aber ich finde sie hilfreich. Der Schlüssel zu dieser ganzen Sache ist der versteckte Eingang ‘post_type’, der den Wert an die Abfrage übergibt. Der Standard, poststellt sicher, dass nur Beiträge zurückgegeben werden.

  • Eigentlich funktioniert das nicht. Es gibt alle Seiten sowie Beiträge in der Suche zurück.

    – AndyWarren

    21. April 2013 um 14:10 Uhr

  • Eigentlich funktioniert das. Das ist IMO die beste Lösung.

    – mikebeck

    27. August 2015 um 5:01 Uhr

Benutzeravatar von fomicz
fomiz

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type=='page')) continue; ?>

Probieren Sie dieses aus und sagen Sie mir, ob es funktioniert.

  • Eigentlich funktioniert das nicht. Es gibt alle Seiten sowie Beiträge in der Suche zurück.

    – AndyWarren

    21. April 2013 um 14:10 Uhr

  • Eigentlich funktioniert das. Das ist IMO die beste Lösung.

    – mikebeck

    27. August 2015 um 5:01 Uhr

Benutzeravatar von Deepu
Deepu

Führen Sie die Abfrage mit der globalen Abfrage zusammen.

   global $wp_query;    
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );  
   query_posts( $args );

1405680cookie-checkWordPress-Suchfunktion, um nur Beiträge zu durchsuchen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy