Une offre limitée avec un shortcode

26-02-2014 - 318 mots - temps de lecture estimé ~ 2 minutes

Voir le post

J’ai eu à construire une petite astuce sans prétention que j’aimerais partager avec vous aujourd’hui.

L’idée est de permettre au rédacteur du post d’utiliser un shortcode pour écrire une offre limitée dans le temps.

Pourquoi un shortcode?

Cela m’a paru l’outil le mieux adapté. C’est souple et paramétrable et le code qui va suivre montre qu’il n’y aura pas besoin d’aller mettre à jour le post.

J’ai donc utilisé une vielle astuce, enfin sur le principe, que j’avais montrée en screencast : Date de péremption dépassée?. Je vais donc intégrer la date de publication du post en référence et partir de là pour établir une durée limitée.

MAJ  du 02/03/2014

Cette MAJ utilise donc la classe DateTime() de PHP pour un calcul plus fin et donc une portée plus importante du code c’est à dire tenant compte des décalages de temps tels qu’heure d’été/heure d’hiver : voir le commentaire de JB

PS : aidez-vous de ce lien aussi si vous devez utiliser la classe DateTime.

add_shortcode( 'limited', '_jm_limited_offer' );
function _jm_limited_offer( $atts, $content = null ) {

	//params du shortcode
	$a = shortcode_atts(array(
	'interval' => 1,
	'text' => 'La promo est terminée'
	), $atts, 'jmlo_shortcode');

	//quelques vars
	global $post;
	$current = current_time("c");
	$post_time = get_the_time("c", $post->post_date);
	$d1 = new DateTime( $post_time );
	$d2 = new DateTime( $current );
	$iv = $d2->diff($d1);

	//verif et nettoyage des params
	$interval = ( is_int($a['interval'] ) ) ? $a['interval']  : 1 ;// on vérifie qu'on a pas n'importe quoi de rentré dans le param

	//L'intervalle en jours avec la classe DateTime() de PHP (merci à jb)
	$diff = $iv->format('%d');

	//résultat
	return $limited = ( $diff < $interval ) ? do_shortcode($content) : $a['text'] ;
}

Utilisation

Il suffira pour l’utiliser d’écrire ceci dans les posts pour une offre d’une durée de 2 jours:

[limited interval="2" text="Vous avez raté l'offre exceptionnelle!"]Offre exceptionnelle ![/limited]

Conclusion

Une technique simple mais qui peut servir je pense. Qu’en pensez-vous?

comments powered by Disqus