Ajouter une date d'expiration aux publications WordPress

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:

  1. Créer une méta-boîte dans l'écran de post-édition pour la date d'expiration.
  2. Appliquez le datepicker de l'interface utilisateur jQuery au champ de la boîte à méta pour améliorer l'interface..
  3. Enfin, utilisez le pre_get_posts crochet pour s'assurer que les publications postérieures à leur date d'expiration ne sont pas affichées.

Ce dont vous aurez besoin

Pour compléter ce tutoriel, vous aurez besoin de:

  • une installation de développement de WordPress
  • un éditeur de code

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!

Configurer le plugin

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îtra

La fonction est ensuite attachée à la add_meta_boxes crochet pour le faire feu au bon moment.

Création de la fonction de rappel

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) ?> 
ID, 'expire', true); ?> />

Passons en revue ce que cela fait:

  • Il définit le tutsplus_expiry_date_metabox_callback () fonction de rappel, avec $ post comme son objet.
  • Il ouvre un élément de formulaire.
  • Il crée une variable appelée $ tutsplus_expiry_date avec la valeur de la 'expire' méta clé comme valeur.
  • Il crée une étiquette pour le champ dans la boîte méta.
  • Il crée un élément d’entrée avec le 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.
  • Il ferme le formulaire.

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..

Sauvegarde des données après la sauvegarde

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:

  • Il vérifie si l'utilisateur actuel a le edit_post capacité pour le poste actuel.
  • Si c'est le cas, il vérifie si des données ont été ajoutées au champ de la boîte à méta à l'aide de isset.
  • Si c'est le cas, il crée une variable appelée $ new_expiry_date et définit cela comme la valeur qui a été entrée.
  • Enfin, il met à jour les métadonnées de la publication avec cette valeur..

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é.

Ajout d'un nonce pour la sécurité

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.

Ajout du 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) ?> 
ID, 'expire', true); ?> />

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.

Modification de la requête pour exclure les publications expirées

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:

  • D'abord, il définit le tutsplus_filter_expired_posts () fonctionner avec $ requête comme son objet.
  • Il vérifie si nous sommes dans les écrans d'administration, car nous ne voulons pas en exclure les publications expirées..
  • Ensuite, il vérifie si la requête principale est en cours d'exécution.
  • Si oui, il définit la variable $ aujourd'hui comme la date du jour, en utilisant le même format de date que le sélecteur de date utilise.
  • Il définit ensuite $ metaquery exclure les publications dont la date d'expiration est antérieure à la date du jour, à l'aide de la touche comparer opérateur.
  • Enfin, il réinitialise la requête en utilisant le $ 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à!

Résumé

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..