Filtern Sie WP_Query nach Posts mit einem bestimmten Metawert

7

Wie filtere ich WP_Query nach Posts mit einem bestimmten Metawert, ohne eine benutzerdefinierte Auswahlabfrage zu verwenden?

Ich habe einen benutzerdefinierten Posttyp mit Meta-Schlüssel: "Öffnen" und Meta-Wert-Optionen: "Ja" oder "Nein".

Ich möchte Beiträge nur mit meta_value = yes für meta_key = "open" anzeigen.

function filter_where($where = '') {    

    $open = "yes";

    //$where .= " AND post_date > '" . date('Y-m-d', strtotime('-2 days')) . "'";
    return $where;
}
add_filter('posts_where', 'filter_where');
Henk Jan.
quelle
Tun Sie dies in einer Vorlagendatei? Können Sie dann den vollständigen Code Ihrer Vorlagendatei veröffentlichen? Ist dies die Hauptschleife dieser Seite?
Jan Fabry

Antworten:

11

Ich bin mir aus Ihrer Formulierung nicht sicher, ob Sie es nicht mit einem Abfrageargument versucht haben oder ob es nicht funktioniert hat?

$the_query = new WP_Query(array( 'meta_key' => 'open', 'meta_value' => 'yes' ));

Benutzerdefinierte Feldparameter im Codex.

Selten
quelle
Vielen Dank für Ihre schnelle Antwort. Ich habe das versucht, aber aus irgendeinem Grund funktioniert es bei mir nicht. Denn es wirft eine 404.
Henk Jan
Wo haben Sie den Code platziert?
t31os
Ich habe es nach meiner $ paged-Einstellung in ein $ args-Array eingefügt: $ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1; und vorher: $ temp = $ wp_query; $ wp_query = null; $ wp_query = new WP_Query ($ args);
Henk
@Henk Jan bitte Code zu Ihrer Frage hinzufügen, Kommentar sind dafür ungeeignet
Rarst
Mein benutzerdefinierter Beitragstyp wurde nicht ordnungsgemäß in der Datenbank registriert. Nachdem ich das behoben hatte, hat Ihre Lösung den Trick getan. Vielen Dank.
Henk
1
 $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'custom-key' 
    AND wposts.post_type = 'page' 
    ORDER BY wpostmeta.meta_value DESC
    ";
Pragya
quelle
2
Eine Erklärung würde uns sagen, warum dies eine Antwort ist.
Brian Fegter
Verdoppeln Sie das. Außerdem: Verwenden Sie die $wpdbMethoden, wenn Sie Abfragen durchführen.
Kaiser