 2017/2018 - ICOM Université Lyon 2 - DUCCI
        2017/2018 - ICOM Université Lyon 2 - DUCCI
      
Création de thème, règles et outils
| https://chstudio.fr | |
| @s_hulard | |
| http://github.com/shulard | |
| s.hulard@chstudio.fr | |
| s.hulard@univ-lyon2.fr | 
actions et filtersUn template est un représentation complète des possibilités offertes pour afficher les contenus. Il faut bien prendre en compte toutes les contraintes.
index.php ?Il arrive qu'on retrouve dans différents gabarits le même bloc qui affiche les mêmes informations.
Même s'il est placé à un endroit différent ou avec un style un peu adapté, il est important de créer un fichier réutilisable
                Pour charger ces fichiers, il faut ajouter dans le code html des balises <link> et <script>.
Selon le site qui utilise le thème, l'URL vers ces fichiers peut être différente. Wordpress propose des outils pour toujours disposer de la bonne URL.
Tout le code présent dans functions.php est exécuté dans le front-end et le back-end. Il faut utiliser les actions et filters pour s'assurer que les CSS et JS ne soient pas chargés au mauvais endroit !
  function montheme_scripts()
  {
    wp_register_style('mon-style', get_stylesheet_directory_uri().'/style.css');
    wp_enqueue_style('mon-style');
    wp_enqueue_script('script1', get_stylesheet_directory_uri().'/js/script1.js');
  }
  add_action('wp_enqueue_scripts', 'montheme_scripts');
              Ensuite on laisse la magie de Wordpress opérer avec wp_head et wp_footer
Il est possible d'adapter le style de l'éditeur de saisie de WordPress.
Pour cela il faut utiliser Editor Style :
  add_editor_style();
  add_editor_style( 'css/custom-editor-style.css' );
              Par défaut le fichier editor-style.css est utilisé.
actions et filtersDans le coeur Wordpress, des actions sont "appliquées" partout.
Elles apportent une grande modularité dans la gestion du site.
Le code à écrire pour les utiliser n'est pas très simple et le comportement des actions n'est pas toujours très bien documenté
  function ek_theme_setup()
  {
    //Load localisation
    load_theme_textdomain('ek', get_template_directory() . '/languages');
    //Enhance theme support
    add_theme_support( 'post-thumbnails' );
    add_theme_support( 'menus' );
    //Register specific image sizes
    add_image_size( 'blog-thumb', 136, 126, true );
  }
  add_action( 'after_setup_theme', 'ek_theme_setup' );
              Pour une liste de toutes les actions, voir sur le Codex
filtersLes filters sont utilisés partout dans Wordpress. Contrairement aux actions, ils sont appliqués à chaque traitement sur les données pour permettre de les manipuler.
  function wpse_custom_order($clauses)
  {
    global $wp_query;
    // check for order by custom_order
    if (isset($clauses['where']) && strpos($clauses['where'], 'postmeta.meta_key') !== false ) {
      $clauses['join'] = str_replace('INNER JOIN', 'LEFT JOIN', $clauses['join']).$clauses['where'];
      $clauses['where'] = '';
    }
    return $clauses;
  }
  add_filter('get_meta_sql', 'wpse_custom_order', 10, 1);
              Pour les actions :
after_setup_theme : Généralement utilisé pour initialiser les paramètre et options du thèmeplugins_loaded : Généralement utilisé pour initialiser les paramètre et options d'un plugintemplate_redirect : Permet d'intervenir au moment du choix du templatewp_enqueue_scripts : Pour charger tous les styles et scripts sur le frontPour les filters :
previous_posts_link_attributes, next_posts_link_attributes, previous_comments_link_attributes, next_comments_link_attributestiny_mce_before_init : Pour adapter TinyMCEimage_size_names_choose : Pour définir les formats d'images autorisés dans le contenuLes médias renseignés dans la bibliothèque peuvent être utilisés dans les templates en affichage (bandeau de header par exemple)
  //Afficher l'image 1 en taille full
  wp_get_attachment_image(1, 'full');
  //Récupérer l'URL de l'image 18 en taille thumbnail
  wp_get_attachment_image_src(1, 'thumbnail');
              Il peut être intéressant de définir des formats d'image spécifiques pour optimiser les chargement des page.
On ajoute dans le fichier functions.php:
  //Format 136x126 avec crop
  add_image_size( 'blog-thumb', 136, 126, true );
              Et on utilise de la même façon:
  //Format 136x126 avec crop
  wp_get_attachment_image(1, 'blog-thumb');
              Une fonctionalité cachée à activer dans votre functions.php. Elle permet d'associer une image à un article.
On ajoute dans le fichier functions.php:
  //Activation du "post-thumbnails"
  add_theme_support( 'post-thumbnails' );
              Et on utilise ensuite:
  //Format 136x126 avec crop
  if( has_post_thumbnail() ) {
    the_post_thumbnail('full', $attrs);
  }
              Il ne faut jamais afficher en front une donnée saisie par l'utilisateur.
Les fonctions natives utilisent par défaut le mécanisme d'échappement.
  the_title();
  esc_js(...);
  esc_html(...);
  esc_attr(...);
  esc_textarea(...);
  esc_url(...);
              Il ne faut jamais enregistrer en BDD une donnée non "escapée".
Il ne faut jamais intégrer dans une requête SQL des données utilisateur non "escapée".
  mysql_real_escape_string(...);
  esc_like(...);
  esc_sql(...);
              WP_Query WP_Query est l'objet qui encapsule la logique de requête sur les données.
  $query = new WP_Query( $args );
  // The Loop
  if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
      $query->the_post();
      the_title(); //Affichage du titre
    }
  } else {
    // no posts found
  }
  /* Restore original Post Data */
  wp_reset_postdata();
              ATTENTION: L'utilisation de wp_reset_postdata est très importante, sinon le contexte d'exécution générale devient instable
Grâce à la boucle, le contexte d'éxecution courant est complétement surchargé. Toutes les méthodes d'accès générique aux données sont "branchées" sur le post en cours d'itération, par exemple :
the_title()the_date()the_content()comments_template dans le détail d'un articlecomments.php pour paramétrer l'affichageIl ne faut pas créer un formulaire et essayer de soumettre les commentaires sans passer par l'API WordPress, c'est un risque important pour la sécurité du site !
functions.phpDans l'action after_setup_theme :
  add_theme_support( 'menus' );
  register_nav_menu( "main", "Menu principal");
              Dans le thème :
  wp_nav_menu(array('theme_location' => 'main'));
              functions.phpget_sidebar dans la page au même titre que get_header ou get_footersidebar.php à la racine de votre thèmesidebar.php, un template par défaut est utiliséDans l'action after_setup_theme :
  register_sidebar(array('name' => 'Ma sidebar', 'id' => 'sidebar-1'));
              Dans sidebar.php :
  if( is_active_sidebar( 'sidebar-1' )  ):
    dynamic_sidebar( 'sidebar-1' );
  endif;
              wp-cli est un outil en ligne de commande pour intéragir avec WordPress. Il facilite la gestion et la maintenance du site.
  curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  mv wp-cli.phar wp
  chmod +x wp
            wp scaffold post-type mon-typewp scaffold child-theme mon-theme --parent_theme=twentysixteenwp scaffold plugin mon-pluginwp medias regenerate --yeswp medias regenerate 10 --yeswp db export file.sqlwp db import file.sqlwp db query "SELECT COUNT(*) FORM wp_posts"wp core installwp core updatewp core check-updatewp core is-installedwp core languageObjectif: Finaliser le thème HTML5UP.
generic.html