Comment ajouter le language dans une requête avec l’extension xili-language ?

$faq_args = array(
        'post_type'      => 'hrf_faq',
        'post_status'    => 'publish',
        'posts_per_page' => -1,
        'orderby'        => 'menu_order',
        'order'          => 'ASC',
        'lang' => xili_curlang()
   );

   if( $faq_params['category'] != '' ){
      $faq_args['category_name'] = $faq_params['category'];
   }

   $faq_query = new WP_Query( $faq_args );

   if( $faq_query->have_posts() ):
      while( $faq_query->have_posts() ):
         $faq_query->the_post();

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):

 if ( $faq_params['lang'] ) {
	   		$lang_slug = ( $faq_params['lang'] == 'cur') ? xili_curlang() : $faq_params['lang'] ;

	   		$query = array(
				'numberposts' => -1,
				'post_type' => 'hrf_faq',
				'tax_query' => array(
					'relation' => 'AND',

					array(
						'field'    => 'slug',
						'taxonomy' => 'language',
						'terms'    => $lang_slug,
					),
				),
			);
			if ($faq_params['category'] != '') {
				$query['tax_query'][] = array(
						'field'    => 'slug',
						'taxonomy' => 'category',
						'terms'    => explode (',', $faq_params['category'])
					);

			}

		} else {
			$query = array(
				'numberposts' => -1,
				'post_type' => 'hrf_faq'
				);

			if ($faq_params['category'] != '') {
				$query['tax_query'] = array(
					array(
						'field'    => 'slug',
						'taxonomy' => 'category',
						'terms'    => explode (',', $faq_params['category'])
					));

			}

		}

		$faqs = new WP_Query( $query ) ;
		if ($faqs) {
			while ( $faqs->have_posts() ) : $faqs->the_post();

				$ID = get_the_ID();

Pour des requêtes encore plus précises, il sera plus aisé d’ajouter d’autres paramètres (taxonomy, custom fields (meta), sorting…)..

Référence dans le codex.

Nouvelles fonctions de WP 4.1 dans le thème Twenty Fifteen : la page archive/category

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.

Twenty Fifteen xili : rendre la description des éléments du menu traduisible

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 :

  1. La traduction de la description de l’item menu,
  2. 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.

Widget, affichage d’un flux RSS : contrôler l’ordre de tri…

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…

add_action ('wp_feed_options', 'pip_wp_feed_options', 10, 2 );
function pip_wp_feed_options( $feed, $url ) {
	//error_log($url . serialize($feed));
	$feed->enable_order_by_date(false);
}

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.

Les notes et articles “trucs et astuces” : pourquoi ?

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