Je gère quelques sites qui incluent des avis et des informations importantes dans une bannière sur leur page d'accueil. J'ai tendance à utiliser un type de message personnalisé pour cela, en ajoutant mes bannières et en les affichant à l'endroit souhaité dans mon thème. (Si vous voulez faire quelque chose de similaire, c'est expliqué dans ce tutoriel.)
Mais invariablement mes bannières ont une date d'expiration. Ils peuvent contenir des informations sur un événement à venir ou une vacance de poste, par exemple. Une fois que l'événement est passé ou que le poste vacant a été pourvu, je dois aller sur le site et supprimer manuellement le message..
Ce serait tellement plus facile si, lors de la création de messages comme ceux-ci, je pouvais leur donner une date d'expiration après laquelle ils ne seraient plus visibles sur mon site..
Dans ce tutoriel, je vais vous montrer comment faire exactement cela. Il y a trois étapes:
pre_get_posts
crochet pour s'assurer que les publications postérieures à leur date d'expiration ne sont pas affichées.Pour compléter ce tutoriel, vous aurez besoin de:
Vous allez créer un plugin avec tout le code nécessaire à la date d'expiration et l'activer sur votre site. Alors, commençons!
Vous devez d’abord créer votre plugin. Dans le dossier plugins de votre wp-content
répertoire, créez un fichier vide appelé tutsplus-post-expiration-date-php
.
Ouvrez le fichier dans votre éditeur de code et ajoutez ce qui suit:
Vous aurez besoin de modifier le fichier pour utiliser votre propre nom et l'URL du plugin, mais vous devez indiquer à WordPress qu'il s'agit d'un plugin et ce qu'il fait..
Maintenant, va à ton Plugins écran dans l'admin WordPress et activer le plugin.
Créer la Meta Box
D'abord, nous allons créer la méta-boîte pour la date d'expiration.
Utiliser add_meta_box () pour afficher une méta-boîte
La première étape consiste à créer la fonction qui ajoutera la boîte méta à l’écran de post-édition. Ajoutez ceci à votre fichier de plugin:
function tutsplus_add_expiry_date_metabox () add_meta_box ('tutsplus_expiry_date_metabox', __ ('Date d'expiration', 'tutsplus', 'tutsplus_expiry_date_metabox_callback', 'post', 'high'); add_action ('add_meta_boxes', 'tutsplus_add_expiry_date_metabox');Cela utilise le
add_meta_box ()
fonction, qui a six paramètres:
'tutsplus_expiry_date_metabox'
: l'identifiant unique de cette meta box__ ('Date d'expiration', 'tutsplus')
: ceci est affiché comme titre de la meta box'tutsplus_expiry_date_metabox_callback'
: la fonction de rappel qui va remplir la boîte de méta (nous allons créer ceci ensuite)'poster'
: le type de message pour lequel l'écran d'édition cette méta-boîte apparaîtra'côté'
: quelle partie de l'écran la méta-boîte apparaîtra'haute'
: dans quelle position la meta-box apparaîtraLa fonction est ensuite attachée à la add_meta_boxes
crochet pour le faire feu au bon moment.
Si vous deviez enregistrer votre plug-in et charger votre écran de montage maintenant, une erreur se produirait car la fonction de rappel n'a pas été définie. Alors on va faire ça ensuite.
Ajoutez ceci à votre fichier de plugin:
fonction tutsplus_expiry_date_metabox_callback ($ post) ?>
Passons en revue ce que cela fait:
tutsplus_expiry_date_metabox_callback ()
fonction de rappel, avec $ post
comme son objet.$ tutsplus_expiry_date
avec la valeur de la 'expire'
méta clé comme valeur.Mon rendez-vous
classe nécessaire pour que le sélecteur de date fonctionne, le nom tutsplus_expiry_date
que nous utiliserons plus tard lors de la sauvegarde des données du champ, et de la valeur $ tutsplus_expiry_date
.Nous avons maintenant le formulaire, mais il ne fera rien, à moins de créer une autre fonction pour enregistrer les données ajoutées par les utilisateurs..
Pour enregistrer les données saisies dans le formulaire, nous devons créer une fonction, puis l’attacher à la save_post
crochet.
Dans votre fichier plugin, ajoutez ceci:
function tutsplus_save_expiry_date_meta ($ post_id) // Vérifie si l'utilisateur actuel est autorisé à modifier le message. * / if (! current_user_can ('edit_post', $ post-> ID)) return; if (isset ($ _POST ['tutsplus_expiry_date'])) $ new_expiry_date = ($ _POST ['tutsplus_expiry_date']); update_post_meta ($ post_id, 'expires', $ new_expiry_date); add_action ('save_post', 'tutsplus_save_expiry_date_meta');
Cela fait ce qui suit:
edit_post
capacité pour le poste actuel.isset
.$ new_expiry_date
et définit cela comme la valeur qui a été entrée.Nous avons donc maintenant une méta-boîte qui permettra aux utilisateurs d'ajouter du texte et de l'enregistrer dans les métadonnées de la publication. Rendons-le plus sécurisé.
Pour vous assurer que les métadonnées de publication ne sont éditées que via ce formulaire, nous ajouterons un nonce..
Dans la fonction de rappel, avant le reste du contenu de la fonction, ajoutez le code suivant:
wp_nonce_field ('tutsplus_expiry_date_metabox_nonce', 'tutsplus_nonce');
Ensuite, dans le tutsplus_save_expiry_date_meta ()
fonction de sauvegarde des données, ajoutez ceci au début de la fonction:
if (! isset ($ _POST ['tutsplus_nonce'])) ||! wp_verify_nonce ($ _POST ['tutsplus_nonce'], 'tutsplus_expiry_date_metabox_nonce')) renvoie;
Sauvegardez maintenant votre plugin et jetez un coup d’œil à votre écran de post-édition. Vous verrez votre meta box:
C’est un bon début, mais le problème est qu’il s’agit pour le moment d’un champ de texte normal. Il n’est donc pas possible de s’assurer que les utilisateurs ne saisissent que des dates et dans le format correct. Nous allons corriger cela en ajoutant le datepicker de l'interface utilisateur jQuery.
La bonne nouvelle est que le datepicker de jQuery UI est préchargé avec WordPress, vous n'avez donc pas besoin de l'enregistrer ni de l'installer: vous venez de le mettre en file d'attente dans une fonction..
En haut de votre fichier de plugin, ajoutez ceci:
function tutsplus_load_jquery_datepicker () wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); add_action ('admin_enqueue_scripts', 'tutsplus_load_jquery_datepicker');
Cela met en file d'attente à la fois le script lui-même et la feuille de style du script, qui est stockée sur les API Google. Notez que vous devez l’accrocher à la admin_enqueue_scripts
crochet d'action et de ne pas wp_enqueue_scripts
comme vous le feriez si vous utilisiez le script au début.
Ensuite, vous devez ajouter un script à la fonction de rappel qui génère votre formulaire. Après l'élément d'entrée et avant la fermeture tag, ajoutez ceci:
Cette référence à la Mon rendez-vous
classe que vous avez déjà ajoutée à l'élément d'entrée et y ajoute le script datepicker.
Votre fonction de rappel va maintenant ressembler à ceci:
fonction tutsplus_expiry_date_metabox_callback ($ post) ?>
Voyons maintenant à quoi ressemble la boîte méta après avoir sauvegardé mon fichier de plugin:
C'est beaucoup mieux! Toutefois, bien que vous puissiez maintenant ajouter une date d'expiration à vos publications, leur affichage sur le site ne changera rien. Changeons cela maintenant.
La dernière étape consiste à modifier la requête principale en utilisant le pre_get_posts
crochet.
Toujours dans votre fichier plugin, ajoutez ce code:
function tutsplus_filter_expired_posts ($ query) // n’affecte pas les écrans d’administration if (is_admin ()) return; // recherche la requête principale if ($ query-> is_main_query ()) // élimine les publications expirées $ today = date ('d-m-Y'); $ metaquery = array (array ('key' => 'expire', 'value' => $ aujourd'hui, 'compare' => '<', 'type' => 'RENDEZ-VOUS AMOUREUX', ) ); $ query-> set ('meta_query', $ metaquery); add_action ('pre_get_posts', 'tutsplus_filter_expired_posts');
Cela fait six choses:
tutsplus_filter_expired_posts ()
fonctionner avec $ requête
comme son objet.$ aujourd'hui
comme la date du jour, en utilisant le même format de date que le sélecteur de date utilise.$ metaquery
exclure les publications dont la date d'expiration est antérieure à la date du jour, à l'aide de la touche comparer
opérateur.$ metaquery
variable.La fonction est accrochée à pre_get_posts
qui le fera fonctionner comme la requête va chercher des messages.
Maintenant, sauvegardez votre fichier de plugin et essayez-le. Créez une publication dont la date de publication est antérieure à quelques jours, puis indiquez une date d'expiration pour hier. Enregistrez-le et passez à la page principale de votre blog. Vous constaterez que le message que vous venez de créer n'est pas là!
Pouvoir que vos publications expirent automatiquement à une date donnée peut être très utile. Si le contenu d'un message n'est plus pertinent ou si vous souhaitez que personne ne le voie après une date donnée, l'ajout d'une date d'expiration vous évite d'avoir à vous souvenir de le modifier ou de le supprimer dès qu'il n'est plus nécessaire..
En utilisant le datepicker de jQuery, vous avez créé une méta-boîte conviviale que vous pouvez utiliser pour gagner du temps et éviter la confusion de vos visiteurs..