it-swarm.com.de

Kann mir jemand mit dieser Funktion weiterhelfen?

Ich versuche, eine Funktion für meine functions.php-Datei zu schreiben. Ich muss folgendes tun;

  • durchlaufen Sie die Suchergebnisse und überprüfen Sie die Vorlage
  • wenn die Vorlage "landing.php" ist, fügen Sie sie zum Anzeigenarray hinzu
  • verwenden Sie die im Array gesammelten IDs, um diese Seiten aus den Suchergebnissen auszuschließen.

Ich habe Code im Wordpress Codex-Forum gefunden, habe selbst ein bisschen hinzugefügt, weiß aber leider nicht, was ich tue ...

function filter_where($where = '') {
global $wpdb; // do I need this?
if ( is_search() ) {
    if(is_page_template('landing.php')) { echo 'yes!'; } // ids collected here
    $exclude = array(286);  

    for($x=0;$x<count($exclude);$x++){
      $where .= " AND ID != ".$exclude[$x];
    }
}
return $where;
}
add_filter('posts_where', 'filter_where');
1
Dan

Der von Ihnen verwendete Filter posts_where wirkt sich auf die Erstellung von SQL-Abfragen aus. Daher wird er per Definition ausgeführt, bevor die Abfrage ausgeführt wird und Sie Suchergebnisse erhalten.

Sie können die Ergebnisse an dieser Stelle nicht durchlaufen. Sie können also eine Liste unerwünschter Elemente von einer anderen Stelle abrufen oder fest codieren und sie zum Ändern der Abfrage verwenden.

Update

Ok, das ist schneller zu programmieren als mit Kommentaren zu lösen. Dies ist wahrscheinlich nicht perfekt, sollte aber ein guter Ausgangspunkt für das sein, was Sie wollen:

add_action('pre_get_posts','exclude_pages');

function exclude_pages( $query ) {

    if( !empty( $query->query_vars['s'] ) ) {

        $pages = get_posts(array(
                            'post_type' => 'page',
                            'meta_query' => array( array(
                                'key' => '_wp_page_template',
                                'value' => 'landing.php',
                            )),
                           ));

        $exclude = array();

        foreach( $pages as $page )
            $exclude[] = $page->ID;

        $query->set('post__not_in', $exclude);
    }
}
0
Rarst

Wenn Sie bestimmte Seiten oder Posts aus Ihren Suchergebnissen entfernen müssen, können Sie dies ganz einfach mit dem Plugin " WP Hide Post " tun.

Der Beschreibung zufolge: "Ermöglicht es Ihnen, die Sichtbarkeit von Elementen in Ihrem Blog zu steuern, indem Sie Beiträge/Seiten in einigen Teilen Ihres Blogs ausblenden, während sie in anderen Teilen weiterhin sichtbar sind."

Insbesondere können Sie mit diesem Plugin die Sichtbarkeit eines Posts in verschiedenen Ansichten steuern:

  • Die Startseite (Homepage, abhängig von Ihrem Thema, dies ist möglicherweise nicht relevant)
  • Die Kategorieseite (Auflistung der Beiträge, die zu einer Kategorie gehören)
  • Die Tag-Seite (Auflistung der Beiträge, die mit einem bestimmten Tag versehen sind)
  • Die Autoren-Seite (Auflistung der Beiträge eines Autors)
  • Die Archivseiten (Auflistung der Beiträge, die zu einem bestimmten Zeitraum gehören: Monat, Woche, Tag usw.)
  • Die Suchergebnisse
  • Einspeisungen

Die Beiträge verschwinden an den Stellen, an denen Sie sie zum Verschwinden ausgewählt haben. Überall sonst werden sie als reguläre Beiträge angezeigt. Insbesondere funktionieren Permalinks der Posts immer noch, und wenn Sie eine Sitemap mit so etwas wie den Google XML-Sitemaps erstellen, wird der Post auch dort angezeigt. Dies bedeutet, dass der Inhalt Ihres Beitrags indiziert und von Suchmaschinen durchsucht werden kann.

Für eine WordPress Seite können Sie mit diesem Plugin auch die Sichtbarkeit mit zwei Optionen steuern:

  • Blenden Sie eine Seite nur auf der Startseite aus.
  • Überall im Blog eine Seite ausblenden ( Das Ausblenden der Seite in den Suchergebnissen ist optional).
0
Paulo Coghi