Filtern von benutzerdefinierten Posts nach benutzerdefinierten Feldern (ACF)

Ich arbeite auf einer Seite mit Fotowettbewerben. Jeder Wettbewerb hat viele zusätzliche Informationen, die ich in benutzerdefinierten Feldern speichern kann (dank Advanced Custom Fields). Jetzt möchte ich durch Wettbewerbe suchen, die sie basierend auf einigen benutzerdefinierten Feldwerten filtern.

Meine function.php Datei sieht folgendermaßen aus:

 // Custom Post Search add_action('pre_get_posts', 'my_pre_get_posts'); function my_pre_get_posts( $query ) { // validate if( is_admin() ) { return; } if( !$query->is_main_query() ) { return; } if( !empty($_GET['fee']) ) { $contestFee = explode(',', $_GET['fee']); $contestFeeArray = array( 'key' => 'fee', 'value' => $contestFee, 'compare' => 'IN', ); } if( !empty($_GET['theme']) ) { $contestTheme = explode(',', $_GET['theme']); $contestThemeArray = array( 'key' => 'theme', 'value' => $contestTheme, 'compare' => 'IN', ); } $meta_query[] = array( 'relation' => 'OR', $contestThemeArray, $contestFeeArray, ); $query->set('meta_query', $meta_query); return; } ?> 

Jetzt frage ich meine Suche wie diese website.com/contests/?fee=free&theme=landscape und hier ist das Problem. Wenn ich nur fee anfrage, funktioniert alles einwandfrei. Aber wenn ich theme Wert abfragen möchte, wird nichts angezeigt.

Ich get_field_object auch Arrays hinzu, die über get_field_object angezeigt werden (eine function von Advanced Custom Fields):

fee benutzerdefinierte Feld

 Array ( [ID] => 136 [key] => field_553bee3a1f8ff [label] => Is contest paid or free? [name] => fee [prefix] => [type] => radio [value] => free [menu_order] => 7 [instructions] => [required] => 1 [id] => [class] => [conditional_logic] => 0 [parent] => 8 [wrapper] => Array ( [width] => [class] => [id] => ) [_name] => fee [_input] => [_valid] => 1 [choices] => Array ( [free] => Free [paid] => Paid ) [other_choice] => 0 [save_other_choice] => 0 [default_value] => free [layout] => vertical ) 

theme benutzerdefinierte Feld

 Array ( [ID] => 23 [key] => field_5523fed672b4b [label] => Theme [name] => theme [prefix] => [type] => select [value] => Array ( [0] => nude [1] => people [2] => fine-art ) [menu_order] => 12 [instructions] => [required] => 1 [id] => [class] => [conditional_logic] => 0 [parent] => 8 [wrapper] => Array ( [width] => [class] => [id] => ) [_name] => theme [_input] => [_valid] => 1 [choices] => Array ( [aerial] => Aerial [fine-art] => Fine Art [landscape] => Landscape [nature] => Nature [nude] => Nude [people] => People [wildlife] => Wildlife ) [default_value] => Array ( [] => ) [allow_null] => 0 [multiple] => 1 [ui] => 1 [ajax] => 1 [placeholder] => [disabled] => 0 [readonly] => 0 ) 

Also, um es abzuschließen – Ich möchte benutzerdefinierte Beiträge (Wettbewerbe) abfragen über website.com/contests/?fee=free&theme=landscape suchen und in diesem Fall Wettbewerb anzeigen, die frei sind und Landschaftsthema haben.

Ich kann nicht herausfinden, was mit meinem Code nicht stimmt. Hast du irgendwelche Ideen, wie das funktioniert?

Vielen Dank!

Solutions Collecting From Web of "Filtern von benutzerdefinierten Posts nach benutzerdefinierten Feldern (ACF)"

Ok, nach eingehender Recherche habe ich herausgefunden, dass Werte von einigen benutzerdefinierten Feldern, die von ACF erstellt wurden, in der MySQL-database mit einigen zusätzlichen Informationen gespeichert werden wie a:5:{i:0;s:6:"Aerial";i:1;s:6:"Nature";i:2;s:4:"Nude";i:3;s:6:"People";i:4;s:8:‌​"Wildlife";} . Dies passiert, wenn ein benutzerdefiniertes Feld mehrere Werte speichern kann (wie zB Chechboxen).

Also habe ich einen Teil meiner Abfrage von diesem bearbeitet: if (! Empty ($ _ GET [‘theme’])) {$ contestTheme = explodieren (‘,’, $ _GET [‘theme’]);

  $contestThemeArray = array( 'key' => 'theme', 'value' => $contestTheme, 'compare' => 'IN', ); } 

Zu diesem:

 if( !empty($_GET['contest_theme']) ) { $contestTheme = explode(',', $_GET['contest_theme']); $contestThemeArray = array('relation' => 'OR'); foreach ($contestTheme as $theme) { $contestThemeArray[] = array( 'key' => 'contest_theme', 'value' => $theme, 'compare' => 'LIKE', ); } }