Sous WordPress, afficher le contenu d’un article ou d’une page à partir de son identifiant

Il arrive d’avoir besoin d’afficher le corps d’un post indépendamment de la boucle d’articles.

J’utilise ça pour afficher des pages cachées (privées) comme une sous-partie d’une page. Cette technique constitue une alternative au Widget « Texte », lequel oblige l’utilisateur à manipuler du code HTML. Par exemple, combiné avec un plug-in d’affichage de vidéos dans un article, le choix d’une vidéo accompagnée d’un texte à afficher en page d’accueil devient une opération accessible à l’utilisateur.

Voici la fonction PHP :

function cpnetPrintPostContent($postId, $postStatus = null, $withTitle = false) {
	global $wpdb;
	// - sql
	$sql = "select p.ID as post_id, p.post_content, p.post_title
from $wpdb->posts p
where p.ID = $postId" . (isset($postStatus) ? " and p.post_status = '" . $postStatus . "'" : '');
	// - load from cache or db
	$queryKey = 'cpnetPrintPostContent_' . md5($sql);
	$rs = wp_cache_get($queryKey, 'this-site');
	if (false === $rs) {
		$rs = $wpdb->get_results($sql, ARRAY_A);
		if (null === $rs)
			$rs = '';
		wp_cache_set($queryKey, $rs, 'this-site');
	}
	// - print
	if (!$rs || empty($rs))
		return;
	$row = $rs[0];
	if ($withTitle)
		echo '<h3>' . $row['post_title'] . '</h3>';
	$html = apply_filters('the_content', $row['post_content']);
	echo $html;
}

Le code est aisé à comprendre. En premier lieu la requête SQL est créée. Ensuite, on tente de charger le résultat du cache. J’utilise 'this-site' comme ensemble de cache mais il est possible d’utiliser la chaîne de caractère que l’on veut. Si le résultat n’était pas dans le cache, alors il est extrait depuis la base de données et ajouté au cache dans le même ensemble de cache. L’appel de la fonction apply_filters applique les éventuelles modifications des plug-ins. Puis le contenu est affiché.

Leave a Reply

Your email address will not be published. Required fields are marked *

Mesure anti-spam. Merci de copier le code « 9TnDDq » dans le champ ci-dessous :