«

»

Fjern tag og category frå post_class i WordPress

Merknad: Dette innlegget er fleire år gammalt. Informasjonen kan vere utdatert og eg kan ha endra syn sidan då.

Eg tykkjer «lim fast»-funksjonen i WordPress er kjekk. Då kan eg ein gong i blant leita opp innlegg frå arkivet mitt og syna dei fram på framsida. Dette skulle eg gjera i dag med Dei beste sumarfilmane. Problemet var berre at utan ein eigen stil til dei fastlimte innlegga, ser dei ut til å høyra til den vanlege straumen av innlegg. Folk som vitjar meg no, vil kanskje titta på datoen til det øvste innlegget, sjå at den er i mai 2008 og dimed tru at eg aldri oppdaterer veven min. Eg kan rett nok vera litt passiv til tider, men ille er eg ikkje. Det beste hadde vore om dei fastlimte innlegga såg annleis ut enn dei andre, og det er her funksjonen post_class kjem inn i biletet.

Malen din for hovudsida ser kanskje slik ut:

<?php while (have_posts()) : the_post(); ?>
    <div class="post" id="post-<?php the_ID(); ?>">
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        <?php the_content(); ?>
    </div>
<?php endwhile; ?>

I staden for class="post", kan du skriva <?php post_class(); ?>. Då vil alle innlegg få klassen post, og fastlimte innlegg får klassen sticky. Du kan til og med leggja til eigne klassar: <?php post_class('minklasse, minklasse2'); ?>. Kjempekjekt. Det er berre eitt lite problem. Funksjonen legg òg til ein heil drøss av andre klassar, ein for kvar merkjelapp og kategori. Det kan fort verta mange klassar per post. Ta til dømes sumarfilm-innlegget:

<div id="post-1263" class="
  post-1263 post sticky hentry category-film category-topp-ti 
  tag-a-scanner-darkly tag-american-graffiti tag-black-snake-moan tag-die-hard 
  tag-dirty-dancing tag-for-en-neve-dollar tag-grease tag-haisommer tag-hitchcock 
  tag-hva-er-det-med-gilbert-grape tag-independence-day tag-look-both-ways 
  tag-modern-times tag-pirates-of-the-caribbean tag-rear-window tag-reprise 
  tag-saturday-night-fever tag-smala-sussie tag-sumarfilm tag-til-siste-andedrag 
  tag-volver tag-x-files">

Eg kan nok tenkja meg stader der merkjelapp-klassane kan vera kjekk, men akkurat no treng eg ikkje det. Så korleis vert eg kvitt dei?

Det finst sikkert fleire vis å gjera det på. Den eg snikra i hop på fem minutt er nok ikkje så veldig elegant, men då kan kanskje du kan forbetra han:

<?php 
$postklassar = get_post_class(); 
foreach ($postklassar as $nykel => $verdi) {
    $pos = strripos($verdi, 'tag-');
    if ($pos !== false) {
        unset($postklassar[$nykel]);
    }
    $pos = strripos($verdi, 'category-');
    if ($pos !== false) {
        unset($postklassar[$nykel]);
    }
}
$postklassar = implode(' ', $postklassar);
echo 'class="'.$postklassar.'"';
?>

Dette kan du til dømes setja inn der class="post" står, eller du kan laga ein funksjon i functions.php-fila di. Det skulle vera sjølvsagt kva denne vesle kodebiten gjer, men eg kan forklara grovt: Fyrst hentar me ein tabell med klassenamna. Så tittar me på kvar rad av tabellen (og passar på at me hugsar kva radnummer det er). Viss me finn strengen «tag-» eller «category-» på rada, fjerner me den frå tabellen. Til slutt gjer me tabellen om til ein streng, og skriv han ut. På sumarfilm-innlegget ser det no slik ut:

<div id="post-1263" class="post sticky hentry">

Mykje betre!

Gje innspel