Erweiterte Suche nach Meta-Feldern

Ich versuche verzweifelt, ein erweitertes Suchformular zu erstellen, um Beiträge nach ihren Meta-Feldern zu erhalten. Ich habe das:

[UPDATE]: Dies ist der korrekte Code:

/** *Registering custom query vars * */ function sy_register_query_var( $vars ){ $vars[] = 'type'; $vars[] = 'cabins'; $vars[] = 'base'; return $vars; } add_filter( 'query_vars', 'sy_register_query_var' ); is_main_query() ){ return; } $query->set( 'type', get_query_var( 'type' ) ); $query->set( 'people', get_query_var( 'people' ) ); $query->set( 'base', get_query_var( 'base' ) ); $query->set( 'duration', get_query_var( 'duration' ) ); if( !is_post_type_archive( 'fleet' ) ){ return; } $meta_query = array(); if( !empty( get_query_var( 'type' ) ) ) { $meta_query[] = array( 'key' => 'type', 'value' => get_query_var( 'type' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'people' ) ) ){ $meta_query[] = array( 'key' => 'people', 'value' => get_query_var( 'people' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'base' ) ) ){ $meta_query[] = array( 'key' => 'base', 'value' => get_query_var( 'base' ), 'compare' => 'LIKE' ); } elseif ( !empty( get_query_var( 'duration' ) ) ){ $meta_query[] = array( 'key' => 'duration', 'value' => get_query_var( 'duration' ), 'compare' => 'LIKE' ); } if( count( $meta_query ) > 1 ){ $meta_query['relation'] = 'AND'; } if( count( $meta_query ) > 0 ){ $query->set( 'meta_query', array($meta_query) ); } } add_action( 'pre_get_posts', 'sy_pre_get_posts', 1 ); function sy_search_form(){ $select_type = ''; $select_type .= '' . __( 'Type', 'syacht' ) . ''; $select_type .= '' . __( 'Motor', 'syacht' ) . ''; $select_type .= '' . __( 'Sailing', 'syacht' ) . ''; $select_type .= '' . __( 'Ribs', 'syacht' ) . ''; $select_type .= '' . __( 'Caiques', 'syacht' ) . ''; $select_type .= '' . __( 'Spead Boats', 'syacht' ) . ''; $select_type .= '' . "\n"; $select_people = ''; $select_people .= '' . __( 'People', 'syacht' ) . ''; $select_people .= '' . __( '3 or less', 'syacht' ) . ''; $select_people .= '' . __( '4-6', 'syacht' ) . ''; $select_people .= '' . __( '6 or more', 'syacht' ) . ''; $select_people .= '' . "\n"; $select_base = ''; $select_base .= '' . __( 'Base', 'syacht' ) . ''; $select_base .= '' . __( 'Mykonos', 'syacht' ) . ''; $select_base .= '' . __( 'Old Port', 'syacht' ) . ''; $select_base .= '' . "\n"; $select_duration = ''; $select_duration .= '' . __( 'Duration', 'syacht' ) . ''; $select_duration .= '' . __( '1 to 3 days', 'syacht' ) . ''; $select_duration .= '' . __( '1 week', 'syacht' ) . ''; $select_duration .= '' . __( '2 weeks', 'syacht' ) . ''; $select_duration .= '' . "\n"; $output = ''; return $output; } 

Eigentlich funktioniert diese Form, aber überhaupt nicht. Tatsächlich werden auf der Suchseite alle Beiträge angezeigt, die zum benutzerdefinierten Postfachtyp “Flotte” gehören. Sie werden nicht nach den von mir festgelegten Suchbegriffen gefiltert. Warum das? Wo ist der Fehler? Bitte seit Tagen versuche ich, das Problem zu lösen. Danke allen.

PS: Bitte, schlage kein Plugin vor. Ich habe schon viele ausprobiert, und keiner von ihnen hat funktioniert.

Solutions Collecting From Web of "Erweiterte Suche nach Meta-Feldern"

Der Parameter meta_query muss ein Array Array sein, wenn Sie eine Beziehung zwischen verschiedenen Schlüsseln hinzufügen möchten, auch wenn sie nur einen zu greifenden Schlüssel enthalten.

Also $ query-> set (‘meta_query’, $ meta_query);

Muss sein

 $query->set( 'meta_query', array($meta_query) ); 

Weitere Informationen finden Sie unter WP_Query .

Hoffe es hilft und arbeitet, ich suche nur nach diesen Details 😉