Wordpress: hakutulosten muotoilu
Olen aiemmin liittänyt tekemilleni Wordpress-pohjaisille sivuille vain hakukentän sivu-/yläpalkkiin ja mahdolliselle arkistosivulle. Hakutuloksena olevat kirjoitukset ovat listautuneet ilman sen kummempia kommervenkkejä. Eilen uutta blogiulkoasua viilaillessa päätin panostaa myös hakutulosten esittämiseen, vaikka minulla ei olekaan tietoa, kuinka paljon hakua loppupeleissä käytetään.

Nyt, kun blogissani käyttää joko oikeasta palkista tai blogiarkistosta löytyvää hakukenttää, hakutulokset (esimerkiksi “nikon d60“) esitetään “googlemaisempaan” tyyliin. Hakutulokset alkavat otsikolla (Hakutulokset). Tämän jälkeen kerrotaan, montako kirjoitusta löytyi ja mitä hakulauseketta käytettiin. Näiden jälkeen kerrotaan, että hakutuloskirjoituksista listataan lyhennelmät (”teaserit”) uusimmasta vanhimpaan, ja miten kirjoituksen voi nähdä kokonaan. Lopuksi, ennen hakutuloksia, annetaan mahdollisuus uuteen hakuun.
Wordpressin oletusteemasta löytyy search.php-sivutemplaatti, jota käytetään hakutulosten esittämiseen, jos kyseinen tiedosto löytyy tyylikansiosta. Tätä tiedostoa muokkaamalla hakutuloslistauksen saa näyttämään omanlaiseltaan. Olen koonnut alle muutaman koodinpätkän, jotka upotin omaan search.php-templaattiini sen lisäksi, että muokkasin templaatin vastaamaan ulkonäöllisesti muita templaatteja.
Huom! Oletan, että lukijalle/koodeja hyödyntävälle Wordpress ja PHP ovat ennestään tuttuja. Tätä ei siis ole tarkoitettu Wordpress-aloittelijoille.
Hakutulosten lukumäärä
Löysin Perishable Press-sivulta koodinpätkän, joka laskee hakutulosten määrän. Koodin voi lisätä mihin kohtaan tahansa <?php if (have_posts()) : ?> -pätkän jälkeen:
<?php
$search = new WP_Query("s=$s & showposts=-1");
if($search->have_posts()) : while($search->have_posts()) : $search->the_post();
$search_count++;
endwhile; endif;
?>
Tämän jälkeen hakutulosten lukumäärän $search_count voi tulostaa mihin haluaa. Tein lukumäärän ilmoitukseen vielä ehdon, että “kirjoitus” taivutetaan eri tavalla, jos hakutuloksia on vain yksi:
Blogista löytyy
<?php echo $search_count;
if($search_count == 1) { echo " kirjoitus";}
else { echo " kirjoitusta"; }?>
hakulausekkeella "<?php the_search_query(); ?>".
Lopussa oleva <?php the_search_query(); ?> -pätkä tulostaa käytetyn hakulausekkeen.
Hakutulosten lyhennelmä
Jotta käyttäjän olisi helpompi käydä hakutulokset läpi, hakutuloksista olisi hyvä näyttää vain pätkä antamaan suuntaa kirjoituksen sisällöstä. Jos käyttää blogikirjoituksissa muutenkin “Lue lisää sisäsivulta” -tyylistä katkaisua, voi hakutulosten varsinaisen tekstisisällön tulostaa samalla tavalla kuin muillakin sivuilla:
<div class="postcontent">
<?php the_content(__('(Lue lisää sisäsivulta.)')); ?>
</div>
Jos puolestaan listaa normaalisti kirjoitukset kokonaisuudessaan, kuten minä teen, eikä kirjoituksissa ole <!-- more --> -katkaisuja, ratkaisu löytyy Wordpressin the_excerpt() -funktiosta. Kun the_content() -funktion korvaa the_excerpt -funktiolla, kirjoituksista listataan 55 ensimmäistä sanaa ja teksti katkaistaan kolmella pisteellä:
<div class="postcontent">
<?php the_excerpt(); ?>
</div>