Si vous créez un type de contenu customisé (custom post type) pour votre site ou un plugin autonome, vous souhaiterez sûrement mettre en place un système convivial de traduction ou de modification de son slug permettant de créer les bases d’URL optimisées SEO pour ce dernier. Nous allons ici créer un plugin utilisant les API Options et Settings de WordPress, et permettant la mise à jour automatique des permaliens (percalines) de nos types de contenu personnalisés.
Vous l’aurez compris, l’idée clé est ici de produire grâce au slug WordPress, un contenu flexible. En effet, tout l’intérêt des custom post types est de pouvoir en proposer un affichage formaté, mais surtout de permettre leur catégorisation et un accès standardisé et sémantiquement pertinent, et pour cela, quoi de mieux qu’une URL bien propre ?
Nous allons donc nous aider de l’API d’options de WordPress de façon précoce pour prédéfinir notre slug, et l’API Settings pour créer notre page de personnalisation au sein d’un plugin volontairement basique. Nous encapsulerons nos fonctions dans une classe pour plus de clarté.
Pour information, un slug n’est pas une limace, mais un formatage du titre de page ou d’article visant à produire une URL dite user friendlyet je ne suis pas entomologiste, mais bien webmaster freelance ;-).
Création du plugin et enregistrement des hooks d’activation et désactivation
Pour définir nos options à l’activation du plugin (et les supprimer lors de sa désactivation) nous allons utiliser register_activation_hook() et register_deactivation_hook() et ciblant des méthodes statiques de notre classe, ce qui autorisera leur utilisation avant même son instanciation. Commençons donc par créer note plugin :
#wp-content/plugins/jst_i18nable/jst_i18nable.php
<?php
/**
* Plugin Name: 18nable CPT
* Description: Provides a custom post type with translatable slug for your CPT can be anything
*/
if( !defined( 'ABSPATH' ) ) exit;
if( !class_exists( 'JST_Generic_CPT' ) ) {
class JST_Generic_CPT {
private $opts;
/**
* Constructor
*/ public function __construct() {
/**
* récupération/Assignation des options
*/
$this->opts = get_option( 'jst_generic_cpt' );
}
/**
* Activation
*/
static public function activation()
{
add_option( 'jst_generic_cpt', array(
'slug' => 'generic-cpt',
'singular' => 'Genetric CPT',
'plural' => 'Generic CPTs',
'menu_title' => 'Generic CPT'
) );
}
/**
* Deactivation
*/
static public function deactivation()
{
delete_option( 'jst_generic_cpt' );
}
}
/**
* Création et suppression de l'option à l'activation/désactivation
*/
register_activation_hook( __FILE__, array( 'JST_Generic_CPT', 'activation' ) );
register_deactivation_hook( __FILE__, array( 'JST_Generic_CPT ', 'deactivation' ) );
new JST_Generic_CPT;
}
La méthode add_option() est évidemment la première méthode de l’API options de WordPress. Nous enregistrons une option sous forme de tableau pour ne pas polluer inutilement la base de données, et plus précisément la table wp_options. Ce tableau sera sérialisé automatiquement à l’enregistrement des données. Dans le constructeur de notre class, nous assignons directement nos options à une propriété $opts pour nous permettre de les récupérer à tout moment.
Une page d’administration pour gérer le slug
Pour créer des pages d’administration dans WordPress, on peut utiliser le hook ‘admin-menu’. Cette page permettra à l’utilisateur de remplir les champs avec la valeur souhaitée. On peut bien sûr s’en servir pour proposer beaucoup d’autres options à gérer. Toujours dans le constructeur :
/**
* Création page d'option
*/
add_action( 'admin_menu', array( $this, 'option_pages' ) );
Puis on définit notre méthode de classe ‘option_pages’ :
/**
* Création des pages d'option
*/
public function option_pages()
{
add_options_page(
'Generic CPT Settings',
'GCPT Settings',
'manage_options',
__FILE__,
array( $this, 'generic_cpt_options_page' )
);
}
Voici un rappel de la signature de add_option_page():
add_option_page( $page_title, $menu_title, _$capabilities, $page_slug, $callback )
$capabilities est la permission requise que l’utilisateur devra avoir sur le site pour se voir présenter la page. $page_slug correspond à l’argument « page » de la query string correspondant à notre page d’administration. $callback est la méthode proposant l’affichage, il nous faut donc la définir immédiatement.
Affichage de la page de gestion des options : API Settings en action
L’API Settings de WordPress est faite pour simplifier l’affichage de formulaire de paramétrage des options. Elle gère la sécurisation du formulaire en générant pour nous les nonces, et elle permet de le partitionner afin d’offrir des sections et champs de formulaire documentés aux utilisateurs.
Nous nous contentons de définir les balises