Changer la version de Jquery

Malheureusement, ceci n’est disponible qu’en front.
Ceci est valable et tester pour WordPress 3.1. Je ne suis pas sur que cela fonctionne sur les anciennes versions.
Le nouveau fichier se trouve dans le thème dans le dossier js.

function my_default_scripts( &$scripts ){
    $scripts->registered['jquery'] = new _WP_Dependency( 'jquery', get_template_directory_uri().'/js/jquery-1.5.2.min.js', false, '1.5.2' );
}
add_action( 'wp_default_scripts', 'my_default_scripts', 999 );

WordPress 3.1 : Utiliser l’API des commentaires

Comme get_posts(), get_users(), il existe dès maintenant un get_comments() utilisable comme une API:

La classe utilisée est WP_Comment_Query . Elles acceptent le tableau d’argument suivant:

  • ‘author_email’ : email de l’utilisateur,
  • ‘ID‘ : id du commentaire,
  • ‘karma’ : non utilisé,
  • ‘number’ : nombre de commentaire,
  • ‘offset’ : nombre de commentaire qu’il faut passer avant l’affichage,
  • ‘orderby’ : nom du champ pour trier,
  • ‘order’ : ‘ASC’ ou ‘DESC’,
  • ‘parent’ : id du commentaire parent,
  • ‘post_ID’ : id de l’article,
  • ‘status’ : statut des commentaires (approved, ..) ,
  • ‘type’ : type de commentaire (trackback, …),
  • ‘user_id’ : id de l’utilisateur,
  • ‘search’ : chaine de caractère à chercher dans les commentaires,
  • ‘count’ : retourne le nombre de commentaires

WordPress 3.1 : Utiliser l’API des users

Nous avons « enfin » une API dans la version 3.1 de WordPress pour gérer les utilisateurs, certes pas forcément évolué mais surement très évolutive.

Celle-ci reprend le même système que le get_posts avec « get_users« . Ainsi comme get_posts utilise la classe WP_Query, get_users utilise la classe WP_User_Query.

Le tableau d’arguments que prend la fonction « get_users » et la classe « WP_User_Query » est celui ci dessous:

  • ‘blog_id’ : Id du blog (valide qu’en multisite)(integer),
  • ‘role’ : rôle des utilisateurs(string),
  • ‘meta_key‘ : clé du champ méta (string),
  • ‘meta_value‘ : valeur du champ méta(string),
  • ‘meta_compare’ : opérateur de comparaison du champ méta(string),
  • ‘include‘ : tableau de user id à inclure (array),
  • ‘exclude‘ : tableau de user id à exclure (array),
  • ‘search’ : chaine de caractère à chercher dans les users (string),
  • ‘orderby’ : champ utiliser pour le tri(string),
  • ‘order’ : ‘ASC’ ou ‘DESC’,
  • ‘offset’ : nombre de user à passer avant affichage(int),
  • ‘number’ : nombre de user à retourner(int),
  • ‘count_total’ : retourne de nombre d’utilisateur (boolean),
  • ‘fields’ (string // ‘all’),

Vous pouvez donc récupérer la liste des utilisateurs du site par rôle, par clé, etc. Cette fonction était jusqu’alors inexistante sur la version 3.0 ou antérieur de WordPress. La seule façon était de récupérer la liste avec un get_users_of_blog() et faire le filtrage via PHP.

Cette fonction retourne un tableau d’objets de type user.

WordPress en un graphique

WordPress 3.1 Beta 1: Les nouveautés

Cet article est basé sur l’article de Jane Wells publié sur le blog de développement de WordPress. Ce n’est pas une traduction stricte, mais une adaptation enrichie de ma part.

C’est donc avec enthousiasme que je vous présente les nouveautés en terme de fonctionnalité de WordPress 3.1 (Bêta 1).

Liens internes

Le but est de créer des liens entre vos articles dans le blog.

En situation: Vous écrivez un message (ou une page) dans WordPress. Vous parlez de quelque chose que vous avez écrit dans l’article d’avant, et vous pensez: « Je vais faire un lien vers ce dernier article! » Que faites-vous? Vous pouvez ouvrir un nouvel onglet et vous faîtes la recherche de l’ article souhaité dans la liste des articles, ou vous pouvez aller sur votre blog et le trouver. Quoi qu’il en soit, vous devez trouver que l’article et l’URL, de sorte que lorsque vous cliquez sur le bouton de lien dans l’éditeur de message, vous pouvez l’insérer.

Les pages et les articles existant peuvent être trouvé et vous pouvez créer le lien en utilisant la recherche dynamique.

Grâce à la nouvelle fonctionnalité de liaison internes, vous pouvez créer un lien comme d’habitude, ou vous pouvez rechercher vos pages et articles existants dans la popup. Une combinaison de pré-chargement, saisie semi-automatique, et ajax afin de rendre l’outil de création de liens agréable à utiliser (et tellement plus rapide!). Nous espérons que cet nouvelle fonctionnalité vous permettera de créer de multiples liens entre les éléments de contenu de votre site, et ce qui rendra plus facile pour vos visiteurs de trouver des contenus similaires.

Tri par colonne

Lorsque vous êtes dans l’administration de votre site et vous cliquez sur l’onglet des articles (ou des pages, ou des médias, ou sur un onglet du même type), avez-vous jamais souhaité que vous puissiez cliquez sur un en-tête de colonne pour modifier l’affichage, comme pour arranger les choses par date, par ordre alphabétique, par auteur, ou d’autres critères? Je sais que je le souhaitais depuis longtemps. Et maintenant, nous l’avons! Cette fonction est le résultat de « Google Summer of Code student project », la preuve que le programme est une excellente façon de s’impliquer dans le développement de WordPress. La petite flèche à côté de la tête de colonne (dans ma capture d’écran par exemple, la colonne Date) vous indique la colonne de tri, et si elle est ascendante ou descendante. Il suffit de cliquer sur l’en-tête de colonne pour trier selon cette colonne, ou d’inverser l’ordre.

Une meilleure pagination !

PaginationSi vous avez beaucoup de contenu, vous devrez avoir une expérience légèrement ennuyeuse lors de la pagination dans les différents onglets et les listes d’article, de média, etc. Cliquer pour avancer et pour reculer est assez facile, comme d’aller à la première ou le dernière page, mais qu’en est-il du milieu? Dites vous que vous avez 23 pages dans la liste d’article, que vous êtes sur la page 6, et dans l’ordre des dates, vous pensez que celui que vous cherchez peut-être autour de la page 15 ou plus. Vous auriez eu à cliquer plusieurs fois pour faire avancer quelques pages jusqu’à ce que vous atteignez  a page que vous vouliez. Plus maintenant! Grâce à au style de notre nouvelle pagination, les avance rapide / recul et le premier / dernier liens sont toujours là, mais maintenant vous pouvez passer directement à n’importe quelle page en changeant juste le numéro modifiable qui s’affiche dans la zone de pagination (et en appuyant sur entrée). Super!

Une recherche dynamique (AJAX)

Voir les résultats de recherche sera plus rapide et il n’y a plus besoin de rafraîchir l’écran dans l’administration, grâce à l’ajout d’Ajax sur la page des résultats de recherche. Aller Speed Racer!

Le thème bleu mis à jour

Dans les options personnelles dans votre profil, vous avez le choix entre gris et bleu pour la couleur de l’administratrion (la valeur par défaut est la couleur grise). Nous avions actualisé le thème gris, mais nous avions pas mis à jour le bleu. (Rappelez-vous quand nous sommes passés de l’en-tête sombre à l’en-tête plus clair?) Le nouveau thème bleu est plus léger, plus propre, et basé sur les même nuances que le thème gris, mais avec une teinte bleue de sorte que vous resteriez focalisé sur la création de votre contenu, sans distraction. Si vous n’avez jamais essayé le thème bleu, ce serait le moment idéal pour lui donner une chance et de voir comment vous l’aimez! Y at-il d’autres couleurs que vous aimeriez avoir comme options? Faites-nous savoir dans les commentaires!

Prise en charge d’IE9

Si vous avez eu des problèmes en utilisant des fonctionnalités de glisser-déposer (drag&drop) dans l’administration ou avez eu des problèmes avec l’éditeur riche sur la page de création d’article lorsque vous utilisez Internet Explorer 9, désolé! Des améliorations ont été faites pour rendre fonctionnel ces fonctions de manière régulière dans le dernier navigateur de Microsoft.

Barre d’administration

Une barre d’administration a été implémenté, pour que vous puissiez accéder aux onglets de l’administration du côté front. Vous pouvez donc avoir un accès rapide sur l’édition de votre profil (à la façon de buddypress) et la liste des utilisateurs.Vous pouvez aussi accéder à la page de création pour les différents type de contenu (articles, pages), accéder à la liste des commentaires et accéder à l’administration des widgets et des menus.Un champ de recherche est aussi disponible. Cela fait juste une recherche en front.

Ajouter une action lorsque l’article est publié

Dans wordpress, il manque cruellement une action qui est activé lorsque l’on publie un article mais pas lorsqu’on l’édite.

add_action('transition_post_status', 'action_new_post', 10, 3);
 
function action_new_post( $new_status, $old_status, $post ){
if( $old_status != 'publish' && $new_status == 'publish' ){
do_action('publish_new_post', $post);
}
}

Vous pouvez ensuite utiliser l’action ‘publish_new_post’ pour lancer une fonction que au moment où le post est publié

Gérer les miniatures dans WordPress 3.0

Dans les features de WordPress 3.0, nous avons la gestion des miniatures. Ce qui nous intéresse ici c’est de pouvoir générer plusieurs formats de miniatures.
Dans le fichier functions.php du thème:

add_action( 'after_setup_theme', 'ma_fonction' );
function ma_fonction() {
	add_theme_support( 'post-thumbnails' );
	add_image_size( 'list-normal', 196, 132, true );
}

Explications:

  • Le « add_theme_support » authorise dans l’admin la gestion des miniatures. Ceci est obligatoire pour utiliser les miniatures
  • Le « add_image_size » est la fonction qui va rajouter un format de miniature.
  • En paramètre, il faut passer en premier l’identifiant de la taille de miniature, en deuxième la largeur, en troixième la hauteur et en 4ème si oui ou non la miniature peut être coupée.

Ensuite, lors de la création d’un article, lors de l’ajout d’un photo, il faut la déclarer comme « featured image » ou « miniature de l’article ». Ceci indique que c’est cette image qui correspondra à l’article.

Dans le template, dans le single.php ou lors du listage (index.php, category.php, search.php, tag.php , etc..), on affichera l’image avec ce qui suit:

<?php the_post_thumbnail('list-normal', array( 'class' => 'alignleft' ); ?>

Explications:

  • Cette fonction retourne une balise img.
  • En paramètre, il y a en premier, l’identifiant de la taille de miniature que j’ai indiquer dans mon fichier functions.php du thème.
  • En deuxième, ce sont les arguments que l’on peut ajouter comme une classe ou un id. Ici je rajoute la classe ‘alignleft’.

Edit: pour gérer les miniatures pour différents types de contenu, il faut utiliser cela:

add_theme_support( 'post-thumbnails', array( 'post', 'typedecontenu1', 'typedecontenu2' ) );

Comment faire du Ajax avec WordPress ?

Pour le front ! Ceci est très simple.

Dans le plugin, il suffit de rajouter 2 actions. une lorsque que l’on est loggué et l’autre pour le public:

add_action('wp_ajax_mon_action',  'ajax_sort_tags' );
add_action('wp_ajax_nopriv_mon_action', 'ajax_sort_tags' );

Dans la fonction appelée, on va retourner le bloc avec les données chargées avec un die($donnees_retournee). Si on a besoin de paramètres, on pourra les récupérer par $_REQUEST['ma_variables'].

Dans le template, on va faire l’appel ajax comme suit:

jQuery(".ma_class_bouton").click( function(){
		var variable = 1;
		jQuery(".ma_class_block").load("<?php echo  get_bloginfo( 'wpurl' ) . '/wp-admin/admin-ajax.php'; ?>", { "action": "mon_action", "variable" : variable} );
		return false;
	});

J’appelle donc mon action avec en plus la valeur 1 en parametre que l’on va pouvoir récupérer avec le $_REQUEST['variable']

Insérer un script Javascript proprement

Le plus souvent, on fait appel à un script Js dans le code. Le mieux étant d’utiliser les fonctions de WordPress afin d’insérer ce code proprement.
Dans le thèmes, dans la page functions.php:

add_action( 'init', 'load_js' );
// Add js to use this theme
function load_js() {
	wp_enqueue_script( 'mon-script', get_bloginfo('stylesheet_directory') . '/js/mon-script.js', array('jquery'), '0.1', false);
}

Explications:

  • le premier paramètre ‘mon-script’ est l’identifiant du script
  • le deuxième paramètre get_bloginfo(‘stylesheet_directory’) . ‘/js/mon-script.js’ est l’adresse du script
  • le troisième paramètre array(‘jquery’) est le tableau des dépendances du script. ici le script ‘mon-script.js’ à besoin de jquery pour fonctionner
  • le quatrième paramètre ’0.1′ est la version du script
  • le cinquième paramètre false est false si le script est chargé dans le header (wp_head) ou true si le script doit être chargé dans le footer (wp_footer)

Réécriture d’URL ou url rewriting

Lorsque vous travaillez avec les taxinomies et les catégories, on peut avoir besoin de réécrire l’url afin d’atteindre la taxonomie et la catégorie en même temps.

Exemple : dans la taxinomie « genre », les terms « hommes » et « femmes ». Mais tous les deux ont les catégories « habillements » et « accessoires » mais avec des articles différents. Le mieux étant d’encodé l’url en site.com/genre/[hommes ou femmes]/category/[habillements ou accessoires].

Pour cela, il faut dans un plugin réécrire l’url:

add_action( 'generate_rewrite_rules', 'addRewriteRules' );
 
function addRewriteRules( $wp_rewrite ) {
		$new_rules = array( 'genre/([^/]+)/category/([^/]+)/?$' => 'index.php?ge=' . $wp_rewrite->preg_index(1) .'&ca=' . $wp_rewrite->preg_index(2) );
		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
	}
 
add_filter( 'query_vars',  'addQueryVar' );
 
function addQueryVar( $qvars ) {
	  $qvars[] = 'ge';
	  $qvars[] = 'ca';
	  return $qvars;
	}
 
add_action( 'parse_query', 'parseQuery' );
 
// To parse query and add the cible taxo + category
function parseQuery( $query ) {
	remove_action( 'parse_query', 'parseQuery' );
	// Options date
	$genre = stripslashes(get_query_var('ge'));
	$category = stripslashes(get_query_var('ca'));
 
	if ( !empty($genre) &&  !empty($category)) {
		// Add post_type on Query
		$query->is_tax = true;
		$query->is_category = true;
		$query->is_home = false;
		$query->query_vars['taxonomy'] = 'genre';
		$query->query_vars['genre'] = $genre;
		$query->query_vars['term'] = $genre;
 
		$cat = get_category_by_slug($category);
		$query->query_vars['cat'] = $cat->term_id;
		$query->query_vars['category__in'] = array($cat->term_id);
	}
}

Explications:

  • la fonction addRewriteRules va ajouter la réécriture d’url qu’il faut. Elle va transformer le « /genre/hommes/category/habillements » en « index.php?ge=homme&ca=category ». Elle fonctionne avec les posix comme type de regex
  • la fonction addQueryVar va rajouter dans le query les clés « ge » et « ca ».
  • la fonction parseQuery va parser le query pour insérer les valeurs qu’il faut pour afficher les articles que l’on souhaite
  • Enfin vous pouvez toujours utiliser l’action ‘template_redirect’ pour rediriger vers le template de votre choix. Voire l’article associé à cette fonction

Edit du 27 août 2010


Lorsque l’on rajoute une règle de réécriture, il est préférable de rajouter la possibilité de pagination ainsi que les flux xml. Pour cela vous pouvez rajouter ces règles (je prends le même contexte que avant):

function addRewriteRules( $wp_rewrite ) {
		$new_rules = array( 'genre/([^/]+)/category/([^/]+)/?$' => 'index.php?ge=' . $wp_rewrite->preg_index(1) .'&ca=' . $wp_rewrite->preg_index(2) );
		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
		$new_rules = array( 'genre/([^/]+)/category/([^/]+)/page/page/?([0-9]{1,})/?$' => 'index.php?ge=' . $wp_rewrite->preg_index(1) .'&ca=' . $wp_rewrite->preg_index(2) . '&paged=' . $wp_rewrite->preg_index(3) ); // Pour la pagination
		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
		$new_rules = array( 'genre/([^/]+)/category/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?ge=' . $wp_rewrite->preg_index(1) .'&ca=' . $wp_rewrite->preg_index(2) . '&feed=' . $wp_rewrite->preg_index(3) ); // Pour le feed
		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
		$new_rules = array( 'genre/([^/]+)/category/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?ge=' . $wp_rewrite->preg_index(1) .'&ca=' . $wp_rewrite->preg_index(2) . '&feed=' . $wp_rewrite->preg_index(3) ); // Pour le feed
		$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
	}

Voilà la pagination et le feed supportés.
Attention, si vous utiliser template_redirect pour charger votre template de votre choix, il faut rajouter ce qui suit afin que WordPress affiche les xml

if( is_feed() ) :
     return;
endif;

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.