Ik voer een aantal sites uit met kennisgevingen en belangrijke informatie in een banner op hun startpagina. Ik gebruik hiervoor meestal een aangepast berichttype, voeg mijn banners toe en toon ze waar ik moet in mijn thema. (Als je iets soortgelijks wilt doen, wordt dit in deze tutorial uitgelegd.)
Maar mijn banners hebben altijd een vervaldatum. Ze kunnen bijvoorbeeld informatie bevatten over een aankomend evenement of een vacature. Zodra het evenement is verstreken of de vacature is ingevuld, moet ik naar de site gaan en de post handmatig verwijderen.
Het zou zoveel gemakkelijker zijn als ik bij het maken van dit soort berichten een vervaldatum zou kunnen geven, waarna ze niet meer zichtbaar zijn op mijn site.
In deze zelfstudie laat ik u zien hoe u precies dat kunt doen. Er zijn drie stappen:
pre_get_posts
haak om ervoor te zorgen dat berichten na hun vervaldatum niet worden weergegeven.Om deze tutorial te voltooien, hebt u nodig:
U maakt een plug-in met alle code die nodig is voor de vervaldatum en activeert deze op uw site. Dus laten we beginnen!
Eerst moet je je plug-in maken. In de map met plug-ins in uw wp-content
map, maak een leeg bestand met de naam tutsplus-post-vervaldatum-php
.
Open het bestand in je code-editor en voeg het volgende toe:
Je moet het bestand bewerken om je eigen naam en plug-in URL te gebruiken, maar dit is wat je nodig hebt om WordPress te vertellen dat dit een plug-in is en wat het doet.
Ga nu naar uw plugins scherm in de WordPress-beheerder en activeer de plug-in.
De metabox maken
Eerst gaan we de metabox maken voor de vervaldatum.
Add_meta_box () gebruiken om een metabox weer te geven
De eerste stap is om de functie te maken die de metabox zal toevoegen aan het scherm voor het bewerken van berichten. Voeg dit toe aan uw plugin-bestand:
function tutsplus_add_expiry_date_metabox () add_meta_box ('tutsplus_expiry_date_metabox', __ ('Expiry Date', 'tutsplus'), 'tutsplus_expiry_date_metabox_callback', 'post', 'side', 'high'); add_action ('add_meta_boxes', 'tutsplus_add_expiry_date_metabox');Dit gebruikt de
add_meta_box ()
functie, die zes parameters heeft:
'Tutsplus_expiry_date_metabox'
: de unieke ID van deze metabox__ ('Vervaldatum', 'tutsplus')
: dit wordt weergegeven als de titel van de metabox'Tutsplus_expiry_date_metabox_callback'
: de callback-functie die de metabox zal vullen (we zullen deze volgende maken)'post'
: het berichttype waarvan het bewerkingsscherm deze metabox zal weergeven'kant'
: op welk deel van het scherm verschijnt de metabox'High'
: in welke positie de metabox verschijntDe functie is dan gekoppeld aan de add_meta_boxes
haak om het op het juiste moment te laten vuren.
Als u uw plug-in zou opslaan en uw bewerkingsscherm nu zou laden, zou u een foutmelding zien, omdat de callback-functie niet is gedefinieerd. Dus dat doen we daarna.
Voeg dit toe aan uw plugin-bestand:
function tutsplus_expiry_date_metabox_callback ($ post) ?>
Laten we doorlopen wat dit doet:
tutsplus_expiry_date_metabox_callback ()
callback-functie, met $ bericht
als object.$ tutsplus_expiry_date
met de waarde van de 'Verloopt'
metasleutel als waarde.Mijn datum
klasse die nodig is om de datepicker te laten werken, de naam tutsplus_expiry_date
die we later zullen gebruiken bij het opslaan van gegevens uit het veld en de waarde $ tutsplus_expiry_date
.Dus nu hebben we het formulier, maar het zal eigenlijk niets doen, tenzij we een andere functie creëren om de gegevens die gebruikers eraan toevoegen, op te slaan.
Om gegevensinvoer in het formulier op te slaan, moeten we een functie maken en die vervolgens koppelen aan de save_post
haak.
Voeg dit toe aan uw plugin-bestand:
function tutsplus_save_expiry_date_meta ($ post_id) // Controleer of de huidige gebruiker rechten heeft om het bericht te bewerken. * / als (! current_user_can ('edit_post', $ post-> ID)) terugkomt; if (isset ($ _POST ['tutsplus_expiry_date'])) $ new_expiry_date = ($ _POST ['tutsplus_expiry_date']); update_post_meta ($ post_id, 'verloopt', $ new_expiry_date); add_action ('save_post', 'tutsplus_save_expiry_date_meta');
Dit doet het volgende:
bericht bewerken
mogelijkheid voor de huidige post.isset
.$ new_expiry_date
en definieert dat als de waarde die is ingevoerd.We hebben nu dus een metabox waarmee gebruikers tekst kunnen toevoegen en opslaan in de metagegevens van het bericht. Laten we het veiliger maken.
Om ervoor te zorgen dat de metagegevens van de berichten alleen via dit formulier worden bewerkt, voegen we een nonce toe.
Voeg in de callback-functie, vóór de rest van de inhoud van de functie, de volgende code toe:
wp_nonce_field ('tutsplus_expiry_date_metabox_nonce', 'tutsplus_nonce');
Vervolgens, in de tutsplus_save_expiry_date_meta ()
functie voor het opslaan van gegevens, voeg dit toe aan het begin van de functie:
if (! isset ($ _POST ['tutsplus_nonce']) ||! wp_verify_nonce ($ _POST ['tutsplus_nonce'], 'tutsplus_expiry_date_metabox_nonce')) terug;
Sla nu je plug-in op en bekijk je berichtbewerkingsscherm. Je ziet je metabox:
Dit is een goed begin, maar het probleem is dat dit op dit moment een normaal tekstveld is, dus er is geen manier om ervoor te zorgen dat uw gebruikers er alleen datums in invoeren en in het juiste formaat. We zullen dat corrigeren door de datapicker van jQuery UI toe te voegen.
Het goede nieuws is dat de datapicker van de jQuery-gebruikersinterface vooraf is geladen met WordPress, dus u hoeft het niet te registreren of te installeren: u plaatst het gewoon in een functie.
Voeg aan de bovenkant van uw plug-in bestand dit toe:
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');
Hiermee worden zowel het script zelf als de stylesheet voor het script in de wachtrij geplaatst, die wordt opgeslagen in Google API's. Merk op dat je het moet koppelen aan de admin_enqueue_scripts
actie haak en niet aan wp_enqueue_scripts
zoals je zou doen als je het script aan de voorkant zou gebruiken.
Vervolgens moet u een script toevoegen aan de callback-functie die uw formulier uitvoert. Na het invoerelement en vóór het sluiten label, voeg dit toe:
Dit verwijst naar de Mijn datum
klasse die u al aan het invoerelement hebt toegevoegd en waaraan het datepickenscript is toegevoegd.
Uw callback-functie ziet er nu als volgt uit:
function tutsplus_expiry_date_metabox_callback ($ post) ?>
Laten we nu eens kijken hoe de metabox eruitziet nadat ik mijn plug-insbestand heb opgeslagen:
Dat is veel leuker! Maar hoewel u nu een vervaldatum aan uw berichten kunt toevoegen, maakt het geen verschil of ze al dan niet op uw site worden weergegeven. Laten we dat nu veranderen.
De laatste stap is om de hoofdvraag aan te passen met behulp van de pre_get_posts
haak.
Werk nog steeds in je plugin-bestand, voeg deze code toe:
function tutsplus_filter_expired_posts ($ query) // heeft geen invloed op beheerdersschermen als (is_admin ()) terugkomt; // controleer voor de belangrijkste vraag of ($ query-> is_main_query ()) // uitgepuurde berichten filteren $ today = date ('d-m-Y'); $ metaquery = array (array ('key' => 'expires', 'value' => $ today, 'compare' => '<', 'type' => 'DATE',)); $ query-> set ('meta_query', $ metaquery); add_action ('pre_get_posts', 'tutsplus_filter_expired_posts');
Dit doet zes dingen:
tutsplus_filter_expired_posts ()
functie met $ vraag
als object.$ vandaag
als de datum van vandaag, met dezelfde datumnotatie als de datepicker gebruikt.$ metaquery
om berichten waarvan de vervaldatum vóór de huidige datum valt uit te sluiten met behulp van de vergelijken
operator.$ metaquery
veranderlijk.De functie is verslaafd pre_get_posts
waardoor het wordt uitgevoerd terwijl de query berichten ophaalt.
Sla nu je plugin-bestand op en probeer het uit. Maak een bericht met een publicatiedatum van een paar dagen in het verleden en geef het een vervaldatum van gisteren. Sla het op en ga naar je hoofdblogpagina. Je zult merken dat de post die je zojuist hebt gemaakt er niet is!
Het kan erg handig zijn om je berichten automatisch op een bepaalde datum te laten verlopen. Als de inhoud van een bericht niet langer relevant is, of als je niet wilt dat mensen het na een bepaalde datum zien, kun je door het toevoegen van een vervaldatum niet meer onthouden om het bericht te bewerken of te verwijderen als het niet meer nodig is.
Door de jQuery-datepicker te gebruiken, hebt u een gebruikersvriendelijke metabox gemaakt die u kunt gebruiken om u tijd en verwarring bij uw bezoekers te besparen.