En préparant et testant la nouvelle version 1.0 de xili-re-un-attach media, la redirection ne fonctionnait plus comme dans l’avant-dernière version. Pourquoi ?
Parce qu’aveuglément “pour la sécurité” selon les recommandations récentes de WordPress ! la fonction esc_html avait été ajoutée pour créer les liens de redirection utilisant add_query_arg…
ce qui donne :
... post.php?post=274&action=edit&message=1
et non
... post.php?post=274&action=edit&message=1
or la function wp_redirect() ne redirigait pas à la bonne page…
donc pas de esc_html quand on a un bon contrôle du lien notamment au sein du code !
Il y a plus de 5 ans, quand xili-language a été créée, en gros il y avait deux extensions d’architecture très différentes WPML et qTranslate et aucune des deux ne respectaient l’architecture du noyau WordPress puisque la première ajoutait de nombreuses tables et la seconde modifiait le contenu des posts en compactant les différentes languages dans chacun des champs. C’est vrai que les taxonomies venaient d’apparaître avec WP 2.3. Aujourd’hui, l’offre est pléthorique comme la comparaison en cours tente de le montrer.
Deux extensions sont apparues récemment et leur architecture, une fois installée vont compromettre plus ou moins gravement la base de données. “Multilanguage” ajoute des tables pour mettre les traductions des posts donc sans extension, impossible de les récupérer. WPGlobus “Multilingual everything” lui modifie comme qTranslate (et ses successeurs qTranslateX) les contenus comme le montre les tables de la base ci-dessous:
et quand on rend multilingue (via les onglets), on note la modification importante des champs de la table post… chaque champ contenant ici les trois langues entre {} ! Comment vont alors se faire les requêtes ? En tout cas pas selon les règles de WP_Query 🙁
“Babble” n’utilise pas les taxonomies mais les custom post types pour ranger les posts selon la langue. Pas facile pour les requêtes… à suivre car par encore officiellement dans le dépôt des plugins (repository).
Travailler avec un gestionnaire de contenus (CMS) tel que WordPress nécessite quelques principes dont le premier est de conserver l’intégrité des données avant et après l’ajout d’étiquette qui spécifie le langage (taxonomie) ou les liens avec des articles correspondants dans d’autres langues (champ personnalisé). C’est le principe de base de la trilogie xili-language établi dès sa création et qui perdure de la version de WP 2.3 à la 4.2 qui va bientôt sortir.
Dans les lignes ci-dessous, WP_Query est appelé avec les variables (query_vars) utilisées dans l’URL. Normalement le résultat est bon, car de toute façon, la requête sera traduite dans des matrices de paramètres (taxinomie)
TRUCS: Mais il est plus précis de formuler la requête directement en matrice (array) (rappeler vous que ‘language’ est une taxonomie depuis 6 ans dans xili-language):
En examinant le fichier archive.php du thème Twenty Fifteen on note des nouvelles fonctions pour afficher le titre et la description de la catégorie concernée. Depuis WP 4.1, 6 nouvelles fonctions utilisables dans la création de thème apparaissent dans wp-includes/general-template.php.
Celle qui nous intéresse ici est
the_archive_description( '
', '
' );
Cette fonction d’affichage appelle get_the_archive_description() qui appelle term_description() via un filtre get_the_archive_description ; ce filtre est intéressant pour traduire le contenu à la volée dans un contexte multilingue…
Surprise ou plutôt comme précédemment, le texte de la description saisie initialement et stocké dans la base est délivré toujours encapsulé de la base html p.
Cette encapsulation est faite par un filtre créé par défaut add_filter( ‘term_description’, ‘wpautop’) dans le fichier wp-includes/default-filters.php. Ce filtre est activé dans sanitize_term_field() du fichier wp-includes/taxonomy.php parce que pour WP, la donnée est destinée à être afichée (display) d’où ces tags 🙁 .
Il faut donc faire un traitement avant d’appliquer la fonction de traduction :
// new in WP 4.1 - will be incorporated in XL 2.17
add_filter ( 'get_the_archive_description', 'xili_get_the_archive_description' );
function xili_get_the_archive_description ( $description ){
if (!$description) return '';
preg_match('/
(.*)/', $description, $match); // ever return description with
with default filter wpautop for display description
return '
' . translate( $match[1] , 'twentyfifteen' ) . '
';
}
Noter que l’on utilise ici la fonction gettext ‘translate‘ au lieu de __() parce qu’une variable est traitée pour traduction.
A gauche, ce thème livré par défaut “2015” a prévu de pouvoir afficher un petit texte sous chaque élément du menu. Pour une catégorie, il s’agit de la description définie au moment de la déclaration de la catégorie. La version 1.0.1 du thème enfant 2015-xili ici en action ajoute, dans son fichier functions.php un filtre (walker_nav_menu_start_el) lié au ‘Walker’ après avoir enlevé celui créé par le thème parent 2015 (remove_filter( 'walker_nav_menu_start_el', 'twentyfifteen_nav_description');).
Cette nouvelle partie du Walker apporte deux choses :
La traduction de la description de l’item menu,
Le contexte (menu_description dans la fonction gettext) pour cette traduction qui permet de modifier la longueur des textes pour le menu. Les traductions seront donc différentes de celles du texte utilisé souvent par exemple en tête de page catégorie.
Comme la description est parfois longue même dans la langue racine (en_us) on peut créer une traduction en_us avec un texte plus court convenant mieux au menu. C’est l’occasion de rappeler que le texte codé en dur dans le thème peut toujours être adapté par son adaptation/traduction. L’extension xili-dictionary permet de faire cela rapidement ‘en ligne’ sans passer par poEdit sur son ordinateur.
Quelque soit l’origine du flux (feed) RSS, on est obligé de constater que l’affichage se fait toujours par date des éléments, de la plus récente (ou future) à la plus ancienne. Pourquoi ?
Parce qu’en fait si on se promène dans le source des widgets par défaut (default-widgets.php - class WP_Widget_RSS), on observe que le flux est le résultat d’une fonction (fetch_feed) qui elle même fait appelle à une classe d’un framework SimplePie. Or dans cette classe (SimplePie), le tri se fait par défaut par la date décroissante… La solution
Il faut donc utiliser le filtre (wp_feed_options de fetch_feed) et utiliser la méthode (enable_order_by_date) qui est prévue dans la classe pour annuler ce tri d’affichage. Ce sera donc le tri du flux lui-même prévu dans la requête du site distant qui sera pris en compte.
Dans l’exemple ci-dessous, on pourrait faire un test pour n’appliquer ce filtre qu’à quelques urls…
Dans un site, ce filtre permet de conserver le tri du flux délivré par le site distant qui donne la date d’un évènement à venir, on souhaitait donc conserver la chronologie normale.
Ce site multilingue sert à démontrer ici les potentialités du thème enfant Twenty Fifteen xili dans le contexte multilingue créé par la trilogie des extensions xili-language avec les articles les plus récents sur le site de Twenty Fourteen xili.
Au fur et à mesure des progrès et des versions, on découvre des parties du code WordPress pleine de richesse ou de vieillerie. Via une note ou un article plus long, nous partageons notre retour d’expérience. La première note concernera une façon de débloquer l’ordre de tri d’un flux (feed) RSS affiché via le widget de base..
Comme les années précédentes depuis 2009, voici donc le compte-rendu sélectif, partiel et partial des deux jours annuels (23-24/1/2015) consacrés à WordPress et organisés par l’équipe dévouée de WP-FR.net.
C’est donc la 7e réunion de ce type à laquelle je participe à Paris avec des formules barcamp initialement et des contenus qui ont considérablement évolués comme se sont transformés l’univers et l’écosystème WordPress dans un contexte internet très créatif.
Cette année 2015, ceux qui n’étaient pas connectés sur les fils des gazouillis de Twitter ont eu du mal à s’inscrire notamment pour ce samedi dans les hauteurs du Palais Brogniard… Le nombre de places étant limité dans les petites corbeilles (salles) de l’école connectée et accueillante.
Comme dans le brouhaha d’un hall de gare ou d’une cours d’école , #WCPARIS, à l’heure de pointe du samedi soir et du début de semaine, pas facile de s’y retrouver, parmi les gazouillis initiaux du jeudi (“fini les transparents”, “fais un footing demain tôt”, et j’en passe..) et ceux qui vont suivre de discerner le “core” … Les photos se bousculent avec les liens vers les diaporamas… mais là encore, il faut s’inscrire pour télécharger le document souhaité…
Sans pousser le cochonnet trop loin, après un WordCamp 2015, il faut être connecté (donc avoir un compte) sur Twitter, Instagram, Google+, Facebook, Slideshare, Flickr, LinkedIn etc etc… pour lire déconnecté après 😉
En préambule,
Il y a de multiples motivations pour aller à un WordCamp. En ce qui me concerne, pratiquant l’outil WordPress depuis 2005 et sa version 1.5, découvrant progressivement son écosystème en constante évolution, participant de temps à autre au CORE, et auteur de 8 extensions (plugins) mises en ligne gratuitement depuis de 2009, j’ai le plaisir de revoir les personnes, les équipes, leurs projets, les évolutions. Ce qui, dans le vocabulaire WordPress constitue la “communauté” où se cotoient business, newbies et experts “passionnés”.
La question remise chaque année sur la table : Dois-je continuer à maintenir et faire évoluer la trilogie d’extensions multilingues xili-language face aux concurrences commerciales (dont une ne publie plus ses codes) dont deux sont présentes à ce wordcamp en tant que sponsors.
Paradoxes de l’écosystème WordPress
wordpress.org / wordpress.com
sponsors (annonceurs) / bénévoles
admin / UI / UX
code minimal / adjonction des JS / ajax, json…
application / navigateur
CMS / blog
free / libre / gratuit
poésie, fierté, propulsé, motorisé
agence, organisme de formation, séminaire, cours…
Je crois qu’il faudra passer, le moment venu, par un peu d’herméneutique pour approcher ce qui se passe depuis 10 ans avec WordPress et ainsi peut-être expliquer ces paradoxes qui pré-existent ou apparaissent lors d’une réunion comme ce WordCamp ou dans la perspective de l’organisation d’un événement.
Le WordCamp jour après jour, heure après heure
Même avec deux hémisphères dans le cerveau, il a fallu faire des choix, voici donc, sauf exception, à chaque heure, quelques notes sur l’un des deux exposés et l’orateur :
Le premier jour M.A.S rue des Terres au curé Métro Porte d’Ivry
Les heures indiquées sont basées sur le programme officiel.
Vendredi 23/1/2015 – 9h00 – Sylvie Clément
Discours sur la méthode, to be or not to be… Ah le pragmatisme !
Ce riche retour d’expérience de designer WEB free-lance n’est, en fait, pas strictement lié à l’outil WordPress. Comme les choses évoluent vite et que la lecture des flux émis par l’équipe du Core WordPress n’attire pas physiquement notre attention au quotidien, s’il y avait eu un topo attirant l’attention sur les modifications et ajouts des dernières versions 2014 et celles prévues en 2015, j’y serais allé pour y collecter les grains à moudre les mois à venir. Car rien de pire que d’être surpris par des nouveautés lors d’une mise à jour !
Vendredi 10h00 – Daniel Halstenbach – Buddy Press
En tout cas, d’ici 2016, il faut ouvrir un website Buddy Press WordCamp Paris afin que les bénévoles, les membres inscrits, les conférenciers puissent échanger sur une même place virtuelle selon les thématiques des sessions afin de regrouper ce qui est très difficile à répéter, collecter dans les gazouillis #WCPARIS. Un tel forum serait une façon de perdurer les échanges de façon plus structurée que les flux de bruit gazouillant et en fait peu lisible.
Vendredi 11h00 – Pierre Dargham – Globalis
La présentation claire et de haut niveau montre combien on peut combiner un chantier payé par le client et la publication d’une partie clé du code (avec d’ailleurs des retours fructueux pour les autres projets multisites utilisant le plugin publié).
Vendredi 13h00 – Kasia Swiderska
Sujet de conférence qui témoigne de l’expérience de la relation client. Voir Alistapart qui, depuis 1990, ouvre des horizons et donne la parole aux gens ouvriers du web…
Vendredi 13h30 – Maxime Bernard-Jacquet
Retours d’expérience sur les champs personnalisés (custom fields – table post_meta) – Le kangourou (auteur) est donc virtuellement à Grenoble et descend les pistes jusqu’à la Seine. Là aussi, la combinaison entre une extension disponible librement sur wordpress.org et une option payante correspond à ce que l’on attend… Car, enfin, le coeur de WordPress a ses sources en ligne.
Vendredi 14h00 – Benjamin Lupu
Difficile de faire une application (iOS ou Android) pour moins de 10 KEUR ! Et comme toujours avec BL, la doc. est si riche que je viens de passer une petite heure à la collecter et commencer à me faire une idée.
Vendredi 15h00 – Taylor Lovett
Pourquoi Taylor nous a immergé immédiatement dans la console d’administration ? Que fait ElasticSearch ? Wiki. Depuis que j’ai visité ce site, quand je vais sur un site technique, j’ai droit à une pub. ElasticSearch! marrant !!! 🙁
Vendredi 15h00 – Frédérique Game
Une expérience qui n’est pas directement liée à WordPress mais au métier de designer WEB. La riche documentation sur laquelle reposait l’exposé donne matière à illustrer une explication auprès d’interlocuteurs qui pourraient croire qu’il suffit d’acheter un thème (même joli) pour affirmer l’identité d’une institution sur le réseau ou dans la ville…
Vendredi 16h00 – Daniel Roch
La folle heure de Nantes par l’expert SEO qui a fait l’exposé clinique de la tenue d’un évènement technique qu’ils ont choisi de sortir du moule WordCamp. Le genre de questions que s’est posées aussi un organisateur en Croatie
Vendredi 17h00 – épuisé…
Errance dans les couloirs avant de reprendre le métro Pte d’Ivry…
Samedi 24/1/15 – au Palais Brogniard
Ouf, les gardes et la fouille c’est pas pour nous, c’est pour l’expo de mode et produits de luxe qui se tient en haut des marches dans le grand hall du panier. Les locaux de l’école sont eux au 3e
Samedi 9h00 – Ozh Richard
Je découvre que Richard fait du WordPress pour ses loisirs, comme d’autres font de la poterie voire de la poésie ! Faut-dire que j’ai passé des heures dans un transat dans le jardin à lire et relire des chapîtres de son livre sur le développement des extensions [livre]
Cette session, il met le paquet : non seulement on code mais de plus on code pour valider son code. On devine l’intérêt, le temps potentiel gagné en test notamment en cas de contexte à versions multiples… Ce dont je suis sûr, il faudrait que les thèmes qui se vendent aient ce label qualité “Unit Tests” car dans la forêt les “warning” et “caution” pullulent si on active le débuguage to true…
En qui concerne les extensions “week-end ware” que j’ai crée depuis 6 ans, il va falloir ajouter des sessions cours du soir… car comme OZH, la journée c’est un job autre…
Samedi 10h00 – Jenny et Caspard
Comme je l’évoquais avec Caspard à la sortie de la session, il est dommage qu’en introduction, il n’y ait pas eu quelques minutes consacrées à l’offre disponible tant dans le contexte mono que multisite (sur le codex, en français en chantier permanent ). L’alternance entre les deux expériences, celle de Jenny utilisatrice avertie de l’extension WPML (qui n’est plus publiée) et celle de Multipress qui conserve une version FREE dans la bibliothèque des extensions ne doit pas non plus masquer que, quand on fait un choix d’une extension notamment dans le domaine multilingue, on doit avoir une idée de ce qui se passe dans la base de données et comment il y a ou non conservation de la cohérence du modèle qui fait la robustesse du CMS WordPress. L’analyse des solutions proposées montre qu’il y’a même récemment des approches très risquées où se confondent taxonomie et custom post avec perte de sens de la structure.
Samedi 11h00 – Daniel Roch
Quel monde, comme depuis 5 ans, le SEO (search engine optimization) c’est toujours vraiment à la mode… et il y a toujours autant de partitions à mixer avec soin.
Samedi 13h00 – Claire Bizingre
Par rapport à 2014, on a bien perçu ici, par la clarté du topo, que la prise en compte de l’accessibilité est quasi obligatoire et que grâce aux thèmes de base comme Twenty Fourteen ou Fifteen, c’est accessible et facilement au moins pour les éléments essentiels.
Samedi 14h00 – François Xavier Bénard
Quelques précisions à propos des éléments évoqués dans la phase des questions réponses.
i18n
Où sont les listes de langues disponibles dans lesquelles WordPress peut-être traduit (côté visiteur ou auteur).
Depuis la version 4.0, à la première installation, si la langue ne préexiste pas dans le wp-config.php, une liste est proposée après téléchargement (il faut donc être connecté si tests en localhost).
L’extension JetPack propose un fichier très riche (locales.php) avec toutes les langues, leur nom en anglais et dans la langue d’origine et tout un ensemble de codes et fonctions utiles. La classe est très puissante.
Les fonctions load text domain pour extension ou thème.
Si les fonctions sont correctement mises en place, par défaut, elles cherchent le fichier dans le sous-dossier du thème ou de l’extension et sinon dans le dossier wp-content/languages.
La responsabilité des traducteurs
François Xavier insiste beaucoup sur les traducteurs et leur contribution gratuite. Mais qui peut contrôler la qualité notamment par rapport aux traductions fournies par les robots comme Google ? Comment voulez-vous contrôler ? Je pense au jour où une association m’a demandé d’implanter des adaptations pour optimiser les dates et chiffres en khmer ! On y est arrivé mais en anglais.
La lecture
Livre : De quel amour blessée – Réflexions sur la langue française – Alain Borer Ed. Gallimard
Samedi 15h00 – Benjamin Lupu – WP Api
3ième salle juste près de l’entrée… Invoquant comme dans l’exposé de vendredi (14h00) les économies liées au coût de développement d’une application pour iOS et Android, l’exemple (lié à WordPress) concret présenté – étape par étape – montre toutefois qu’il faut être de (très) bon niveau en Javascript. Mon collègue développeur iOS me rappelle que les performances finales ne sont de même qualité que celle obtenue par la création/compilation native.
Samedi 16h00 – Alexandre Sadowski
Comme avec Amaury, suis heureux de la précision technique de l’exposé qui est à l’image de l’équipe qui, en publiant ses sources, continue de contribuer au moteur de WordPress. Comme la mémoire de tout serveur n’est pas élastique, les trucs et astuces fournis permettent d’avoir des images réactives en réponse à la multitude des tailles navigateurs de bureau ou embarqués…
Samedi 16h00 – Richard Archambault
Arrivé directement de Montréal, Richard m’a automatiquement rappelé qu’en 2011, à la sortie de WP 3.0, cela faisait un an déjà que son compatriote Jacob m’avait poussé à développer xili-language et de créer aussi une version multisite pour un énorme consortium canadien… Richard est un ingénieur bienheureux chez Automattic et il nous dépatouille dans l’utilisation du JetPack… qui offre (partiellement) que ce qui existe sur les serveurs wordpress.com.
Samedi 17h00 – Amaury Balmer
Comme chaque année depuis 2009, la force tranquille et la précision illustrée de l’exposé nous sort de la viscosité qui nous guette et de la lenteur paralysante du serveur. Car plus de fierté ni de poésie si le code tourne en boucle dans un moteur encombré de requêtes… Donc explorer et faite le ménage 😉
Toutes les salles de classe vont reprendre place, chaises bien alignées derrière chaque table trouée (non pas pour l’encrier) sur la moquette bien aspirée… Les poubelles bien remplies des bouteilles vides et divers sachets placés sous les chaises ou les écrans… Les goodies consommables restant feront le plaisir des étudiants le lendemain.
Samedi 19h00 – A la recherche du Biscornu !
Le Biscornu est le nom du bistrot où l’on devait se retrouver. Il est bien rue de Montmartre mais bien au sud par rapport à la Cantine. Quant aux indications fournis par les riverains, curieusement on s’est retrouvé plus au nord, vers les Grands Boulevards ou carrément dans une autre rue… Mais, sachant que c’est aussi le bistrot des étudiants de l’école qui nous a accueilli, c’est en effet à l’est de la Bourse qu’il est au coin des rues Montmartre et une petite rue parallèle visible de l’avenue Réaumur…
En guise de conclusion(s)
Bravo
pour les instigateurs fidèles au fil des années et les bénévoles (avec ou sans maillot jaune)
Pensons-y pour les autres réunions
ateliers : si les lieux s’y prêtent avec des travaux pratiques
mur forum : mieux que les écrans, un tableau où l’on peut coller des bouts de papier…
temps de relaxe : une heure à midi, c’est court… surtout qu’il faut un peu de temps pour sortir les interlocuteurs de leur écran.
restons francophone : le français est si riche qu’il a les mots là où l’on pourrait croire qu’il n’y a que l’anglais… voir le dico et les recherches du Québec. Que pense Blanche Neige du happiness engineer à son bar ?
état de l’art en WP – les tendances, le futur proche planifié par l’équipe du CORE : un topo qui a manqué cette année pour les version 4.X qui apportent des éléments majeurs plus faciles à mémoriser si on les écoute !
Inventons
l’association WP Francophone nouvelle formule
la subsidiarité européenne & française par rapport aux USA
Au boulot
Quoi que j’ai pu l’entendre chez certains “que vais-je apprendre ?”, une fois de plus, je me suis laissé surprendre par le nombre de sujets qui, approfondis, vont impacter des projets en cours qui touchent de près ou de (très) loin l’outil WP comme par exemple :
un centre hospitalier gériatrique
la diffusion des informations diffusées par une agence de presse spécialisée,
et bien sûr le devenir de la trilogie des extensions pour site multilingue : xili-language / xili-dictionary / xili-tidy-tags
A très bientôt,
A Lyon, Paris ou ailleurs en Europe…
Où est Charlie xili – cadeau prévu car il est là – qui sera le premier X ?
Ce mois de janvier 2015, ce sera le 7° barcamp (1) pour lequel je monterai à la capitale et retrouver l’équipe très active de WordPress France. En 2009, je participais pour la première fois au 2e Barcamp organisé par la même équipe, ils avaient alors invité Matt Mullenweg. Matt avait fait un topo WordPress, son usage blog et avait questionné l’assistance sur l’usage de WP en tant que gestionnaire de contenu. Les développeurs et webmestres présents ont répondu en majorité qu’ils en faisaient un usage “CMS”.
En 6 ans, que de chemin parcouru, que d’activité créée, … qui l’aurait cru à l’époque ?
Cette étape annuelle est chaque fois l’occasion de faire une mise au point sur les extensions publiées gracieusement comme la trilogie xili-language. Cette année, le samedi 24, on va assister, lors d’un atelier, à une controverse entre deux extensions pour créer des sites multilingues, l’une payante sur la base d’une installation en mono-site, l’autre free et pro sur la base d’une installation en WP multisite. De quoi nourrir le travail d’étude comparatif amorcé en 2014 et qui pour le moment m’encourage à continuer le suivi de xili-language et ses milliers d’utilisateurs.
Bien sûr il y a le modèle économique de tels développements (et du support associé) mais, à mon avis, il y a d’abord le modèle de données et l’architecture et l’imbrication avec le noyau (core) de WordPress.
(1) Les derniers samedis qui ont eu lieu en 2013 et 2014 n’étaient plus à proprement parler des barcamps comme depuis 2008 mais des ateliers WordCamp (avec programme et intervenants pré-établis) car un barcamp correspond à un mode d’organisation plus léger (voir ce texte) où l’on découvre le programme de la journée au fûr et à mesure que s’expriment les attentes des participants.
Le code : [xilipostinpost query='post_type=event&lang=en_us' showposts=2]
Remarquer que seulement si la langue est connue, elle est incluse dans la requête (query) elle-même sinon c’est un paramètre du shortcode !
Le shortcode appartient à l’extension “xili-postinpost” !
Ce site utilise des cookies afin que nous puissions vous fournir la meilleure expérience utilisateur possible. Les informations sur les cookies sont stockées dans votre navigateur et remplissent des fonctions telles que vous reconnaître lorsque vous revenez sur notre site Web et aider notre équipe à comprendre les sections du site que vous trouvez les plus intéressantes et utiles.
Cookies strictement nécessaires
Cette option doit être activée à tout moment afin que nous puissions enregistrer vos préférences pour les réglages de cookie.
Si vous désactivez ce cookie, nous ne pourrons pas enregistrer vos préférences. Cela signifie que chaque fois que vous visitez ce site, vous devrez activer ou désactiver à nouveau les cookies.