«

»

Meir om post_class i WordPress

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

Dette er eit oppfølgjarinnlegg til Fjern tag og category frå post_class i WordPress. Målet med det gamle innlegget var å ta i bruk WordPress-funksjonen post_class, men utan at den legg til alle kategoriar og merkelappar. Dersom du bruker mange merkelappar, vil du kunne spara bandbredde på tenaren din på å ikkje ha dei med i kjeldekoden.

I det førre innlegget gjekk me ut frå at du har ein bunad du held ved like sjølv, og endra difor funksjonen direkte i bunadfilene. Dette er ikkje alltid like lurt. Eg vil difor sjå på to andre vis du kan fjerna tag og category frå funksjonen. Me skal sjå på etterkomarbunader (child theme) og innstikk (plugin).

Bunad

Den fyrste måten er å oppretta ein etterkomarbunad, eller child theme som det heiter på godt bokmål. Opprett ei mappe i /wp-content/themes/. Den skal heita det same som mappa til bunaden vår, men med -child til sist. Me kan bruka Twenty Eleven-bunaden som døme. Den ligg i mappa /wp-content/themes/twentyeleven/, så den nye mappa vår må difor heita /wp-content/themes/twentyeleven-child/. Her opprettar me så fila style.css her, med følgjande innhald (byt ut klammene med det som passar):

/*
Theme Name: [Ny tittel på bunaden]
Template: twentyeleven
*/
@import url("../twentyeleven/style.css");

Dette er alt som er påkravd å ha med i ein etterkomarbunad. I tillegg kan me også ha med det følgjande før lina med */

  • Author
  • Author URI
  • Description
  • Status
  • Tags
  • Theme URI
  • Version

Lina med @import hentar inn alt som trengst frå den overordna (foreldre-)bunaden, og me kan endra på kva me måtte ynskja utan å måtte byggja opp ein heilt ny bunad. Nett no ville me syta for at funksjonen post_class ikkje listar opp emneord og kategoriar. I twentyeleven-bunaden ligg koden me skal endra på i content.php, så me kopierer difor denne fila over til mappa vår. Me opnar fila. Funksjonen me skal endra på, står på line 11:

11
12
	<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
		<header class="entry-header">

Me byter det ut med koden me ynskjer:

11
12
13
14
15
16
17
18
19
20
21
22
	<article id="post-<?php the_ID(); ?>" class="<?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 $postklassar;
	 ?>">
		<header class="entry-header">

I WordPress, gå til Utsjånad-menyen og aktiver etterkomarbunaden.

Sånn ja!

Innstikk

Det fungerte bra med ein etterkomarbunad, men kva skjer viss me bytar til noko anna enn Twenty Eleven? Vel, i staden for å byta funksjonen ut i bunadfilene, kan me endra den direkte med eit innstikk. WordPress let oss gjera dette med ein funksjon som heiter add_filter. I mappa /wp-content/plugins/ kan me oppretta fila minefunksjonar.php med følgjande innhald (byt ut klammene med det som passar):

1
2
3
4
5
<?php
/*
Plugin Name: [Mine funksjonar]
*/
?>

Dette er det absolutt minimum me må ha med i innstikket, men me kan også ha med før lina med */

  • Author
  • Author URI
  • Description
  • Domain Path
  • Network
  • Plugin URI
  • Text Domain
  • Version

For å endra post_class, skriver me ein ny funksjon:

function min_eigen_post_class($classes) {
	$emneklassar = array();
	foreach ($classes as $verdi) {
		$tag = strripos($verdi, 'tag-');
		$cat = strripos($verdi, 'category-');
		if ($tag !== false OR $cat !== false) $emneklassar[]=$verdi;
	}
	$classes = array_diff($classes, $emneklassar);
	return $classes;
}

Funksjonen add_filter bruker me slik:

add_filter('post_class', 'min_eigen_post_class');

Det er ikkje påkravd å kommentera kjeldekoden, men eg oppmodar deg til å gjera det likevel. Du kan anten kommentera med /* Kommentar */, eller // Kommentar. Den fyrste kan gå over fleire liner, medan den siste berre kommenterer ut resten av lina. Kor detaljerte kommentarane skal vera lyt vera opp til deg. Men heller for mykje kommentering enn for lite!

Set me alt saman, ser minefunksjonar.php-fila kanskje slik ut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
/*
Plugin Name: [Tittel]
*/
 
/*******************************************************************
 * Funksjon: min_eigen_post_class
 * Gjer:     Fjerner tag og category frå utskrifta av post_class
 * Dato:     2012-10-21
 * Merknad:  Bruker add_filter til å endra post_class
/*******************************************************************/
function min_eigen_post_class($classes) {
	$emneklassar = array(); // klargjer ein ny tabell
	foreach ($classes as $verdi) { // gå gjennom klassetabell, verdi for verdi
		$tag = strripos($verdi, 'tag-'); // Er verdi "tag-"?
		$cat = strripos($verdi, 'category-'); // Er verdi "cat-"?
		if ($tag !== false OR $cat !== false) $emneklassar[]=$verdi; 
		// Viss tag-/cat-, legg verdi til i den nye tabellen
	}
	$classes = array_diff($classes, $emneklassar); 
	//Samanlikn tabellane. Fjern alt i den nye tabellen frå klassetabellen.
	return $classes; // Returner klassetabellen
}
add_filter('post_class','ny_post_class'); // filter for WordPress
 
?>

I WordPress, gå til Innstikk-menyen og aktiver Mine funksjonar-innstikket.

Gje innspel