WP 4.4-alpha: taxonomy.php makes little babies ;-)

The taxonomy is the basis of categories, keywords (tags) and other rankings in WordPress (like language with xili-language trilogy). Since WP 2.3, all key components are found in the file wp-includes / taxonomy.php. WP 4.4 release announces a big change. The developer will seek information in 3 files:

<?php
/**
 * Core Taxonomy API
 *
 * @package WordPress
 * @subpackage Taxonomy
 * @since 2.3.0
 */

/** Core taxonomy functionality */
require_once( ABSPATH . WPINC . '/taxonomy-functions.php' );

/** WP_Term class */
require_once( ABSPATH . WPINC . '/class-wp-term.php' );

/** WP_Tax_Query class */
require_once( ABSPATH . WPINC . '/class-wp-tax-query.php' );

including the new wp-term class that strengthens the previous object describing the terms methodically …

Added to this is the new term meta table that will be very useful to supplement the description of a tag, for example.

It is too early to draw conclusions but Xili-language will continue to take advantage of these new classes, functions and tables.

For now, Xili-language still works;-)

Justin Tadlock has published a comprehensive article for developers.

To still follow (closely) …

WP 4.4-alpha: taxonomy.php fait des petits !! [Màj]

La taxinomie est à la base des catégories, mots-clés (étiquettes) et autres classements dans WordPress (comme language avec la trilogie xili-language). Depuis WP 2.3, tous les éléments clés se trouvaient dans le fichier wp-includes/taxonomy.php . La version WP 4.4 annonce un grand changement. Le developpeur va chercher les informations dans 3 fichiers

<?php
/**
 * Core Taxonomy API
 *
 * @package WordPress
 * @subpackage Taxonomy
 * @since 2.3.0
 */

/** Core taxonomy functionality */
require_once( ABSPATH . WPINC . '/taxonomy-functions.php' );

/** WP_Term class */
require_once( ABSPATH . WPINC . '/class-wp-term.php' );

/** WP_Tax_Query class */
require_once( ABSPATH . WPINC . '/class-wp-tax-query.php' );

avec notamment la nouvelle classe wp-term qui renforce l’objet précédent décrivant les termes avec méthode…

A cela s’ajoute la nouvelle table termmeta qui va être très utile pour compléter la description d’un tag par exemple.

Il est encore trop tôt pour tirer les conséquences mais xili-language va continuer de tirer partie de ces nouvelles classes, functions et tables.

Pour le moment, xili-language fonctionne toujours 😉

Justin Tadlock vient de publier un article très complet pour les développeurs.

A suivre encore (de très près)…

une fonction souvent oubliée : is_active_widget()

is_active_widget() est une fonction souvent oubliée des développeurs qui insèrent de manière non sélective des éléments (js, css) dand le header de la page sans qu’un des widgets soient présents sur la page affichée.
Cette fonction est pourtant une bonne façon de remédier à ce défaut.

* @global array $wp_registered_widgets
 *
 * @param string $callback      Optional, Widget callback to check.
 * @param int    $widget_id     Optional, but needed for checking. Widget ID.
 * @param string $id_base       Optional, the base ID of a widget created by extending WP_Widget.
 * @param bool   $skip_inactive Optional, whether to check in 'wp_inactive_widgets'.
 * @return string|false False if widget is not active or id of sidebar in which the widget is active.
 */
function is_active_widget($callback = false, $widget_id = false, $id_base = false, $skip_inactive = true) {

 

S’il y a plusieurs possibles widgets d’un même type ($id_base) on peut faire un premier test :

if ( is_active_widget( false, false, 'xili_language_widgets') ) {
		//
		$insert_style = array();
		$styletext = array();
		if ( $widgets_xll = get_option( 'widget_xili_language_widgets' ) ) {
			foreach ( $widgets_xll as $key => $one_xll ) {
				if ( isset( $one_xll['flagstyle'] ) && in_array( $one_xll['flagstyle'],  array ('flagstyle', 'flagstyletext' ) ) ) {
					$insert_style[] = $key;

et ensuite si c’est nécessaire on peut affiner :

function xili_language_widgets_head_test ( $key,  $styletext ) {
	$widget_uid = 'xili_language_widgets-' . $key;
	$name = is_active_widget( false, $widget_uid, 'xili_language_widgets');
	if ( $name ) {
		printf('<!--- Xili-language list widget ID %s in %s -->', $key, $name ); // only active and visible in sidebar with $name
		$style_lines = '<style type="text/css">';

Ce 2e extrait est utilisé dans xili-language pour insérer si et seulement si un réglage de l’instance d’un widget le nécessite !

NOTE :

le premier paramètre est par défaut à false et reste un mystère (probablement lié à la compatibilité de version de WP) car il est testé comme un string alors qu’il s’agit d’un tableau contenant un objet et un string ?!?

A suivre

Le Customizer et le paramètre ‘show_in_nav_menus’ et les CPT et CT

Nouveau avec WordPress 4.3:
Au moment d’enregistrer une nouvelle taxonomie (custom taxonomy) ou un nouveau type de post (custom post type)

Si vous ne voulez pas voir des éléments inattendus dans la liste des items ajoutables du nouveau personnalisateur de menus dans la page (Apparence / Personnaliser) ‘theme customizer’ le paramètre show_in_nav_menus doit être réglé false !
Cette liste apparaît dans la 2e colonne quand dans le Theme Customizer un menu est sélectionné !
Le paramètre show_ui mis à false ne suffit pas !

Be aware about some plugins when creating multilingual WordPress website…

Around 6 years ago, when xili-language was started, to resume only two plugins (WPML, qTranlate) were available with very different data architectures. Neither of them respected the architecture of WordPress core since the first added many tables and the second changed the content of posts by compacting the different languages in each field. It is true that taxonomies had appeared with WP 2.3. Today, the offer is bloated as the ongoing attempts to show the comparison .
Two extensions have recently emerged and their architecture, once installed will compromise more or less seriously the database. “Multi language” adds tables to put the translations of posts thus without extension, can not be recovered.
WPGlobus “Multilingual everything” as it modifies like qTranslate (and its successors qTranslateX) content as shown in the database tables below:

Post #1 n'is not yet multilingual
Post #1 n'is not yet multilingual

and when it makes multilingual (via tabs), we note the significant change of the field of post table … here each field containing the three languages in {}! How then will be queries ? At least not according to the rules WP_Query 🙁

WP Globus modifies irreversibly the content of fields
WP Globus modifies irreversibly the content of fields

“Babble” does not use taxonomies but the custom post type to store posts according to language. Not easy for queries … to follow because by yet officially in filing plugins (repository).

Working with a content management system (CMS) such as WordPress requires some principles, the first is to preserve data integrity before and after adding “tag” that specifies the language (taxonomy) or links to articles in other languages (custom field). This is the basic principle of Xili-language trilogy established since its creation and enduring the version of WP 2.3 to 4.3, which will be out soon.

Michel

Champ de thème : à la mode avec la page personnalisation

On connait les champs personnalisés attachés à chaque article, ils sont stockés dans la table wp_postmeta.
La nouvelle mode concernant l’utilisation de la page “personnalisation” (customize) du menu du thème actif fait renaître l’utilisation du tableau “Theme_mods” résultat de l’appel à la fonction get_theme_mods.
Plus directement, on peut accéder à un élément du tableau du thème actif avec les deux fonctions get_theme_mod et set_theme_mod (voir includes/theme.php de WP). Ce tableau est stocké dans la ligne theme_mods_twentyfifteen de la table wp_options ici pour le thème twentyfifteen.

Un thème comme zerif-lite utilise de nombreux champs de ce type à saisir par le webmestre pour, par exemple ajouter des champs dans un header ou d’une page d’accueil multi paragraphe. Le fichier inc/customizer.php contient une (grande) liste de ces champs ajoutés pour personnaliser le site.

get_theme_mod est une fonction qui permet de rendre une valeur par défaut si rien ne pré-existe dans la base.

Cette fonction est aussi filtrable. Si le champ est de type “string” nommé “sous-titre” et si on veut le traduire, on peut utiliser le filtre du nom “theme_mod-sous-titre“.

Si un thème utilise ces functions directement sans une fonction GETTEXT dans le thème, ce filtre sera utile pour faire de la traduction/adaptation dans un contexte multilingue. Via des fichers xml ou une détection adaptée, des gestionnaires de dictionnaire pour préparer les traductions iront détecter ces valeurs afin de préparer les fichiers de langue (.mo, .po).

M.

Etiquette remplace mot-clé

Sans crier gare, dans la traduction française de tag est passée de mot-clé à étiquette ! Est-ce bien ? En tout cas, cela ajoute de la précision à la façon de classer les articles ? Et cela précise le modèle de données : en effet, on range des articles dans des rayons (catégorie) et sur chacun on peut ajouter des étiquettes (marque, couleurs, composants…).
Pour le contexte multilingue, cela conforte aussi les choix faits dans la trilogie xili-language depuis 2009. Les grands rangements se basent sur les catégories (les rayons) où peuvent coexister des articles de langues différentes et les étiquettes (ex mots-clés) sont traduisibles ou non mais groupables par langue ou groupe sémantique (trademark,…) C’est l’objet de l’extension xili-tidy-tags.
NB : xili-language ne clone pas les catégories selon la langue mais en traduit l’intitulé et la description selon le contexte…