[WordPress] Limitez la recherche à un type particulier de billets


Depuis la version 3.0 de la plateforme WordPress, il est possible de créer ses types propres de billets. Appelée Custom Post Types, cette fonctionnalité permet de différencier des types de contenu et surtout de proposer une interface de saisie particulièrement adaptée.

Par exemple, dans la prochain thème de Websourcing, vous verrez apparaitre un nouveau type de billets que j’ai baptisé « QuickPress » (rien à voir avec le truc par défaut de WordPress).

J’ai donc déclaré ce type personnalisé :

register_post_type('quickpress', array(
		'label' => __('QuickPress'),
		'singular_label' => __('QuickPress'),
		'public' => true,
		'show_ui' => true,
		'capability_type' => 'post',
		'hierarchical' => false,
		'supports' => array('title', 'author', 'thumbnail', 'custom-fields', 'comments')
	));

Cela donne dans l’admin de WordPress, une interface épurée, avec juste un titre et une source :

Pour en savoir plus sur cette fonctionnalité, lisez le billet de BBX à ce sujet.

 
Bref, tout ca pour dire que j’ai également implémenté une fonctionnalité de recherche sélective par type de billets. C’est ce que je souhaite partager dans ce billet.

WordPress permet de faire ces recherches sélectives très facilement. Par défaut, la plateforme va chercher dans tous les billets, les pages, …
Imaginez que vous souhaitiez limiter la recherche dans les billets de types « QuickPress » lorsque vous visualisez une liste de billets de ce type.

Rien de plus simple, il suffit de créer une fonction comme ce qui suit :

function selectQuickPress($query) {
    if ($query->is_search) {
        $query->set('post_type', 'quickpress');
    }
    return $query;
}

add_filter('pre_get_posts','selectQuickPress');

Pour limiter ce filtre à un template particulier, il faudra modifier l’expression $query->is_search.

Il suffit de copier et adapter ce bout de code dans le fichier functions.php de votre thème.