2016-08-11 4 views
0

Ich kann nur keine Antwort finden, noch kann ich verwandte Artikel für meine spezifischen Fälle finden (oder ich fand, aber nicht erkannte).Wordpress Pre_get_posts Filterung mit erweiterten benutzerdefinierten Feldern

So habe ich normale Blog-Beiträge, und ich habe benutzerdefinierte Feldname "Tag", wo ich nur 1 Wort "Musik" (Tag ist Texttyp).

Meine php alle Beiträge für die Auswahl, die "Musik" in "Tag" haben, ist:

add_filter('query_vars', function($vars) { 
$vars[] = 'tag'; 

return $vars; 
}); 


add_action('pre_get_posts', function ($query) { 
if (!empty($_GET)) { 

    if ($tag = get_query_var('tag', false)) { 
     $meta_query[] = array(
      'key' => 'tag', 
      'value'  => $tag, 
      'compare' => '=' 
     ); 
    } 

    $query->query_vars['meta_query'] = $meta_query; 
} 
}, 1); 

Nun, wenn ich in url zum Beispiel eingeben: localhost/myblog/tag = Musik keine der Beiträge sind zeigen, sogar ich habe wenige Posts mit "Musik" in "Tag" -Feld. Ich möchte zuerst eine Lösung für diesen einfachen Fall bekommen, weil ich weiß, was ich falsch mache.

Auch möchte ich Lösung, wenn ich mehrere Wert im Textfeld "Tag" zum Beispiel machen wollen: "Musik, Film, Pop, Leben" so, wenn Leute in der Suche "Leben Film" eingeben sie alle Beiträge mit diese spezifischen Felder. Danke und Entschuldigung für größere Textwand als erwartet. Jede Hilfe wird geschätzt.

Antwort

0

Wie ich aus Ihrer Erklärung verstehe, ist "Tag" nur ein benutzerdefiniertes Feld, keine Taxonomie. Sie müssen also keine Abfrage var überprüfen, verwenden Sie einfach "Meta-Abfrage" und das ist alles.

add_action('pre_get_posts', 'make_my_query'); 

function make_my_query($query) { 
    if (!is_admin() && !empty($_GET) && isset($_GET['tag']) && $query->is_main_query()) { 
    $query->set('meta_query', array(array(
     'key' => 'tag', 
     'value' => sanitize_text_field($_GET['tag']) 
    ))); 
    } 
} 

Wenn Sie diese Schnipsel verwenden, werden Hauptabfrage auf Seite enthält nur Beiträge mit benutzerdefinierten Feldschlüssel „Tag“ und den Wert von $ _GET. Ich habe einige Überprüfungen hinzugefügt, um sicher zu sein, dass wir das Admin-Panel nicht anzeigen und die modifizierte Abfrage die Hauptabfrage auf der Seite ist. Sonst könnte es etwas Unordnung sein. Auch habe ich GET Wert saniert.

Nun, Ihre zweite Frage. Es ist möglich, aber wir müssen unser Snippet modifizieren. Lassen Sie uns zuerst entscheiden, wie werden die Leute nach mehreren Tags fragen? Ich bevorzuge Kommas. So wird die URL aussehen: localhost/myblog /? Tag = Musik, Film. Nun wollen wir es zu WP-Abfrage senden:

add_action('pre_get_posts', 'make_my_query'); 

function make_my_query($query) { 
    if (!is_admin() && !empty($_GET) && isset($_GET['tag'] && $query->is_main_query()) { 
    $get_params = explode(',', $_GET['tag']); 
    $meta_query = array(
     'relation' => 'OR' 
    ); 
    foreach ($get_params as $param) { 
     $meta_query[] = array(
     'key' => 'tag', 
     'value' => sanitize_text_field($param) 
    ); 
    } 
    $query->set('meta_query', $meta_query); 
    } 
} 

Das ist alles. Leute, die nach Posts mit "? Tag = film, music" fragen, sehen Beiträge, die "film" oder "Musik" -Wert von "tag" -Feld haben. Wenn Sie Posts anzeigen möchten, die nur alle angeforderten Tags haben, ändern Sie "relation" von "OR" zu "AND". Ich hoffe, das hilft!

+0

ich danke Ihnen für die Antwort, aber immer noch scheint nicht zu funktionieren, keines der Beispiele. Nun, ich habe nicht manuell Funktionen für acf in meiner functions.php registriert, ich habe sie nur über das Admin-Panel hinzugefügt, vielleicht muss ich sie registrieren ..? Entschuldigung, dass ich dich belästige, das scheint einfach genug zu sein, funktioniert aber einfach nicht für mich. –

0

EDIT: Ich habe ein tatsächliches Problem gefunden ... Ich kann mein benutzerdefiniertes Feld "tag" nicht nennen, weil aus irgendeinem Grund www.example.com/?tag=music einige seltsame Fehler gibt. Der Name des benutzerdefinierten Felds wurde in einen anderen Namen (z. B. Tags) geändert, und es funktioniert. Seltsam und ich hoffe, dass jemand es nützlich findet.

Verwandte Themen