web-dev-qa-db-de.com

Wie mache ich eine meta_query optional?

Ich habe dieses Codefragment zu meinem functions.php hinzugefügt, um eine Anforderung an einen benutzerdefinierten Beitragstyp zu senden und nach book_id zu filtern.

add_filter( 'rest_gallery_query', function( $args ) {
  $args['meta_query'] = array(
    array(
      'key'   => 'book_id',
      'value' => esc_sql( $_GET['book_id'] ),
    )
  );

  return $args;
} );

damit kann ich eine Anfrage an ' http: // localhost: port/wp-json/wp/v2/gallery? book_id = 9780061992254 ' gallery ist ein benutzerdefinierter Beitragstyp und bookd_id ist einer seiner Benutzerdefinierte Felder

das Problem, das ich hier habe, ist, dass ich danach keine Anfragen mehr an /wp-json/wp/v2/gallery ohne book_id stellen kann, und ich muss es wirklich können. Wie kann ich diese Situation beseitigen? Ich habe nach einer Möglichkeit gesucht, diesen Parameter optional zu machen, aber noch nichts gefunden

3
Wagner Moreira

Es ist nicht so schwer. Sie müssen lediglich eine Bedingung hinzufügen und prüfen, ob der Parameter book_id übergeben wurde. Sie können sogar überprüfen, ob dieser Parameter korrekt ist (zum Beispiel, ob die book_id eine Zahl sein sollte, dann können Sie überprüfen, ob dies der Fall ist):

add_filter( 'rest_gallery_query', function( $args ) {
    if ( trim($_GET['book_id']) ) {  // check if book_id is passed and is not empty, but you can modify this condition
        $args['meta_query'] = array(
            array(
                'key'   => 'book_id',
                'value' => trim( $_GET['book_id'] ),  // <- you don't need to esc_sql this
            )
        );
    }

    return $args;
} );
2