WordPress a pris pied dans le jeu du système de gestion de contenu général (CMS) depuis plusieurs années, mais la véritable percée a été le mécanisme de type de publication personnalisé, qui permet de créer une variété de contenu. Voyons comment cela s’est produit et toutes les options offertes par cette excellente fonctionnalité.
À Quoi Ça Ressemblait
En fait, les types de publication personnalisés existent depuis longtemps, en particulier depuis le 17 février 2005, lorsque WordPress 1.5 a ajouté le support des pages statiques, créant la base de données post_type champ.
La fonction wp_insert_post() existe depuis WordPress 1.0, donc lors de l’implémentation de post_type champ dans 1.5, il vous suffit de définir post_type valeur lors de l’insertion d’un article. Bien sûr, non seulement la création et la gestion de types de publication personnalisés nécessitent plus de ressources, mais à mesure que les fonctions WordPress deviennent de plus en plus flexibles, la quantité de codage requise augmente également.
Dans la version 2.8, la fonction register_post_type() et d’autres éléments utiles ont été ajoutés à la version de nuit, et lorsque la version 2.9 est sortie, les fonctions sont devenues disponibles pour tout le monde. À ce stade, WordPress peut devenir un CMS à part entière sans beaucoup de codage et de piratage. Il existe de nombreuses fonctionnalités intégrées disponibles pour les enchères WordPress.
Ce Que WordPress Peut Faire Pour Vous Maintenant
Les types de publication personnalisés ne sont rien d’autre que des publications régulières dans la base de données avec différentes valeurs de post_type. Les types de publication d’articles réguliers sont la post-utilisation de la page, l’utilisation de pièces jointes à la page, etc. Vous pouvez maintenant créer votre propre contenu pour indiquer le type de contenu créé. Vous pouvez créer des types de publication personnalisés pour des livres, des films, des critiques, des produits, etc.
S’il est créé correctement, vous pouvez obtenir les résultats suivants avec quelques lignes de code:
- Le type de publication personnalisé apparaîtra dans le back-end sous la forme d’un élément de menu distinct avec sa propre liste de publications et une page « Ajouter un nouveau ».
- Naviguer vers vous
http://mysite.com/customposttype/
amènera à la page d’archive du type de publication. Cela équivaut à visiter la page d’accueil pour les derniers articles du type de message «post». - Les catégories et les balises peuvent être rendues disponibles pour le type de publication personnalisé, ou vous pouvez créer des taxonomies personnalisées.
En dehors de cela, vous pouvez modifier d’innombrables options, telles que l’emplacement du type de publication personnalisé dans le menu, s’il peut être recherché, quel niveau d’utilisateur peut y accéder, s’il s’agit de règles de réécriture hiérarchiques, personnalisées, etc.
Différents types de contenu ont des exigences de données différentes. Pour les publications régulières, vous voudrez spécifier l’auteur, la catégorie, la date, etc. Pour un type de publication personnalisé «livre», vous aimeriez idéalement avoir la possibilité de spécifier l’auteur du livre, le nombre de pages, le genre, l’éditeur et d’autres données spécifiques au livre. En utilisant des meta-box personnalisées, cela est également facile à réaliser et à gérer.
Les meta-box personnalisées vous permettent d’ajouter des boîtes supplémentaires à l’écran d’édition d’un message. Ils utilisent généralement des champs personnalisés, vous pouvez donc simplement utiliser des champs personnalisés, mais en séparant certains champs personnalisés en tant que meta-box, vous pouvez créer un administrateur beaucoup plus fluide et utilisable.
Travailler Avec Des Types De Publication Personnalisés
Afin de créer et d’utiliser efficacement des types de publication personnalisés, vous devez être familiarisé avec les éléments suivants:
- Création de types de publication personnalisés,
- Création de taxonomies personnalisées,
- Création de meta-box personnalisées.
Création De Types De Publication Personnalisés
Le premier sur notre ordre du jour est la création du type de message lui-même. Idéalement, vous devriez créer un plugin lorsque vous utilisez un type de publication personnalisé, mais si vous ne savez pas comment le faire ou si vous avez simplement besoin d’un test rapide, vous pouvez utiliser le fichier functions.php dans votre thème.
function my_custom_post_car() {
$args = array();
register_post_type( 'car', $args );
}
add_action( 'init', 'my_custom_post_car' );
Dans sa forme la plus simple, il créera des types de publication avec presque aucune personnalisation. Il ne sera pas public, ne sera pas affiché dans l’admin, et le message interactif sera le même que le message («publication enregistrée», «publication mise à jour», etc.) et ainsi de suite. Afin d’adapter notre nouveau type de publication à nos besoins, je vais présenter certaines des options les plus couramment utilisées et les ajouter au $argstableau précédemment vide.
function my_custom_post_car() {
$labels = array(
'name' => _x( 'Voitures', 'post type general name' ),
'singular_name' => _x( 'Voiture', 'post type singular name' ),
'add_new' => _x( 'Ajouter une nouvelle', 'book' ),
'add_new_item' => __( 'Ajouter une nouvelle voiture' ),
'edit_item' => __( 'Modifier' ),
'new_item' => __( 'Nouvelle voiture' ),
'all_items' => __( 'Toutes les voitures' ),
'view_item' => __( 'Voir la voiture' ),
'search_items' => __( 'Recherche de voitures' ),
'not_found' => __( 'Aucune voiture trouvé' ),
'not_found_in_trash' => __( 'Aucune voiture trouvé dans la corbeille' ),
'parent_item_colon' => ’,
'menu_name' => 'Voitures'
);
$args = array(
'labels' => $labels,
'description' => 'Contient nos voitures et données spécifiques aux voitures',
'public' => true,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
'has_archive' => true,
);
register_post_type( 'car', $args );
}
add_action( 'init', 'my_custom_post_car' );
- labels: Le labels doit être un tableau définissant les différentes étiquettes qu’un type de publication personnalisé peut avoir. J’ai séparé cela ci-dessus juste pour clarifier les arguments pour l’enregistrement d’un type de publication.
- description: Une brève explication de notre type de publication personnalisé; ce qu’il fait et pourquoi nous l’utilisons.
- public: Cette option contrôle un tas de choses en une seule fois. Définir ceci sur true définira un tas d’autres options (toutes liées à la visibilité) sur true. Par exemple, il est possible que le type de publication personnalisé soit visible mais non interrogeable. Plus à ce sujet plus tard.
- menu_position: Définit la position du menu de type de publication personnalisé dans le back-end. Le régler sur «5» le place sous le menu «posts»; plus vous le définissez haut, plus le menu sera placé bas.
- supports: Cette option configure les contrôles WordPress par défaut disponibles dans l’écran d’édition pour le type de publication personnalisé. Par défaut, seuls le champ de titre et l’éditeur sont affichés. Si vous souhaitez ajouter un support pour les commentaires, les révisions, les formats de publication, etc., vous devrez les spécifier ici. Pour une liste complète, jetez un œil à la section des arguments dans le Codex.
- has_archive Si défini sur true, les règles de réécriture seront créées pour vous, activant une archive de type de publication à http://mysite.com/posttype/(par défaut)
Après avoir configuré cela, vous devriez voir l’entrée de menu pour le type de publication personnalisé. Vous devriez pouvoir ajouter des articles, afficher la liste des articles dans l’administrateur et accéder aux articles publiés sur le site Web. Comme mentionné précédemment, lors de la création d’un type de publication, vous pouvez modifier de nombreuses choses. Je recommande de consulter la liste des paramètres dans le Codex pour une description complète de chaque option et valeur possible.
Messages d'interaction personnalisés
WordPress génère de nombreux messages déclenchés par les actions des utilisateurs. Toutes les opérations sur le backend, telles que la mise à jour, la publication, la recherche, etc., aboutiront à une publication par défaut adaptée à la publication régulière. Vous pouvez facilement modifier le texte de ces messages à l’aide de post_updated_messages crochet.
function my_updated_messages( $messages ) {
global $post, $post_ID;
$messages['car'] = array(
0 => ’,
1 => sprintf( __('Voiture à jour. Voir la voiture'), esc_url( get_permalink($post_ID) ) ),
2 => __('Champ personnalisé mis à jour.'),
3 => __('Champ personnalisé supprimé.'),
4 => __('Voiture mis à jour.'),
5 => isset($_GET['revision']) ? sprintf( __('Voiture restauré en révision à partir de %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => sprintf( __('Voiture publié. Voir la voiture'), esc_url( get_permalink($post_ID) ) ),
7 => __('voiture enregistré.'),
8 => sprintf( __('Voiture soumise. Aperçu de la voiture'), esc_url( add_query_arg( 'aperçu', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( __('Voiture prévu pour: %1$s. Aperçu de la voiture'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
10 => sprintf( __('Brouillon de la voiture mis à jour. Aperçu voiture'), esc_url( add_query_arg( 'aperçu', 'true', get_permalink($post_ID) ) ) ),
);
return $messages;
}
add_filter( 'post_updated_messages', 'my_updated_messages' );
Comme vous pouvez le voir, ce n’est pas la méthode la plus conviviale de gestion des messages. Un tableau associatif serait bien meilleur; nous pourrions voir à quoi sert chaque message sans avoir à lire le message réel.
Veuillez noter que vous pouvez utiliser cette fonctionnalité unique pour modifier les messages de tous les types de publications personnalisées. Le tableau $message contient des messages de tous les types de publication, vous pouvez donc tous les modifier ici. Je crée personnellement une fonction pour chaque type de publication afin de pouvoir facilement combiner la création de type de publication et les messages personnalisées.
Une fonctionnalité que je vois rarement implémentée est l’aide contextuelle personnalisée. En tant qu’utilisateur, je n’ai jamais utilisé cette fonctionnalité moi-même, mais je suis sûr que beaucoup de gens le font; dans tous les cas, il est agréable de fournir une certaine prise en main pour les utilisateurs moins expérimentés.
La fonction d’aide contextuelle est un onglet descendant qui peut être vu en haut à droite des pages, le cas échéant. Voyons comment le contenu peut être modifié.
function my_contextual_help( $contextual_help, $screen_id, $screen ) {
if ( 'car' == $screen->id ) {
$contextual_help = 'Voitures
Les voitures affichent les détails des articles que nous vendons sur le site Web. Vous pouvez en voir une liste sur cette page dans l\'ordre chronologique inverse - le dernier que nous avons ajouté est le premier.
Vous pouvez afficher / modifier les détails de chaque voiture en cliquant sur son nom, ou vous pouvez effectuer des actions en masse en utilisant le menu déroulant et en sélectionnant plusieurs éléments.
';
} elseif ( 'edit-voiture' == $screen->id ) {
$contextual_help = 'Édition de voitures
Cette page vous permet de visualiser / modifier les détails de la voiture. Veuillez vous assurer de remplir les cases disponibles avec les détails appropriés (image de la voiture, prix, marque) et ne pas ajouter ces détails à la description de la voiture.
';
}
return $contextual_help;
}
add_action( 'contextual_help', 'my_contextual_help', 10, 3 );
C’est également un peu délicat, car vous devez connaître l’ID de l’écran que vous utilisez. Si vous imprimez le contenu de la variable $screen, vous devriez être en mesure de déterminer facilement l’ID. Vous pouvez également utiliser cette fonctionnalité pour modifier l’aide contextuelle de tous les types de publication personnalisés à la fois, mais je recommande personnellement de la combiner avec les deux premiers modules et de l’utiliser pour un seul type de publication.
Aperçu
Pour récapituler rapidement, nous avons utilisé trois fonctions pour créer un type de publication personnalisé «complet». Nous avions l’habitude register_post_type() de créer le type de publication lui-même et deux hooks – contextual_help et post_updated_messages – pour créer respectivement des conseils utiles et des messages pertinents.
Taxonomies Personnalisées
Vos articles de blog réguliers utilisent des catégories et des balises pour créer une structure d’organisation. Cependant, la même organisation n’a pas nécessairement de sens pour les types de publication personnalisés. Votre article de blog peut être lié à votre «vie», «pensée» ou «rêve». Celles-ci ne sont évidemment pas adaptées au produit.
C’est le problème qui a poussé les développeurs à créer des taxonomies personnalisées. Vous pouvez créer une taxonomie distincte nommée «Catégories de produits» pour héberger les catégories que vous utilisez uniquement pour les produits.
function my_taxonomies_car() {
$args = array();
register_taxonomy( 'car_category', 'car' $args );
}
add_action( 'init', 'my_taxonomies_car', 0 );
Comme pour les types de publication personnalisés, vous pouvez créer des taxonomies très facilement, mais vous devez effectuer un certain travail pour l’adapter à vos besoins. La taxonomie personnalisée est publique par défaut, elle fonctionne donc mieux dès la sortie de la boîte, de sorte que le contenu ci-dessus est en fait suffisant pour associer la taxonomie à la version du produit. Regardons un exemple personnalisé.
function my_taxonomies_car() {
$labels = array(
'name' => _x( 'Voitures', 'taxonomy general name' ),
'singular_name' => _x( 'Voiture', 'taxonomy singular name' ),
'search_items' => __( 'Recherche de voitures' ),
'all_items' => __( 'Toutes les voitures' ),
'parent_item' => __( 'Catégorie de voiture parent' ),
'parent_item_colon' => __( 'Catégorie de voiture parent;' ),
'edit_item' => __( 'Modifier' ),
'update_item' => __( 'Mettre à jour la catégorie de voiture' ),
'add_new_item' => __( 'Ajouter une nouvelle voiture' ),
'new_item_name' => __( 'Nouvelle categorie de voiture' ),
'menu_name' => 'Voiture categories'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
);
register_taxonomy( 'car_category', 'car', $args );
}
add_action( 'init', 'my_taxonomies_car', 0 );
Comme vous pouvez le voir, peu de choses ont changé. Nous avons ajouté quelques balises et défini l’option de superposition sur true. Cela permet l’utilisation de la taxonomie «style catégorie». Lorsqu’elle est définie sur false (qui est la valeur par défaut), votre taxonomie sera similaire à l’étiquette par défaut.
Post Meta Boxes
Les meta-box sont les boîtes déplaçables que vous voyez dans l’écran d’édition WordPress d’un article. Il existe de nombreuses meta-box intégrées, telles que les contrôles de publication, la taxonomie, les boîtes d’auteur, etc., mais vous pouvez en créer vous-même.
Les meta-box ont tendance à être utilisées pour gérer les données de champs personnalisés d’une manière beaucoup plus conviviale que la boîte de champs personnalisés intégrée. Depuis que vous avez mis les contrôles en place, vous pouvez ajouter une vérification des erreurs côté client et bien d’autres choses sophistiquées.
La création d’une meta-box nécessite trois étapes:
- Définissez la boîte elle-même,
- Définir le contenu de la meta-box,
- Définissez la manière dont les données de la boîte sont gérées.
Définition de la meta-box
add_action( 'add_meta_boxes', 'car_price_box' );
function car_price_box() {
add_meta_box(
'car_price_box',
__( 'Prix Voiture', 'myplugin_textdomain' ),
'car_price_box_content',
'car',
'side',
'high'
);
}
Le code ci-dessus crée la meta-box avec les paramètres suivants (dans l’ordre donné):
- L’identifiant unique de la meta-box (il ne doit pas nécessairement correspondre au nom de la fonction),
- Le titre de la meta-box (visible par les utilisateurs),
- La fonction qui affichera le contenu de la boîte,
- Le type de publication auquel appartient la meta-box,
- Le placement de la meta-box,
- La priorité de la meta-box (détermine «à quelle hauteur» elle est placée).
Définition du contenu de la meta-box
function car_price_box_content( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ), 'car_price_box_content_nonce' );
$val = get_post_meta($post->ID,'_ma_valeur',true);
echo '';
echo '';
}
Il s’agit d’une simple boîte qui ne contient que le prix, nous avons donc créé une étiquette et une entrée pour la gérer. Un champ nonce est également présent, ce qui ajoute de la sécurité à la soumission des données.
Traitement des données soumises
Dans la plupart des cas, vous souhaitez enregistrer les données en tant que champ personnalisé, mais vous n’êtes pas limité à cette méthode. Vous pouvez utiliser l’entrée pour effectuer des appels d’API tiers, générer des fichiers XML ou tout ce que vous voulez. L’utilisation la plus courante consiste à enregistrer des données de publication personnalisées, voyons donc comment cela est fait.
add_action('save_post','car_price_box_save');
function car_price_box_save($post_ID){
// si la metabox est définie, on sauvegarde sa valeur
if(isset($_POST['car_price'])){
update_post_meta($post_ID,'_ma_valeur', esc_html($_POST['car_price']));
}
}
Cette fonctionnalité est principalement liée à la sécurité. Premièrement, si une sauvegarde automatique est en cours, rien ne se passera car l’utilisateur n’a pas réellement soumis le formulaire. Vérifiez ensuite le nombre aléatoire, puis vérifiez les autorisations. Si tout cela réussit, nous récupérerons les données et les ajouterons à l’article en utilisant la fonction update_post_meta().
Afficher votre contenu
Bien qu’il existe de nombreuses nuances dans tout ce qui précède, vous devez vous familiariser avec les bases. Il ne reste plus qu’à utiliser les données dont nous disposons actuellement et à montrer les choses aux utilisateurs. Cela implique la visualisation des publications (éventuellement de divers types et taxonomie de publications personnalisées) et l’utilisation de nos métadonnées de publication.
Affichage des messages
Si vous avez créé un type de publication avec le has_archive
paramètre défini sur «true», WordPress listera vos publications sur la page d’archive du type de publication. Si votre type de publication s’appelle «livres», vous pouvez y accéder en ajoutant ceci après votre url « /livres/ » et vous verrez votre liste de messages.
Cette page utilise archive-[post_type].php pour l’affichage si elle existe (archive-books.php dans notre cas). S’il n’existe pas, il utilisera archive.php et si cela n’existe pas, il l’utilisera index.php.
Une autre façon d’afficher le contenu du type de publication personnalisé consiste à utiliser une requête personnalisée avec la WP_Query classe. Pour afficher les publications d’un certain type de publication et d’une taxonomie personnalisée, vous pouvez faire quelque chose comme ceci:
'car',
'tax_query' => array(
array(
'taxonomy' => 'car_category',
'field' => 'slug',
'terms' => 'boardgames'
)
)
);
$cars = new WP_Query( $args );
if( $cars->have_posts() ) {
while( $cars->have_posts() ) {
$cars->the_post();
?>
Affichage des métadonnées
Les métadonnées peuvent être facilement récupérées en utilisant la fonction get_post_meta (). Dans l’exemple ci-dessus, nous avons enregistré un champ méta de publication nommé product_price. Nous pouvons récupérer la valeur de ce champ pour un élément donné en utilisant le code suivant:
Derniers mots
Comme vous pouvez le voir, en raison de la nature modulaire des commandes et des fonctions de WordPress, la création d’un CMS est très facile. La méthode décrite ici peut être utilisée pour créer presque tous les administrateurs personnalisés auxquels vous pouvez penser.
Étant donné que la définition du contenu des meta-box dépend entièrement de vous, vous pouvez créer des fonctions supplémentaires pour le contrôle, ce qui vous rend, vous ou vos clients, très satisfaits.
Vous pouvez aller plus loin avec des pages d’administration personnalisées et un contenu entièrement personnalisé, mais c’est une histoire pour un autre jour.