Dans ce chapitre nous allons parler du hook pre_get_posts. Ce hook permet d'altérer une requête avant son éxécution et va notamment permettre d'altérer la requête principale de WordPress pour y ajouter des filtres spécifiques.

/**
 * @param WP_Query $query
 */
function montheme_pre_get_posts ($query) {
    if (is_admin() || !is_search() || !$query->is_main_query()) {
        return;
    }
    if (get_query_var('sponso') === '1') {
        $meta_query = $query->get('meta_query', []);
        $meta_query[] = [
            'key' => SponsoMetaBox::META_KEY,
            'compare' => 'EXISTS',
        ];
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_posts', 'montheme_pre_get_posts');

Vous pouvez aussi utiliser le filtre query_vars pour permettre à WordPress de gérer de nouveau mots clef au niveau de l'URL.

function montheme_query_vars ($params) {
    $params[] = 'sponso';
    return $params;
}
add_filter('query_vars', 'montheme_query_vars');