Ik heb deze snippet al een aantal jaren geleden binnen een blogpost de revue laten passeren. Het probleem is echter, dat veel van de code snippets die ik in blogposts laat zien niet zo makkelijk teruggevonden worden door mensen die op zoek zijn naar een specifieke oplossing.
Het blogartikel ging er namelijk over, hoe je je website psychologisch aantrekkelijker kan maken. Wanneer jouw concrete vraag is ‘hoe kan ik mijn zoekresultaten beperken tot specifieke (custom) post types’ dan zou je niet echt het idee hebben, dat je in dat artikel de oplossing voor je probleem zou kunnen vinden.
Vandaar dat ik veel snippets uit blogposts toch nog maar eens ‘geïsoleerd’ opneem. Zoals deze hier.
Het probleem is dus, dat ik niet alle custom post types in de zoekresultaten terug wil zien komen. Ik wil bijvoorbeeld wel zoeken in ‘post’, maar niet in ‘page’. Of wel in ‘product’ en ‘post’… maar niet in de mogelijk 34 andere post types die ik heb, en niet in de zoekresultaten getoond wil hebben.
Dat kan vrij eenvoudig.
<?php
if ( !is_admin() ) {
function wxp_searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('product','post'));
}
return $query;
}
add_filter('pre_get_posts','wxp_searchfilter');
}
In bovenstaand voorbeeld zal alleen gezocht worden in ‘Berichten’ (post) en ‘Producten’ (product). En in geen enkel ander post type.
We werkelijke magie zit hem in regel 5. De post typen die (tussen aanhalingstekens en komma gescheiden) tussen haakjes bij het woordje ‘array’ staan, dat zijn de enige post typen die getoond zullen worden.