Überprüfen Sie, ob die Funktion von cron job aufgerufen wurde
12
Ich habe eine Funktion, die ich nur über einen Cron-Job ausführen möchte. Kann ich überprüfen, ob ein bestimmtes geplantes Ereignis diese Funktion aufruft und nichts anderes?
Übrigens: Sie erhalten kein Kopfgeld zurück, wenn Sie nicht belohnt werden. Da Sie bereits eine Antwort als Lösung markiert haben, geben Sie dem Benutzer auch das Kopfgeld. Vielen Dank.
Kaiser
Antworten:
17
WordPress hat eine Konstante DOING_CRON, die uns zeigt, ob wir die Cron-Jobs machen oder nicht. Es ist in wp-cron.phpDatei definiert .
So können Sie diese Konstante in Ihrem Code überprüfen:
Mit dieser _get_cron_array()Funktion werden alle registrierten und geplanten Aktionen abgerufen. Eine weitere nützliche Funktion ist wp_get_schedules(). Die dritte Möglichkeit ist das _get_cron_array()direkte Aufrufen der zugrunde liegenden Daten durch Aufrufen get_option( 'cron' );- es ist immer noch besser, die Standard-API-Funktionen aus WP Core zu verwenden.
Wenn Sie wissen möchten, ob Sie sich gerade in einem Cron Job befinden, können Sie dies überprüfen defined( 'DOING_CRON' ) AND DOING_CRON.
Ich studiere keine Entwicklung (ich bin nur ein Enthusiast), aber ich denke, Sie können der Veranstaltung eine zusätzliche Aktion hinzufügen
Es ist nur ein Lebenslauf ...
//to the eventif(your_condition){
add_action('original_event_to_hook','your_scheduled');}function your_scheduled(){//create a param here//And shedule your function with arg
wp_schedule_event(time(),'hourly','your_function', array('param_1'=> value));}function your_function($args){
$verification = $args['param_1'];if($verification){//OK//Eventually delete this schedule with this specific arg}}
Um eine Liste Ihres Cron "your_function" abzurufen, haben Sie dieses Argument
//Get a filtered list of cron hooks function kw_filter_crons_hooks($hooks =false, $args =false){
$crons = get_option('cron');if(!$crons){
$crons[0]= NULL;}
$filter = array();
$cronlist = array();
$schedule = array();foreach($crons as $timestamp => $cron){//@param $hooks = string 'schedule'//@param $args = false//Return an array of cron task sheduled
$schedule[]= $cron;if(!$schedule && $hooks =='schedule'&& $args ==false){
$schedule[0]= NULL;}foreach($hooks as $hook){if(isset($cron[$hook])){//@param $hooks = array($hook);//@param $args = false//Return an array of cron task sheduled
$cronlist[]= $cron;if(!$cronlist && is_array($hooks)&& $args ==false){
$cronlist[0]= NULL;}if(!empty($args)){foreach($cronlist as $key => $value){foreach($value as $k => $v){foreach($v as $x => $y){foreach($args as $arg => $val){if($y['args'][$arg]== $val){//@param $hooks = array($hook);//@param $args = array($arg);//Return an array of cron task specified filtered by arg
$filter[$x]= $y;if(!$filter && is_array($hooks)&& is_array($args)){
$filter[0]= NULL;}}}}}}}}}}if(is_array($hooks)&& $args ===false&& $cronlist){return $cronlist;}elseif(is_array($hooks)&& is_array($args)&& $filter){return $filter;}elseif($hooks ==='schedule'&& $args ===false&& $schedule){return $schedule;}elseif($hooks ===false&& $args ===false&& $crons){return $crons;}else{returnfalse;}}//Usage
$cron_filtered = kw_filter_crons_hooks(array('your_function'), array('param_1'=> value));
var_dump($cron_filtered);
Antworten:
WordPress hat eine Konstante
DOING_CRON
, die uns zeigt, ob wir die Cron-Jobs machen oder nicht. Es ist inwp-cron.php
Datei definiert .So können Sie diese Konstante in Ihrem Code überprüfen:
quelle
wp_doing_cron()
kann stattdessen verwendet werden.Schauen Sie sich einfach den »Cron API Inspector« an , den ich für Frage # 18017 geschrieben habe . Das Plugin erstellt eine Tabelle, die am
shutdown
-hook / am Ende der Seite angezeigt wird.Mit dieser
_get_cron_array()
Funktion werden alle registrierten und geplanten Aktionen abgerufen. Eine weitere nützliche Funktion istwp_get_schedules()
. Die dritte Möglichkeit ist das_get_cron_array()
direkte Aufrufen der zugrunde liegenden Daten durch Aufrufenget_option( 'cron' );
- es ist immer noch besser, die Standard-API-Funktionen aus WP Core zu verwenden.Wenn Sie wissen möchten, ob Sie sich gerade in einem Cron Job befinden, können Sie dies überprüfen
defined( 'DOING_CRON' ) AND DOING_CRON
.quelle
Ich studiere keine Entwicklung (ich bin nur ein Enthusiast), aber ich denke, Sie können der Veranstaltung eine zusätzliche Aktion hinzufügen
Es ist nur ein Lebenslauf ...
Um eine Liste Ihres Cron "your_function" abzurufen, haben Sie dieses Argument
quelle