2017-09-07 1 views
0

Ich versuche, eine Ruheanforderung in einem Cron-Job in WordPress zu machen, aber wenn ich die rest_do_request() in der Funktion haben, die von wp_cron gefeuert wird und es den Auftrag nicht beendet. Wenn der Cron-Job erzwungen wird (mit einem Debug-Plugin), wird er komplett ausgeführt, aber ich sehe Fehler im Log Undefined index: path in "../wp-content/mu-plugins/wpengine-common/plugin.php at line 2030". Die Webseite wird momentan auf WPEngine gehostet, sie sagen, dass die Probleme nicht von ihrer Seite sind, obwohl die PHP Notice von ihrem Plugin stammt.Verwendung von rest_do_request() in einem Cron-Job?

von cron gefeuert Funktion:

//Sample rest_do_request() that creates a new post 
function cron_rings_sync_catalog_bd895153() { 

    $request = new WP_REST_Request('POST', '/wp/v2/posts'); 
    $request->set_param('title', 'Some Title'); 
    $request->set_param('content', 'Some Content for the new post'); 
    $response = rest_do_request($request); 
} 
//Hook to Custom Cron Job 
add_action('rings_sync_catalog', 'cron_rings_sync_catalog_bd895153', 10, 0); 

Derzeit wird diese Funktion zum Testen in functions.php Datei des Themas hinzugefügt und die Anforderung wird für Beiträge getan, aber ich benutze es auf einem CPT (Ringe) mit Route '/wp/v2/rings'

Ich kann nicht herausfinden, warum rest_do_request() nicht funktioniert, wenn in einem Cron-Job verwendet.

konnte ich die Anfrage von cron Ereignisse gemacht protokollieren: {"data":{"code":"rest_cannot_create","message":"Sorry, you are not allowed to create posts as this user.","data":{"status":401}},"headers":[],"status":401}

+0

Sieht aus wie die PHP-Notiz erscheint wegen des Plugins, das ich benutze, um Cron-Ereignisse zu debuggen. Wenn Sie sie deaktivieren, wird das Problem nicht behoben. Rest_do_request() wird immer noch nicht vom Cron-Ereignis ausgelöst. –

Antwort

0

ich das Problem dachte, wenn jemand anderes es trifft. Die Sache ist, dass WP_Cron nicht berechtigt ist, POST-Anfragen zu machen. Als eine schnelle Lösung habe ich wp_set_current_user($admin_id); kurz vor $request = new WP_REST_Request('POST', '/wp/v2/posts'); in meiner Funktion hinzugefügt.