Vandaag zullen we kijken naar de WP-Cron-functies, een van de minder bekende trucs die je voor wat plezier kunt gebruiken! Het primaire doel is om planningen of andere tijdgevoelige taken in te stellen. We zullen enkele trucs onderzoeken om deze te gebruiken, en we zullen ook enkele potentiële problemen identificeren en ermee werken.
WordPress is een krachtig stuk software. Zijn eenvoud kan de niet-technische gebruikers echter vaak de verkeerde indruk geven over de interne werking. Dit kan in het belang van WordPress zijn geweest, omdat iets dat eenvoudig en gebruiksvriendelijk is, over het algemeen door de massa wordt overgenomen. Het is echter belangrijk om te onthouden dat achter de schermen een krachtig stuk software is dat in staat is om veel meer te doen dan alleen bloggen.
Een van de functies in WordPress waarover minder geschreven is, moet WP-Cron zijn (bekijk hier de codex-pagina op WP-Cron). Nu degenen van u die met het algemene hebben afgerekend cron op een Linux-server kennen de kracht van deze functie.
Cron is een UNIX-opdracht voor het plannen van taken die ergens in de toekomst zullen worden uitgevoerd. EEN cron wordt normaal gesproken gebruikt om een taak te plannen die periodiek wordt uitgevoerd. U kunt bijvoorbeeld een cron-functie gebruiken om elke ochtend een melding te verzenden. Het is ook een demon proces, wat betekent dat het continu draait, wachtend op specifieke gebeurtenissen.
Omdat WordPress op zoveel verschillende instellingen is geïnstalleerd, hebben de WordPress-ontwikkelaars een pseudo-cron geïmplementeerd waarin de WP-Cron-functies die helpt bij het uitvoeren van planningsopdrachten, zoals:
In tegenstelling tot gewone cron-taken, die op een specifiek tijdstip worden uitgevoerd op basis van de serverinstellingen, wordt de WP-Cron-functie uitgevoerd elke keer dat iemand de WordPress-website bezoekt. Dit zorgt ervoor dat een WordPress-site correct wordt uitgevoerd op verschillende soorten serverinstellingen, omdat er veel serverspecifieke vereisten worden geëlimineerd. Bij elke pagina wordt WordPress gecontroleerd of WP-Cron moet worden uitgevoerd. Als er een behoefte is, probeert het een aanvraag via HTTP bij de wp-cron.php het dossier.
De reden om te bellen wp-cron.php is omdat sommige taken meer tijd in beslag nemen en de gebruiker die de WordPress-pagina opvraagt niet kan wachten. Als u de wp-cron.php aanroept, blijft de WP-Cron-functie op de achtergrond actief als een afzonderlijk proces zonder de laadtijd van de pagina voor de gebruiker te vertragen. Nadat de WP-Cron-functie is gestart, blijft deze actief totdat alle vereiste taken zijn voltooid of totdat een uitvoeringstijd wordt bereikt zoals ingesteld in de serverconfiguratie.
Op basis van de instellingen van uw webhost kan WP-Cron zijn taken niet voltooien of werkt het misschien helemaal niet. Veelbezochte websites staan voor nog een aantal problemen, zoals meerdere WP-Cron-processen die in loops worden uitgevoerd. Meestal geven mensen het de schuld van WordPress, maar het is niet noodzakelijkerwijs een probleem met WordPress. Elke situatie is anders en op basis daarvan kunnen we WordPress op de best mogelijke manier aanpassen. Hieronder vindt u enkele veelvoorkomende problemen waarmee mensen worden geconfronteerd en hoe ze kunnen worden opgelost.
Als u een serverbeheerder bent of uw eigen server met een firewall beheert, hebt u mogelijk e-mails van uw firewall ontvangen over een bestand dat 'wp-cron.php' voor een lange periode uitvoert. Dit gebeurt wanneer de uitvoeringstijd van het script op uw server meer dan 60 seconden is. Aangezien het proces niet wordt beëindigd en er nieuwe processen worden gestart, worden meerdere exemplaren van het WP-Cron-proces uitgevoerd op de server.
Dit gebeurt niet op een website met weinig verkeer, maar als uw WordPress-website gelijktijdige gebruikers heeft op een bepaald moment en de maximale uitvoeringstijd van het script hoog is ingesteld, zullen er veel exemplaren van deze WP-Cron-functie worden uitgevoerd. Tot een recente versie van WordPress was er altijd een kwestie van meerdere cron-processen die dezelfde gebeurtenissen doorlopen.
NOTITIE: WordPress 3.3 geeft ons nog betere cron-vergrendeling. Dit artikel is geschreven net zoals WordPress 3.3 werd uitgebracht, met betere cron-vergrendeling en het vermijden van meerdere WP-Cron-processen die door dezelfde gebeurtenissen lopen.
Een ander veel gerapporteerd probleem met sommige hostingproviders en sommige websites met zeer weinig verkeer is dat geplande berichten niet worden gepubliceerd. Omdat de WP-Cron-functie alleen wordt uitgevoerd als er een pagina-aanvraag is, worden de geplande taken niet uitgevoerd als er geen verzoeken zijn.
Notitie: Er is geen probleem met WordPress. Sinds versie 3.x is dit ook veel minder gemeld. Er zijn echter veel plug-ins om dit probleem op te lossen.
Ook dit is een probleem met de serverconfiguratie. Vanwege onjuiste instellingen blokkeert de firewall waardoor scripts zichzelf niet kunnen noemen, zodat de WP-Cron-functie niet werkt.
Om te voorkomen dat meerdere exemplaren van WP-Cron op uw server worden uitgevoerd voor een enkele website, heb ik geprobeerd de standaardmanier voor het instellen van cron-taken op een Linux-server te gebruiken (Apache met cPanel als het configuratiescherm). Het voordeel van deze methode is:
Zorg ervoor dat je met je webhost standaard Linux cron-taken kunt instellen voordat je hierin begint. De manier waarop dit is ingesteld, is anders op basis van het configuratiescherm dat door uw host wordt aangeboden, maar in dit artikel zal ik een handleiding geven voor het instellen van een cron-taak met behulp van het cPanel-configuratiescherm dat tegenwoordig veel wordt gebruikt op Linux-servers..
De stappen die ik volgde waren:
Ja, zo simpel is het. Slechts twee stappen om dingen soepeler te laten verlopen.
NOTITIE: Voordat u deze methode volgt, houd er dan rekening mee dat het uitschakelen van interne WP-Cron er ook toe kan leiden dat de website niet correct werkt op basis van uw instellingen of de gebruikte plug-ins.
Open het bestand wp-config.php in NotePad of de editor van uw keuze en voeg de onderstaande twee regels bovenaan toe.
// Schakel de interne Wp-Cron-functie define uit ('DISABLE_WP_CRON', true);
Hiermee wordt de interne WP-Cron-functie gestopt en wordt het bestand wp-cron.php niet opgeroepen.
Als u cron-taken kunt instellen, moet u een cron instellen zoals hieronder:
wget http://www.server.com/wp-cron.php?doing_wp_cron=1> / dev / null 2> & 1
Gewoonlijk is de link http://yourwebsite.com/cpanel of http://yourwebsite.com:2082. Nadat u uw gebruikers-ID en wachtwoord hebt ingevoerd en het configuratiescherm hebt geopend, scrolt u omlaag naar het gedeelte 'Geavanceerd'..
Klik op het pictogram "Cron Jobs" in het geavanceerde gedeelte.
Op de nieuwe pagina zou je een "Voeg nieuwe Cron Job" sectie zoals die in de bovenstaande afbeelding. Selecteer in het vervolgkeuzemenu Algemene instellingen "Elke 5 minuten ...". Zodra u dit hebt geselecteerd, worden de overige velden automatisch gevuld met de benodigde informatie. In de volgende stap zal ik mijn voornemen uitleggen om een interval van 5 minuten in te stellen om het script uit te voeren.
Voeg de onderstaande regel toe in het opdrachtveld. Vergeet niet om het juiste websiteadres toe te voegen.
wget http://www.yourwebsite.com/wp-cron.php?doing_wp_cron=1> / dev / null 2> & 1
Klik ten slotte op de knop "Nieuwe Cron-taak toevoegen".
Vanaf nu zal de server elke 5 minuten een aanvraag doen voor het bestand wp-cron.php. De reden dat ik dit als 5 minuten heb ingesteld, is omdat ik de scriptuitvoeringstijd meestal instel op 4 minuten in plaats van 60 seconden. Dit wordt gedaan om grote afbeeldingsbestanden, back-upprocessen, enz. Te kunnen laden. U kunt echter ook de instellingen wijzigen en andere opties kiezen om de cron elke minuut te laten werken.
NOTITIE: Dit werkt goed voor algemene WordPress-websites. Voor degenen die een WordPress-netwerk gebruiken, kunnen er extra dingen nodig zijn. Gebruik alstublieft de bovenstaande stappen niet als u WordPress Multi-site versie uitvoert.
Als u problemen ondervindt of andere ideeën hebt, kunt u hieronder uw opmerkingen delen!