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 filters
Un 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 filters
Dans 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
filters
Les 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_attributes
tiny_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.php
Dans 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.php
get_sidebar
dans la page au même titre que get_header
ou get_footer
sidebar.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-type
wp scaffold child-theme mon-theme --parent_theme=twentysixteen
wp scaffold plugin mon-plugin
wp medias regenerate --yes
wp medias regenerate 10 --yes
wp db export file.sql
wp db import file.sql
wp db query "SELECT COUNT(*) FORM wp_posts"
wp core install
wp core update
wp core check-update
wp core is-installed
wp core language
Objectif: Finaliser le thème HTML5UP.
generic.html