En bedre tegneserieside, del 1: 404 not found

Jeg har lige gennemført et storstilet redesign af tegneseriesiden.dk og vil da gerne dele et par af de tricks jeg har fået fyret af i koden. Til at starte med vil jeg komme lidt ind på hvad jeg har gjort ved min 404.php, altså den fil, som håndterer når en url ikke er fundet på serveren.

Den fil, der fulgte med mit tema var ikke meget bevendt – den skrev “404 not found” i en level 2-heading og det var såmænd det:

[code='php']

Error 404 - Not Found


[/code]
Oh, i en centreret level 2-heading. Ikke noget at skrive hjem om, med andre ord.

Der var meget at tage fat på – jeg ville have et søgefelt, arkiver, tagcloud og så kom et par andre ting til hen ad vejen.

Til at starte med kom søgefeltet, arkiverne (via plugin’et Smarter Archives) og tagclouden (via Wp 2.3) – det var sådan set nemt nok:
[code='php']

Åh nej!

Den side du bad om er her ikke.

Måske har den aldrig været her.
Måske har den været her en gang, men har skiftet navn.
Måske har den forladt os for aldrig at vende tilbage.

Det er altsammen meget godt, men hvad skal du så gøre nu?

En mulighed kunne være søgning:

Ellers kunne du måske bruge arkivfunktionen eller tagcloud'en til noget:

Arkiv for tegneseriesiden

Tags


[/code]

Bedre. Jeg installerede så Alex Kings plugin Popularity Contest, som kan udregne hvilke indlæg der er de mest populære. Måske folk ledte efter et af de populære indlæg, når de ramte ved siden af? Koden er nem at inkludere, så de fem mest populære indlæg kom med på min 404:

[code='php']

Du kunne også kigge på de 5 populæreste indlæg:

[/code]

Jeg syntes at jeg var færdig, da jeg faldt over denne artikel – søgeresultater inkluderet på 404, gættet ud fra den URL man har forsøgt at tilgå? Nice. Meget nice.

Jeg væltede noget mere kode ind i min 404, som endte med at se sådan ud:
[code='php'] header("HTTP/1.1 404 Not Found");
header ("Pragma: no-cache"); // HTTP 1.0
header ("Expires: Mon, 25 Jul 1995 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP 1.1
header ("Cache-Control: post-check=0, pre-check=0, false"); // HTTP 1.1
// echo "\n\n";

// her pilles 404-urlen fra hinanden
$search_term = substr($_SERVER['REQUEST_URI'],1);
$search_term = urldecode(stripslashes($search_term));
$find = array ("'.html'", "'.+/'", "'[-/_]'") ;
$replace = " " ;
$search_term = trim(preg_replace ( $find , $replace , $search_term ));
$search_term_q = preg_replace('/ /', '%20', $search_term);
get_header() ?>

Åh nej!

Den side du bad om er her ikke.

Måske har den aldrig været her.
Måske har den været her en gang, men har skiftet navn.
Måske har den forladt os for aldrig at vende tilbage.

Det er altsammen meget godt, men hvad skal du så gøre nu?

En mulighed kunne være søgning:

query_posts('showposts=5&s='. $search_term_q );
?>
/* check om der er hits på søgetermet inden vi går videre */ ?>

Du har muligvis kigget efter

    while ( have_posts() ) : the_post(); ?>


  • Skrevet d.
  • endwhile; ?>

else : endif; ?>

Du kunne også kigge på de 5 populæreste indlæg:

Ellers kunne du måske bruge arkivfunktionen eller tagcloud'en til noget:

Arkiv for tegneseriesiden

Tags

[/code]

Jeg har også tilføjet nogle http-headers til filen, men jeg er ikke sikker på andet end at WordPress selv tilføjer dem. Men hellere at de er der end at de mangler…

Nu kan vi prøve det af – en nonsens-URL som http://tegneseriesiden.dk/mlfaslonsfo udløser ikke nogle søgeresultater, da “mlfaslonsfo” ikke findes i databasen (det må jeg så gøre noget ved!).
Hvis man rammer ved siden af med http://tegneseriesiden.dk/batman findes ordet “batman” i databasen og man får 5 forslag, endda med søgeordet præsenteret i the_excerpt via plugin’et Search Excerpt. Mums.

Jeg er sådan set færdig med min 404 nu, med mindre der er nogen der påpeger enten graverende fejl eller vilde forbedringsforslag.

Spørgsmål?
Stil dem, så skal jeg forsøge at svare – jeg er ikke noget kodegeni, men god til at samle bidder sammen og få dem til at virke, og kan som sådan svare ud fra den egenskab.