Multisite and custom taxonomy… quid ?

In multisite context and WordPress version 4.2.2, with this function in blog_id #3:

switch_to_blog( 2 );

have we really switched in blog_id #2 to fire a query (new WP_Query ( $query ) ;) including a custom taxonomy here (‘domain’) ?

// extract of the query
'tax_query'   => array(
'relation' => 'AND',
	array(
	'field'    => 'term_id',
		'taxonomy' => 'category',
		'terms'    => array ('publication', 'evenement'),
		'operator' => 'IN'
	),
array(
	'field'    => 'slug',
	'taxonomy' => 'domain',
	'terms'    =>  array( 'aerien', 'sous-marin'),
	'operator' => 'IN'
	)
)

In fact NO, because interpreting $query needs the taxonomy to be declared in blog_id #3 where this code is.
A workaround ?
The plugin registering this new taxonomy must not be ‘network activated’ but one by one in #2 and #3 and in properties of this taxonomy, define where the taxonomy must be visible (here #2)
'show_ui' => ($current_blog->blog_id == 2 ) ? true :false,

With this workaround, the deficiency of switch_to_blog( 2 ); is “fixed” and it now possible to display with a custom function (including complex query) in theme of website #3 a list of posts coming from #2.

Multisite et taxonomie nouvelle ajoutée… quid ?

Dans WordPress multisite (network) – version 4.2.2 – avec la fonction dans le site n°3

switch_to_blog( 2 );

a-t-on vraiment basculé vers l’autre site n°2 pour lancer une requête (new WP_Query ( $query ) ;) incluant une nouvelle taxonomie (ici ‘domain’) ?

// extrait
'tax_query'   => array(
'relation' => 'AND',
	array(
	'field'    => 'term_id',
		'taxonomy' => 'category',
		'terms'    => array ('publication', 'evenement'),
		'operator' => 'IN'
	),
array(
	'field'    => 'slug',
	'taxonomy' => 'domain',
	'terms'    =>  array( 'aerien', 'sous-marin'),
	'operator' => 'IN'
	)
)

en fait, non, car la construction de $query a besoin de la déclaration de la taxonomie dans le site n°3 où est le code.
Comment s’en sortir ?
Il ne faut pas activer ‘en réseau’ l’extension qui déclare cette nouvelle taxonomie mais site par site et dans l’extension (qui crée la taxonomie) il faut prévoir de masquer celle-ci dans les sites où elle n’est pas utile
'show_ui' => ($current_blog->blog_id == 2 ) ? true :false,

En procédant de la sorte, on corrige les carences de switch_to_blog( 2 ); et il est donc possible sur le site n°3 d’afficher des listes résultant de requêtes complexes sur les données du site n°2.

WordCamp Lyon – Juin 2015 – Quelques notes

5 mois après le dernier de 7 WordCamps à Paris – Palais Brogniard -(ville de Paris ayant la devise “fluctuat nec mergitur”), voici donc le compte-rendu partiel et partial du premier WordCamp de Lyon.

Après une série de MeetUp initiés par les mêmes organisateurs, ce WordCamp s’est amarré au bord du fleuve Rhône, quai Augagneur non loin de le Préfecture.
La météo annonçait que ce vendredi 5 juin serait le plus chaud de la semaine avec 35°C à l’ombre. De quoi, en rhône-alpin, être un peu inquiet… mais le choix du lieu s’est révélé (très) judicieux à plus d’un titre :
– une petite brise de bord de fleuve,
– des salles de conférence et d’atelier en cale climatisées favorisant une grande assiduité, les ponts étant plus chauds mais sous la brise,
– des boissons et de l’eau en abondance,
– des espaces dédiés aux rencontres informelles ou à la restauration (de qualité avec des goûts bien lyonnais…)
– une consigne bien gardée qui permettait de rester léger,

Comme depuis quelques années, dans son programme, ce WordCamp suit la ligne d’une approche, “WordPress, c’est bon pour les affaires” tant du côté des agences Web (Web Agencies) que de celui des freelances et des développeurs d’extensions (WP Rocket, EDD, et autres présentées dans les ateliers,…) et bien-sûr des nombreux sponsors. Les débutants y découvrent les multiples potentialités et le chemin à parcourir.

Les conférences et ateliers

Sur les 16 conférences ou ateliers de 45’, chaque inscrit pouvait participer à 8. Mon choix s’est porté sur 6…
6 sur 8 – de 45’ chacun

Plénière vs Ateliers
La salle étant plus petite, les ateliers ont donné un peu plus de temps au temps questions/réponses.

Les Rhône-alpins ont pu entendre aussi quelques uns des intervenants des précédents WordCamps de Paris (Janvier 2015)

Ce WordCamp terminé, le travail ne fait que commencer. Dans la terminologie WP, des add_action et add_filter ont été ajoutés au fil du texte qui suit.

extension EDD, marmite, theme de france, modèle éco

Vendre des produits numériques avec Easy Digital Downloads
Alexandre Bortolotti
Les add ons, les bundles sont ici les clés d’un modèle économique qui permet de tester une configuration simple avec le service Paypal de base. Si l’on en croit les informations données, le chiffre d’affaire généré sur les additifs est plein de succès.

add_action (‘explore’, ‘multilingual features’);

Mathieu – filtre – profil – propriété

Tirer profit de Buddy-Press pour accélérer vos projets WordPress
Mathieu Viet
Cet atelier extrêmement bien présenté est un exemple mais avant tout une incitation à utiliser et personnaliser BuddyPress par exemple dans des associations ou des institutions multilingues. La technicité et la clarté des propos est de celle d’un développeur leader officiel de BuddyPress.

add_action (‘explore’, ‘multilingual_features’);

Noemi, une femme en soi à Lyon

Vivre de son blog : mirage ou réalité ?
Noemi Martinelli
Quel contraste dans ce monde de mecs ?
De plus, alors qu’en Europe, WordPress se veut (et est) un CMS de qualité, à croire que Noémi est de mèche avec les US, elle nous parle (et fait rire) de blogue (et de blague)…
Dans cette cale climatisée, nous sommes embarqués pour 45’ dans l’univers du moi, du soi (du frou frou et de la soie) à Grenoble et sur le net avec ses attrapes courriel.
Elle nous dit qu’en photos, elle vend son moi (et montre sa déclaration RSI/RAM) alors que d’autres geeks sont du côté de l’IP, de l’octet et de la sécurité.

add_action (‘explore’, ‘data_design’);

Comment alors, dans ce monde du live, du story, ne pas citer Lucien Jerphagnon qui répond à la question de Christiane Rancé
“Vous avez dit que la sagesse visait à -être soi-. Qu’entendez-vous par là ?”
Encore et toujours s’étonner de l’ipséité, autrement dit de ce fait inexplicable d’être soi et seul à l’être en ce monde. Oui, s’étonner de ce fragment plus ou moins long de durée, unique dans l’éternité.[…] Ainsi, l’ipséité advient dans le temps et seulement pour un temps.

Julio – sécurité, code, règles, cnil cookies mail

Pourquoi WordPress est le CMS le plus sécurisé ?
Julio Potier
Julio cette année nous rassure et montre que, comme sur la route, il suffit de suivre le code et les règles de mise en place.

add_action (‘verify ’, ‘cookies_features_cnil’);

tech, wp-cli, github, versioning

WordPress, Git et l’intégration continue
Stéphane Hulard
Déjà présentée dans les meetups, cette approche ‘industrielle’ est évidemment indispensable mais demande un travail préparatoire important. A mettre en perspective avec l’exposé de Paris par Ozh Richard.

add_action (‘explore_and_test ’, ‘real_time_versioning’);
add_action (‘explore_and_test ’, ‘terminal_working’);

Polylang

Créer un site multilingue avec WordPress et Polylang
Frédéric Demarle
Merci aux organisateurs d’avoir fait émergé “Chouby” qui depuis 2011 développe discrètement une des extensions leader en multilingue pour installation sur WordPress monosite.
Cette extension montre que l’on peut monter un site multilingue simplement sans ajouter de tables ni détruire les contenus mis en place avant ou après l’activation. L’utilisation des taxinomies est un atout majeur.

add_action (‘create_compatibility’, ‘polylang_xili_dictionary’);
add_action (‘create_compatibility’, ‘polylang_xili_tidy_tags’);

Les contacts

– WP-Rocket : découverte d’un “world” succès pour une extension dans un secteur très concurrentiel
– Eoxia qui prépare une nouvelle version de WPShop et qui se prépare d’emblée à prendre en compte le contexte multilingue.

attentes WP – le coeur, le noyau

Lors de cette journée, le coeur de WordPress et ses évolutions récentes et futures ont été à peine évoqués. Or, pas d’extensions ou de “business” sans un travail collaboratif sur le noyau et ses spécifications. Pour BuddyPress, Mathieu donne la voie à suivre.
De même, nombreux sont les thèmes ou extensions où il faut payer d’abord pour tester et voir les sources. Et si WordPress avait fait de même il y a douze ans, on serait loin des plus de 20% de sites internet motorisés par WP.

Les sujets chauds du moment avec WP et discutés sur le pont

Customizer

Cet article résume bien les questions concernant les évolutions de WordPress notamment quant à l’expérience utilisateur et les controverses enclanchées par la volonté de tout javascript-er :
WordPress Core Contributors Call for User Testing on the Menu Customizer Plugin

En auteur d’extensions publiées sur le dépôt WP

Comme les WordCamps/Barcamps précédents depuis 2009, cette journée génère des idées et des actions à lancer pour les mois à venir (aurais-je le temps ???). Mon principal voeu concerne l’esprit de contribution et de collaboration.

En clap de fin

Comme il y a eu un meetup lyonnais préalable, y en aura t-il un prochain à la rentrée ou avant ? une bonne occasion de tirer les leçons et de faire grandir l’esprit de la péniche sans couler…

Clap de fin
Clap de fin

M.

thème enfant : after mais pas trop tôt !

add_action( 'after_setup_theme', 'twentyfifteen_xilidev_setup', 11 ); // called after parent

Petit retour sur le fichier functions.php d’un thème enfant (child thème) et le moment où il est mis en place (voir wp_settings en action) :

Le fichier functions.php du thème enfant est mis en place avant celui du parent, cela permet donc de remplacer des fonctions proposées par le parent et de les personnaliser dans le thème enfant. C’est ainsi qu’on voir ce type de lignes dans un thème parent bien écrit comme ceux fournis avec les versions de WordPress :

if ( ! function_exists( 'twentyfifteen_fonts_url' ) ) :
/**
 * Register Google fonts for Twenty Fifteen.
 *
 * @since Twenty Fifteen 1.0
 *
 * @return string Google fonts URL for the theme.
 */
function twentyfifteen_fonts_url() {

Revenons à l’action after_setup_theme qui par défaut à une priorité de niveau 10. Pourquoi la mettre à 11 ? Comme celle du parent est à dix (10), elle sera appelée en premier et celle du thème sera appelée ensuite. Le contenu de l’action du parent sera complété par quelques ajouts dans le contenu de l’enfant. Pas nécessaire de tout réécrire.
Cela permet par exemple d’annuler un filtre proposé par le parent comme dans cet exemple pour twentyfifteen in github

remove_filter( 'walker_nav_menu_start_el', 'twentyfifteen_nav_description');

Pour ce qui veulent continuer à en parler : rendez-vous au WordCamp Lyon ce 5 juin 2015.

esc_html avec add_query_arg : attention mais pas trop

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 !

M.

Mise en garde sur les extensions pour créer un site web WordPress multilingue

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:

Le post 1 n'est pas encore multilingue
Le post 1 n’est pas encore multilingue

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 🙁
WP Globus modifie le contenu des champs de façon irréversible
WP Globus modifie le contenu des champs de façon irréversible

“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.