Responsive slider in WordPress met backend

Door 19 april 2013Tips & Trucs

Voor WordPress zijn er gigantisch veel sliders te vinden als plugin. Ik was op zoek naar een responsive slider voor in de header met een gemakkelijke backend om foto’s toe te voegen. Na een lange speurtocht besloten om dit zelf te regelen. Uiteindelijk gekozen voor een populaire slider: Nivo Slider. De Javascript en CSS bestanden toegevoegd in “lib/scripts.php” en de nodige HTML in de header. In mijn geval in “header-top-navbar.php” gezien ik gebruik maak van het Roots starter theme. Top, maar nu de backend? Er zit al een mediabibliotheek in de WordPress backend, waarom hier niet gebruik van maken! Afbeeldingen kunnen geupload, geroteerd, gespiegeld, geschaald en bijgesneden worden. Helemaal compleet dus! Maar niet alle afbeeldingen in de mediabibliotheek moeten in de slider komen. Zodoende gekozen voor een “filter” op de “alt-text” ofwel alternatieve tekst mocht de afbeelding niet weergegeven kunnen worden. Wanneer die gelijk is aan “slider” moet deze in de slider komen. Na wat zoek werk in de database tot de volgende MySQL query gekomen:

SELECT
	second.meta_value
FROM
	wp_postmeta as first
JOIN
	wp_postmeta as second
ON
	first.post_id = second.post_id AND second.meta_key = "_wp_attached_file"
WHERE
	first.meta_value="slider"

Hierbij wordt gezocht naar “meta_value”: “slider”. Aan de hand van het “post_id” wordt gezocht naar de afbeelding welke als “meta_key”: “_wp_attached_file” heeft. Dit verwerkt naar “WordPress taal” met daarbij de multidimensionale array geconverteerd naar een enkele array met als resultaat:

$results = $wpdb->get_results('
	SELECT
		second.meta_value
	FROM
		'.$wpdb->postmeta.' as first
	JOIN
		'.$wpdb->postmeta.' as second
	ON
		first.post_id = second.post_id AND second.meta_key = "_wp_attached_file"
	WHERE
		first.meta_value="slider"
	',ARRAY_N);
$results = array_map(function($array){return $array[0];},$results);

Nu het resultaat nog in de slider zetten:

<div id="slider" class="nivoSlider">
	<? foreach($results as $result): ?>
	<img src="assets/<?=$result;?>" alt="">
	<? endforeach; ?>
</div>

Typisch weer een oplossing op mijn “slogan” gebaseerd: Waarom moeilijk doen als het makkelijk kan!