Vous avez peut-être déjà eu besoin d'afficher ou de retourner le nombre d'articles publiés sur votre site, selon un custom post type ou non.
La fonction WordPress qui nous aide est la suivante : wp_count_posts(). Malheureusement si vous utilisez le plugin WPML, le nombre d’articles retourné compte en fait toutes les langues sans distinction. Nous ne voulons pas ça !
Comment faire simple ? Voilà la nouvelle fonction à utiliser, vous pouvez la coller dans votre fichier functions.php :
function baw_count_posts($args) { // Si on passe juste un type de post en chaine, on force la construction du tableau $args = is_string($args) ? array('post_type'=>$args) : $args; // valeurs par défaut $default = array('post_type'=>'post', 'perm'=>'', 'lang'=>'', 'post_status'=>'publish'); // croisement des valeurs par défaut avec celles passées en paramètre $args = wp_parse_args($args, $default); // extraction des variables extract($args, EXTR_SKIP); // on vérifie que WPML est activé avec leur globale, si "non", on fait appel à la fonction WordPress à la place global $sitepress; if(!$sitepress) return wp_count_posts($post_type, $perm); // Si on a déjà en cache notre valeur on la renvoie $count = wp_cache_get($post_type, 'counts'); if (false !== $count) return (object)array($post_status=>$count); // On récupère la classe globale WPDB (WordPress DataBase) global $wpdb; // Si on a pas fourni de langue dans les paramètres on prends la valeur de WPML sinon "fr" if(empty($lang)) $lang = defined('ICL_LANGUAGE_CODE')?ICL_LANGUAGE_CODE:'fr'; // simple raccourci pour gagner de la place en nombre de caractères (place que je perds avec ce commentaire ;p) $p = $wpdb->prefix; // La requête magique $query = "SELECT COUNT({$p}posts.ID) FROM {$p}posts LEFT JOIN {$p}icl_translations ON {$p}posts.ID = {$p}icl_translations.element_id WHERE {$p}posts.post_status='{$post_status}' AND {$p}posts.post_type='{$post_type}' AND {$p}icl_translations.language_code = '{$lang}' AND {$p}icl_translations.element_type = 'post_{$post_type}'"; // on lance la requête $count = $wpdb->get_var($query); // Mise en cache wp_cache_set($post_type, $count, 'counts'); // Construction de l'object de retour $count = (object)array($post_status=>$count); // Envoie de la valeur return $count; }
Voici comment l’utiliser en comparaison de la véritable fonction WordPress :
Avant pour récupérer le nombre d’articles publié :
Néanmoins, il n’est pas possible d’utiliser la fonction via un hook car il n’en existe pas qui permette de modifier le comportement de la fonction WordPress. S’il s’agit d’un plugin ou d’un thème qui vous sort le mauvais résultat, alors il va falloir le modifier pour remplacer les appels de wp_count_posts() en baw_count_posts().
Par Julio Potier
Consultant en Sécurité & Expert WordPress, je développe et sécurise du contenu Web tous les jours. La création de plugins WordPress fait partie de mon quotidien. Mon livre de chevet ? Le codex WordPress bien sûr !
Le 18 mars 2017 aura lieu le premier WordCamp Bordeaux. Un WordCamp c’est le terme officiel pour désigner les évènements organisés par les communautés locales qui…
J’ai du ajouter quelques réglages pour gérer les widgets en multi-langues aussi. Néanmoins je n’est pas eu le besoin de compter les articles en fonction des langues. Mais qui sais cela servira peut être .
Découvrez les extensions WordPress qui allient l’intelligence artificielle pour vous aider à générer du contenu de qualité en un rien de temps. L’IA au…
WP-CLI est un outil incontournable pour les utilisateurs de WordPress. Il permet de gérer efficacement un site en utilisant des lignes de commande dans…
Améliorez les performances de votre site WordPress en optimisant vos images avec Imagify. Découvrez comment utiliser cette extension pour compresser vos images, générez une…
Certains fichiers vectoriels qui portent l’extension SVG pour Scalable Vector Graphics ne sont pas toujours correctement formatés. Ce phénomène génère un problème d’affichage lors…
Hmm, c’est un article très spécifique au plugin WPML, donc aux personnes qui l’utilisent. J’ai utiliser ce plugin de multi-langues récemment pour créer le site d’une entreprise et il est super ! voici l’article au sujet du site en question :
http://www.f4-design.fr/categorie/creation_de_site_internet/refonte-de-site-internet-pour-lespace-thermal-de-dax/
J’ai du ajouter quelques réglages pour gérer les widgets en multi-langues aussi. Néanmoins je n’est pas eu le besoin de compter les articles en fonction des langues. Mais qui sais cela servira peut être .
Merci d’avoir partager ton développement.
Pour utiliser ce plugin depuis des années et pour avoir suivi son évolution, je dois dire que c’est l’idéal !