Wordcamp Paris 2013

4,509
-1

Published on

L'utilisation de l'existant lors du développement WordPress.

Published in: Technology

Wordcamp Paris 2013

  1. 1. WORDPRESS L’utilisation de l’existant dans18 le développement WordPressjanv. WordCamp Paris 2013
  2. 2. REMI CORSON Développeur WordPress @remicorson remicorson.com Rémi CorsonWORDPRESS L’utilisation de l’existant
  3. 3. CE QUE L’ON VA VOIR Les tables SQL Les fonctions indispensables Les options par défaut Les nonces Les Custom Post Types Les fonctions méconnues Les requêtes WP_QueryWORDPRESS L’utilisation de l’existant
  4. 4. POURQUOI ? Pour... Gagner du temps Sécuriser vos codes Rendre compatible Produire du code pérenne et...WORDPRESS L’utilisation de l’existant
  5. 5. NE PAS RÉINVENTER LA ROUE DRY (Don’t Repeat Yourself)Avant de développer, vérifiez toujours qu’une solution déjà existante ne soit àvotre portée.WORDPRESS L’utilisation de l’existant
  6. 6. CHAPITRE 1LES TABLES SQL
  7. 7. LES TABLES SQL WordPress se compose de 11 tables SQLWORDPRESS L’utilisation de l’existant
  8. 8. LES TABLES SQL wp_commentmeta wp_comments wp_linksComment Meta Comments LinksChamps Meta liés Les informations Les liens (masquésau commentaires. de base des par defaut sous WP commentaires 3.5)WORDPRESS L’utilisation de l’existant
  9. 9. LES TABLES SQL wp_options wp_postmeta wp_postsOptions Post Meta PostsContient tous les Contient les meta Contient les articles,paramètres fixes data des pages, cpt, menu,du site «posts» (post, media... page, cpt...)WORDPRESS L’utilisation de l’existant
  10. 10. LES TABLES SQL wp_term_relationship omy wp_terms s wp_term_taxonTerms Term Term TaxonomyEquivalent des Relationships Contient lescatégories et mots informations des Liens entre posts/clés pour les posts entrées de wp_terms liens et catégories/et les liens mots clésWORDPRESS L’utilisation de l’existant
  11. 11. LES TABLES SQL wp_usermeta wp_usersUser Meta UsersContient toutes les Contient la listeinformations sur des utilisateursles utilisateursWORDPRESS L’utilisation de l’existant
  12. 12. LES TABLES SQL Avec cette structure vous n’avez pas besoin de tables supplémentaires pour 99% de vos projets. Structure pérenne Utilisation des classes (wpdb entre autres) Bénéficier des fonctions existantes Utilisation des APIs Optimisation des Connaissance de requêtes WordPressWORDPRESS L’utilisation de l’existant
  13. 13. CHAPITRE 2LES OPTIONS
  14. 14. LES OPTIONS PAR DEFAUT WordPress possède de nombreux paramètres par défaut. Ils sont à privilégier. Cette table existe 1.5 depuis la Standardisation version CRUD facilité Table wp_optionsWORDPRESS L’utilisation de l’existant
  15. 15. LES OPTIONS PAR DEFAUT Les fonctions de l’API Options: add_option() add_site_option() get_option() get_site_option() update_option() update_site_option() delete_option() delete_site_option() Installations Multi-sitesWORDPRESS L’utilisation de l’existant
  16. 16. LES OPTIONS PAR DEFAUT En pratique: // Ajouter une option add_option( $option, $value = , $deprecated = , $autoload = yes ); // Supprimer une option delete_option( $option ); // Récupérer la valeur d’une option get_option( $option, $default = false ); // Mettre à jour / recréer une option update_option( $option, $newvalue );WORDPRESS L’utilisation de l’existant
  17. 17. LES OPTIONS PAR DEFAUT Les options incontournables blogname comment_registration blogdescription date_format / time_format home / siteurl start_of_week admin_email default_role users_can_register gmt_offset http://codex.wordpress.org/Option_ReferenceWORDPRESS L’utilisation de l’existant
  18. 18. LES OPTIONS PAR DEFAUT En pratique: // Afficher une date echo date_i18n( get_option(date_format), strtotime( $date ) ); /* Affichera par exemple: - 18th Jan 2013 date_i18n() sert à - January 18, 2013 la traduction de la date - Vendredi 18 Janv. - Vendredi 18 janvier - 18/01/2013 ... */WORDPRESS L’utilisation de l’existant
  19. 19. LES OPTIONS PAR DEFAUT get_bloginfo() & bloginfo() Pour récupérer d’autres types d’options version template_url text_direction template_directory stylesheet_url rss2_url stylesheet_directory comments_rss2_url Provenance: fonctions de WordPressWORDPRESS L’utilisation de l’existant
  20. 20. LES OPTIONS PAR DEFAUT Les fonctions des l’API Transients: Les options temporaires set_transient() set_site_transient() get_transient() get_site_transient() delete_transient() delete_site_transient() Installations Multi-sitesWORDPRESS L’utilisation de l’existant
  21. 21. LES OPTIONS PAR DEFAUT En pratique: // Ajouter une option temporaire set_transient( $transient, $value, $expiration ); set_transient( ‘last_tweet’, $tweet, 60*60*12 ); // Récupérer la valeur d’une option temporaire get_transient( $transient ); get_transient( ‘last_tweet’ ); $expiration est exprimée en secondes // Supprimer une option delete_transient( $transient ); delete_transient( ‘last_tweet’ );WORDPRESS L’utilisation de l’existant
  22. 22. CHAPITRE 3 LES CPT
  23. 23. LES CPT Les custom post types sont une manière de différencier vos contenus, par exemple: Recettes de cuisine Evitez de différencier des contenus par catégories. Sélection de livres Les catégories servent à Voitures, Motos... classer. Entreprises, magasins... Les CPT servent à différencier. Stockés dans wp_postsWORDPRESS L’utilisation de l’existant
  24. 24. LES CPT Interface classique pour un Custom Post TypeWORDPRESS L’utilisation de l’existant
  25. 25. LES CPT Les taxonomies: la méthode de classement des CPTs Recettes de cuisine > Par difficulté, pays... Sélection de livres > Par genre, auteur... Voitures, Motos... > Par année, carburant... Entreprises, magasins... > Par ville, activité... Equivalent aux catégoriesWORDPRESS L’utilisation de l’existant
  26. 26. LES CPT Interface classique pour une taxonomieWORDPRESS L’utilisation de l’existant
  27. 27. LES CPT Créer des CPTs et des Taxonomies Générateur en ligne > Themergency http://themergency.com/generators/wordpress-custom-post-types/ Plugins > Easy Content Type http://codecanyon.net/item/easy-custom-content-types-for- wordpress/234182 Intégrés aux thèmes Les coder en dur http://codex.wordpress.org/Post_Types#Custom_TypesWORDPRESS L’utilisation de l’existant
  28. 28. LES CPT Exemple avancé de CPTs: ajout de champs utilisateursWORDPRESS L’utilisation de l’existant
  29. 29. LES CPT Le résultat sur la page d’édition des utilisateursWORDPRESS L’utilisation de l’existant
  30. 30. LES CPT En pratique, créer un CPT: add_action( init, create_post_type_car ); function create_post_type_car() { register_post_type( car, array( labels => array( name => __( Cars ), singular_name => __( Car ) ), public => true, has_archive => true, rewrite => array(slug => cars), ) ); }WORDPRESS L’utilisation de l’existant
  31. 31. LES CPT En pratique, créer un taxonomie: add_action( init, create_difficulty_taxonomy’ ); function create_ difficulty_taxonomy() { register_taxonomy( difficulty, recipe, // post, page, cpt... array( hierarchical => true, // tags or categories like label => __( Difficulty ), rewrite => array( slug => difficulty ) ) ) ); }WORDPRESS L’utilisation de l’existant
  32. 32. CHAPITRE 4 LES REQUÊTESAVEC WP_QUERY
  33. 33. WP_QUERY WP_Query est une classe qui génère l’objet $wp_query définissant la requête courante A B$wp_query détermine le type de requêteWORDPRESS L’utilisation de l’existant
  34. 34. WP_QUERYLa hiérarchie indexdes templates Archives Post Page tag post type media category ID Slug SINGLE POST ID SLUG MIME TYPE ID SLUG DEFAULT TEMPLATE DEFAULT TEMPLATE QUELLE EST LA REQUÊTE COURANTE ?WORDPRESS L’utilisation de l’existant
  35. 35. WP_QUERY Mais c’est ça, c’est trop simple !WORDPRESS L’utilisation de l’existant
  36. 36. WP_QUERY A B C Etape A Etape B Etape C Limiter par Limiter par auteur Sélectionner catégorie, ou par et meta field uniquement taxonomie certains champsWORDPRESS L’utilisation de l’existant
  37. 37. WP_QUERY En pratique: // La Requête (peut être dans la boucle principale) $query = new WP_Query( $args ); // La boucle Paramètres de while ( $query->have_posts() ) : la requête $query->the_post(); echo <li> . get_the_title() . </li>; endwhile; // Restauration de la requête courante wp_reset_query();WORDPRESS L’utilisation de l’existant
  38. 38. WP_QUERY Exemple: Requêtes par auteur // Par author id (user_id) $query = new WP_Query( author=1 ); $query = new WP_Query( author=4,5,8,7 ); $query = new WP_Query( author=-12 ); $query = new WP_Query( author=-12,4,5,8,7 ); // Par author_name (user_nicename) $query = new WP_Query( author_name=remi );WORDPRESS L’utilisation de l’existant
  39. 39. WP_QUERY Exemple: Requêtes par catégories // Par category id $query = new WP_Query( cat=11,-14 ); // Par category_name (utiliser le slug) $query = new WP_Query( category_name=actualites ); // Par catégories cumulées avec category_and (ET) $query = new WP_Query( array( category__and => array( 18, 14 ) ) ); // Par catégories cumulées avec category_in (OU) $query = new WP_Query( array( category__in => array( 18, 14 ) ) ); // Par catégories cumulées avec category_not_in (OU) $query = new WP_Query( array( category__in => ...WORDPRESS L’utilisation de l’existant
  40. 40. WP_QUERY Les paramètres de WP_Query: Auteurs Mise en avant (sticky) Catégories Champs Personnalisés Mots Clé Order / Order by Taxonomies Mise en cache Recherche ($_GET[‘s’]) Permission (user role) Article / Page Choix des champs Statuts (publish, draft...) Date et HeureWORDPRESS L’utilisation de l’existant
  41. 41. WP_QUERY Tous ces paramètres sont cumulables http://codex.wordpress.org/Class_Reference/WP_QueryWORDPRESS L’utilisation de l’existant
  42. 42. WP_QUERY VS QUERY_POSTS WP_Query crée une nouvelle requête query_posts modifie la requête couranteWORDPRESS L’utilisation de l’existant
  43. 43. CHAPITRE 5LES FONCTIONSINDISPENSABLES
  44. 44. LES FONCTIONS INDISPENSABLES Récupérer & afficher the_title() get_post_type() the_excerpt() get_post_format() the_content() get_post_class() the_date(), the_time() the_category() the_permalink() the_tags() the_post_thumbnail() comments_number() the_ID() prev / next_post_link() the_author() get_post_meta()WORDPRESS L’utilisation de l’existant
  45. 45. LES FONCTIONS INDISPENSABLES Conditions 1/2 is_single() is_category() is_singular() is_admin() is_sticky() is_home(), is_front_page() is_attachment() is_404() is_page() wp_is_mobile() is_page_template() is_date(), is_archive() is_preview() is_paged() the_author() is_plugin_active()WORDPRESS L’utilisation de l’existant
  46. 46. LES FONCTIONS INDISPENSABLES Conditions 2/2 is_admin_bar_showing() La plupart des marqueurs conditionnels retournent in_the_loop() «True» ou «False. is_user_logged_in() email_exists() post_type_exists() is_active_widget() wp_script_is(), wp_style_is()WORDPRESS L’utilisation de l’existant
  47. 47. CHAPITRE 6 LES NONCES
  48. 48. LES NONCES Les Nonces sont utilisés dans les formulaire sous WordPress afin de prévenir les erreurs et les attaquesWORDPRESS L’utilisation de l’existant
  49. 49. LES NONCES Chaque formulaire frontend DOIT contenir une vérification par nonceWORDPRESS L’utilisation de l’existant
  50. 50. LES NONCES En pratique: création d’un formulaire <!-- Création d’un formulaire --> <form id="form_id" method="POST" action=""> <input type="hidden" name="securite_nonce" value="<?php echo wp_create_nonce(securite-nonce); ? >"/> <input type="submit" value="Valider"/> </form>WORDPRESS L’utilisation de l’existant
  51. 51. LES NONCES En pratique: Traitement du formulaire // Fonction de traitement du formulaire function traitement_des_donnes() { if( isset( $_POST[securite_nonce] ) ) { if( wp_verify_nonce( $_POST[securite_nonce], securite-nonce ) ) { // Le formulaire est validé et sécurisé } else { echo Erreur dans le formulaire; exit; // le formulaire est refusé } } } add_action(init, traitement_des_donnes);WORDPRESS L’utilisation de l’existant
  52. 52. CHAPITRE 7LES FONCTIONS MÉCONNUES
  53. 53. LES FONCTIONS MÉCONNUESwp_generate_password()Paramètres: $len: longueur du mot de passe $special_chars: utiliser ou pas des caractères spéciaux $extra_special_chars: utiliser d’autres caractères spéciaux<?php  echo Nouveau pass: . wp_generate_password();?> http://codex.wordpress.org/Function_Reference/wp_generate_passwordWORDPRESS L’utilisation de l’existant
  54. 54. LES FONCTIONS MÉCONNUESadd_query_arg()Paramètres: $param1: nouvelle clé (ou array) $param2: valeur de la nouvelle clé $old_query_or_uri: l’ancienne requête ($_SERVER[REQUEST_URI])<?php  $params = array( ‘action’ => ‘edit’, ‘id’ => ’12’ ); echo add_query_arg( $params ); // Affichera par exemple // http://monsite.com?page=78&action=edit&id=12?> http://codex.wordpress.org/Function_Reference/add_query_argWORDPRESS L’utilisation de l’existant
  55. 55. LES FONCTIONS MÉCONNUESregister_post_status()Paramètres: $post_status: nom du nouveau status $args: $label: description du statut $public: utilisation en frontend ? $exclude_from_search: ne pas inclure dans la recherche $show_in_admin_all_list: afficher pour tout post type $show_in_admin_status_list: intégrer à la liste $label_count: texte à afficher en haut des tableaux http://codex.wordpress.org/Function_Reference/add_query_argWORDPRESS L’utilisation de l’existant
  56. 56. LES FONCTIONS MÉCONNUESregister_post_status()function custom_post_status_unread(){ register_post_status( nonlu, array( label => _x( Non lu, post ), public => true, exclude_from_search => false, show_in_admin_all_list => true, show_in_admin_status_list => true, label_count => _n_noop( Non lu <spanclass="count">(%s)</span>, Non lu <spanclass="count">(%s)</span> ), ) );}add_action( init, custom_post_status_unread ); http://codex.wordpress.org/Function_Reference/register_post_statusWORDPRESS L’utilisation de l’existant
  57. 57. LES FONCTIONS MÉCONNUESadd_thickbox()<?php add_thickbox(); ?><a href="#" class="thickbox">Voir le Codex WordPress</a><?php add_thickbox(); ?><a href="#TB_inline?width=600&height=550&inlineId=my-content-id" class="thickbox">Voir le contenu</a><div id="my-content-id" style="display:none;"> Ce contenu est affiché dans la lightbox!</div> http://codex.wordpress.org/Function_Reference/add_query_argWORDPRESS L’utilisation de l’existant
  58. 58. QUESTIONS ? ?WORDPRESS L’utilisation de l’existant
  59. 59. FIN Rendez-vous à 13:00 avec Gilles Vauvarin pour « Démystifier WordPress Multisite »WORDPRESS L’utilisation de l’existant
  60. 60. MERCI !@remicorson remicorson.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×