WordPress 3.1 : Utiliser l’API des commentaires
Posted by djudorange - 07/12/10 at 01:12:25Comme 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
Posted by djudorange - 07/12/10 at 01:12:23Nous 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.
Réécriture d’URL ou url rewriting
Posted by djudorange - 21/05/10 at 08:05:13Lorsque 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;
Afficher tous les posts
Posted by djudorange - 07/05/10 at 04:05:16Pour afficher tous les posts en utilisant le query_post ou WP_Query, il faut utiliser le paramètre « nopaging »
<?php query_posts( array( 'nopaging' => true) )?>
Query_posts() imbriqués
Posted by djudorange - 26/04/10 at 03:04:24Si vous devez récupérer les posts dans un query_posts, utilisez WP_Query afin de ne pas écraser à requête en cours. La requête $query est au format Array
query_posts( $query );
en
$my_query = new WP_Query($query);
Et s’utilise comme query_posts : au lieu de the_post(), on utilise $my_query->the_post(); et have_posts() en $my_query->have_posts()
Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds.
Valid XHTML and CSS.