Code voorbeeld

WordPress search.php per custom post type

Leestijd: 2 minuten (457) words
profile image

Rick de Jong

Strategie

January 10, 2013 08:04

WordPress search.php per custom post type

Een aparte pagina voor case- en nieuwsresultaten

Voor een van onze klanten was ik opzoek naar een manier om per custom post type een aparte resultaat pagina te tonen. Waar dit erg eenvoudig is in een archive en een single (archive-custom_post_type.php / single-custom_post_type.php) moet je hier voor de zoekresultaten pagina iets meer moeite doen.

De oplossing bleek uiteindelijk redelijk eenvoudig, je moet alleen even een klein trucje uithalen. Zie hieronder.

Zoekformulier aanpassen

Stel dat je - net als ik - in een archive page van het custom post type "verslagen" een zoekformulier hebt, welke alleen de resultaten mag laten zien van die verslagen. Zet dan de volgende waarde extra in je zoekformulier.

<input name="post_type" type="hidden" value="verslagen" />

Je ziet de value "verslagen". Deze pas je uiteraard aan naar het custom post type dat jij zoekt. De name post_type gaan we later opvragen om een template te kunnen kiezen. Het volledige zoekformulier komt er vervolgens zo uit te zien.

<form id="searchform" action="<?php bloginfo('url'); ?>/" method="get">
     <input id="s" maxlength="150" name="s" type="text" value="" class="txt" />
     <input name="post_type" type="hidden" value="verslagen" />
     <input type="submit" value="zoeken">
</form>

Let hierbij wederom op dat de value verslagen door jou aangepast moet worden naar het post_type dat je zoekt.

Doorsturen zoekopdracht

We gaan nu naar search.php en voegen de volgende code toe:

$posttype = $_GET["post_type"];
if ($posttype == 'verslagen') 
 { load_template(TEMPLATEPATH . '/template-verslagen.php'); }
 else { load_template(TEMPLATEPATH . '/template-normaal.php'); };

Zoals je ziet een simpel if / else statement waarbij we kijken of het meegestuurde post type verslagen is (wederom pas je die dus aan). Zo ja, laad template-verslagen.php in en zo nee, laad een normale template. Uiteraard kun je ook deze template namen aanpassen. Binnen die templates maak je vervolgens je zoekresultaten pagina. Het laatste trucje dat we hier nog moeten toevoegen is de volgende: in de template die de custom posts moet ophalen zet je boven de if have post code:

<?php
       $args = array(
               'post_type'=> 'verslagen',
               's'    => $s);
               query_posts($args);
?>

En jawel, ook hier pas je verslagen aan naar het post type dat je zoekt.