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 !

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.

Article avec insertion de shortcode xili-postinpost

Cette article en français contient l’inclusion d’un shortcode listant les évènements (post_type) dénommés “event”

Pas de 29 février !

En 2015, il n’y a pas de 29 février car l’année n’est pas bissextile 🙁

Nouvel AN

Le premier jour de l’année 2015. C’est la nouvelle année ce jeudi 1er Janvier, Bonne année !

Noël

Le jour du père Noël ! Cette année 2014 c’est le jeudi (25 décembre).

Le code : [xilipostinpost query='post_type=event' showposts=3 lang='cur']

Voici les évènements dans la langue de Shakespeare :

No February 29th

In 2015, there was no February 29th because the year is not a leap year:-(

New Year

The first day of 2015. A thursday January the first ! Happy new Year !

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” !

Source photographie : Prise de vue de l’hotel de ville de Lyon lors de la fête des lumières le 8/12/2014 (nex 7 Sony – © MSC)