WP Cron und wp_insert_post

Ich versuche, Beiträge mit einem Cron-Job einzufügen, aber ich is_user_logged_in wp_get_current_user Fehler, bei denen WP functionen fehlen ( is_user_logged_in , wp_get_current_user ).

Gibt es eine ordnungsgemäße Möglichkeit, wp_insert_post mit einem Cron-Job auszuführen?

Dies ist der Code, den ich bisher habe.

phrets_hourly ist der WP_CRON-Haken

 add_action('phrets_hourly', 'run_listings_update' ); function run_listings_update(){ $fetch = new Fetcher(); $fetch->fetch(); } 

Dies ist der Code innerhalb des $fetch Objekts (Fetcher-class), der ausgeführt wird.

 public function fetch(){ $options['class'] = 'RES'; $options['limit'] = 10; $options['offset'] = 0; $options['silent'] = true; $data = $this->query( $options ); foreach ( $data as $datum ) { $this->place( $datum, true ); } } public function place( $data, $silent ){ $rets = $this->connect_to_rets(); $listing = new Listing( $data ); // check to see if listing already exists $post_id = $listing->check_listing_exists( $data['MST_MLS_NUMBER'] ); if ( ! $post_id ) { $action = $listing->put(); } else { $action = $listing->update($post_id); } } 

Dies ist die vom $listing Objekt (Listing-class) aufgerufene Methode, die die Daten in die DB legt

 public function put(){ $title = $this->create_title( $this->data ); // setup the 'post' data $post = array( 'post_type' => 'listing', 'post_title' => $title, 'post_content' => $this->data['Remarks'], 'post_status' => 'publish' ); // add new meta data if ( ! is_wp_error( $post_id ) ) { $this->add_meta_data( $post_id ); $this->assign_community( $post_id, $data ); } // set the action $action = 'inserted'; return $action; } 

Vielen Dank!

Solutions Collecting From Web of "WP Cron und wp_insert_post"

Für diejenigen, die später darüber stolpern, verwenden Sie entweder die Option 1 oder 2, die Sie hier finden: https://core.trac.wordpress.org/ticket/19373 .

“Für andere Entwickler, die darauf stoßen und sie umgehen müssen, funktionieren diese beiden Optionen: Rufen Sie wp_set_post_terms () auf, um Ihre Taxonomien nach dem Aufruf von wp_insert_post () hinzuzufügen, richten Sie vor dem Aufruf von wp_insert_post () einen” aktuellen Benutzer “in Ihrem Skript ein. ”

Ich habe einen Weg gefunden.

Konnte keinen Sinn für den core Trac und es wurde immer noch nicht gepatcht, obwohl es ein 4 Jahre altes Ticket ist. Hier ist der Code, mit dem ich einen benutzerdefinierten Beitrag eingefügt habe. Die include_once- Direktive ist hier wichtig.

Ich sollte auch beachten, dass der wp_set_auth_cookie (1) Zugriffsrechte für dieses Skript an den Administrator setzt. Wenn Sie für Ihren Administrator keine ID 1 verwenden, müssen Sie dies aktualisieren. Die function ist ebenfalls veraltet, daher müssen Sie die Datei pluggable.php hinzufügen.

 //Add in the pluggable functions include_once( ABSPATH . WPINC . '/pluggable.php' ); wp_set_auth_cookie( 1 ); $slug = strtolower("test-example"); $title = "Test Example"; //See if post exists or not then handle accordingly $post_id = get_page_by_title( $title, OBJECT, 'cars' ); if( $post_id == NULL ) { $post_id = wp_insert_post( array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_name' => $slug, 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'cars' ) ); } else { $post_id = $post_id->ID; } 

Wechseln Sie einfach Autos zu dem gewünschten Post-Typ. Der Slug / Titel muss sich entsprechend ändern.