web-dev-qa-db-fra.com

Comment rendre une meta_query optionnelle?

J'ai ajouté cet extrait de code à mon functions.php pour pouvoir envoyer une demande à un type d'article personnalisé et le filtrer par book_id.

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

  return $args;
} );

je peux donc faire une demande à ' http: // localhost: port/wp-json/wp/v2/gallery? book_id = 9780061992254 ' gallery est un type de publication personnalisé et bookd_id est l'un de ses Les champs personnalisés

le problème que je rencontre ici est après cela, je ne peux pas faire de demandes à /wp-json/wp/v2/gallery sans book_id anymmore et j'ai vraiment besoin de pouvoir le faire, comment puis-je me débarrasser de cette situation? Je cherchais un moyen de rendre ce param optionnel mais je n'ai encore rien trouvé

3
Wagner Moreira

Ce n'est pas si difficile. Tout ce que vous avez à faire est d'ajouter une condition et de vérifier si le paramètre book_id est passé. Vous pouvez même vérifier si ce paramètre est correct (par exemple, si book_id doit être un nombre, alors vous pouvez le vérifier):

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