Suche nach Metawerten mit unangemessenem Ergebnis

Ich arbeite an einer benutzerdefinierten Suche nach Meta-Wert und verwende dies:

print_r($_REQUEST); $args = array( 'post_type' => 'property_post', 'posts_per_page' => 10, 'order' => 'ASC', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'custom_textarea', 'value' => 'me', // if I use static keyword it works 'compare' => 'LIKE' ), array( 'key' => 'custom_price', 'value' => array( $_REQUEST['custom_price'], $_REQUEST['custom_price1'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'custom_beds', 'value' => $_REQUEST['custom_beds'], 'compare' => '=' ), array( 'key' => 'custom_bath', 'value' => $_REQUEST['custom_bath'], 'compare' => '=' ), array( 'key' => 'custom_garage', 'value' => $_REQUEST['custom_garage'], 'compare' => '=' ) ) ); 

Wenn ich ein statisches Schlüsselwort für Meta-Wert verwende, funktioniert es, aber mit $_REQUEST nicht. Ich habe $_REQUEST mit print_r($_REQUEST) überprüft:

 Array ( [custom_textarea] => aa[custom_price] => 1000 [custom_price1] => 4000[custom_beds] => 2[custom_garage] => 1) 

Also, was soll ich tun, damit es funktioniert?

Solutions Collecting From Web of "Suche nach Metawerten mit unangemessenem Ergebnis"

Zuallererst sollte man sich niemals auf rohe $_REQUEST : Glauben Sie mir, das ist ein Sicherheitsproblem.

PHP hat 2 functionen: filter_input und filter_input_array , die Ihnen helfen, Ihre filter_input filter_input_array .

Darüber hinaus sehe ich in Ihrem Anfrage-Dump kein $_REQUEST['custom_bath'] , aber Sie verwenden diesen Wert, der eine Ursache für das Problem sein kann. Sie sollten prüfen, ob eine Variable gesetzt ist, bevor Sie sie verwenden.

Mit meinen Vorschlägen wird Ihr Code so etwas

 $args = array( 'custom_textarea' => FILTER_SANITIZE_STRING, 'custom_price' => FILTER_VALIDATE_INT, 'custom_price1' => FILTER_VALIDATE_INT, 'custom_beds' => FILTER_SANITIZE_STRING, 'custom_bath' => FILTER_SANITIZE_STRING, 'custom_garage' => FILTER_SANITIZE_STRING ); $get = filter_input_array( INPUT_GET, $args, TRUE ); $post = filter_input_array( INPUT_POST, $args, TRUE ); $request = array_merge( $get, $post ); $query_args = array( 'relation' => 'OR' ); if ( ! empty( $request['custom_textarea'] ) ) { $query_args[] = array( 'key' => 'custom_textarea', 'value' => "%{$request['custom_textarea']}%", 'compare' => 'LIKE' ); } if ( ! empty( $request['custom_price'] ) && ! empty($request['custom_price1']) ) { $query_args[] = array( 'key' => 'custom_price', 'value' => array( "{$request['custom_price']}", "{$request['custom_price1']}" ), 'compare' => 'BETWEEN', 'type' => 'SIGNED' ); } if ( ! empty( $request['custom_beds'] ) ) { $query_args[] = array( 'key' => 'custom_beds', 'value' => "{$request['custom_beds']}", ); } if ( ! empty( $request['custom_bath'] ) ) { $query_args[] = array( 'key' => 'custom_bath', 'value' => "{$request['custom_bath']}", ); } if ( ! empty( $request['custom_garage'] ) ) { $query_args[] = array( 'key' => 'custom_garage', 'value' => "{$request['custom_garage']}", ); } $query = new WP_Query( $query_args ); 

Das Problem ist, wenn Sie eine String-Variable haben WordPress fügt der Variablen nicht automatisch Anführungszeichen hinzu und daher erzeugt der Suchfilter kein Ergebnis.

Ich schlage die folgende Antwort vor.

 $custom_textarea = '\''.$_REQUEST['custom_textarea'].'\''; // declare a variable something like this. 

Und dann wäre deine meta_query :

 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'custom_textarea', 'value' => $custom_textarea, 'compare' => 'LIKE' ), array( 'key' => 'custom_price', 'value' => array( $_REQUEST['custom_price'], $_REQUEST['custom_price1'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'custom_beds', 'value' => $_REQUEST['custom_beds'], 'compare' => '=' ), array( 'key' => 'custom_bath', 'value' => $_REQUEST['custom_bath'], 'compare' => '=' ), array( 'key' => 'custom_garage', 'value' => $_REQUEST['custom_garage'], 'compare' => '=' ) ) 

Für meine benutze ich es so auf der Suchergebnisseite:

 $pricemax = $_POST['price']; 

dann in der Abfrage …

 array( 'key' => 'custom_rent', 'value' => array('', $pricemax), 'compare' => 'BETWEEN', 'type' => 'NUMERIC' ), 

Hilft das? Versuchen Sie, $ _POST statt $ _REQUEST zu verwenden?