Warum wird media_handle_sideload in den Ordner des letzten Monats hochgeladen?

Ich habe diese class, um Instagram Bilder zu kratzen und sie lokal zu speichern, die function get_local_photo_links() ist, wo das Problem ist:

 username = $username; } private function build_endpoint() { /** * Builds the endpoint for the Instagram API, provided the username from constructor. * @param $end_cursor Used in case the user wants more pictures to be scrapped. */ return 'https://www.instagram.com/' . trim( strtolower( $this->username ) ) . '/?__a=1'; } private function get_json() { /** * GET's the data from Instagram, provided the endpoint. */ $request = wp_remote_get( $this->build_endpoint() ); if( is_wp_error( $request ) ) { return new WP_Error( 'site-down', esc_html__( 'Instagram may be down. Unable to communicate.', '_s') ); } elseif( wp_remote_retrieve_response_code( $request ) !== 200 ) { return new WP_Error( 'invalid-response', esc_html__( 'Got an invalid response.', '_s') ); } else { return wp_remote_retrieve_body( $request ); } } private function get_data() { /** * Ingests the data from get_json() then converts / decodes into an array. */ $json = $this->get_json(); if( is_wp_error( $json ) ) { return new WP_Error( 'invalid-json', esc_html__( 'Something is wrong. Did you enter the right username?', '_s' ) ); } $data = json_decode( $json, true); if( is_wp_error( $data ) ) { return new WP_Error( 'invalid-data', esc_html__( 'Something is wrong. Did you enter the right username?', '_s' ) ); } else { return $data; } } private function get_links() { /** * Based on the array generated from get_data(), some nodes have resulted that contain information about * each photo the user has, as such, we'll loop through each photo and access any data. * @see ['user']['media']['nodes'] - individual node / image. */ $response = $this->get_data(); if( is_wp_error( $response ) ) { return new WP_Error( 'invalid-json', esc_html__( 'Ouch. The data was not parsed correctly. Cannot continue.' ) ); } else { foreach( $response['user']['media']['nodes'] as $node ) { $image = array('real_link' => 'src' ); $image['real_link'] = 'https://www.instagram.com/p/' . $node['code'] . '?taken-by=' . $this->username; $image['src'] = $node['thumbnail_resources'][0]['src']; $images_links[] = $image; } } return $images_links; } public function get_instagram_photos_links() { $links = $this->get_links(); if( is_wp_error( $links) ) { return new WP_error( 'unknown-error', esc_html__( 'Something went wrong. Cannot get data. Check username or contact developer.') ); } else { return $links; } } public function get_local_photo_links() { /** * Requires loading of the wp-admin scripts. */ require_once ('wp-load.php'); require_once ('wp-admin/includes/admin.php'); $urls = $this->get_instagram_photos_links(); $local_images = array(); foreach( $urls as $url ) { $tmp = download_url( $url['src'] ); $file_array = array( 'name' => basename( $url['src'] ), 'tmp_name' => $tmp ); $wp_upload_dir = wp_get_upload_dir(); $local_url = $wp_upload_dir['path'] . '/' . $file_array['name']; if( file_exists( $local_url ) ) { echo "Image already exists!"; array_push( $local_images, ($wp_upload_dir['url'] . '/' . $file_array['name']) ); } else { echo "Image doesn't exist!"; if ( is_wp_error( $tmp ) ) { @unlink( $file_array[ 'tmp_name' ] ); return $tmp; } $post_id = '0'; $id = media_handle_sideload( $file_array, $post_id ); if ( is_wp_error( $id ) ) { @unlink( $file_array['tmp_name'] ); return $id; } $value = wp_get_attachment_url( $id ); array_push( $local_images, $value ); } } return $local_images; } } 

Nämlich mit den Zeilen:

 $post_id = '0'; $id = media_handle_sideload( $file_array, $post_id ); 

Die $post_id ist problematisch, denn wenn sie aus irgendeinem Grund auf 0 wird, wird standardmäßig /uploads/2017/12 $post_id anstatt der aktuellen /uploads/2018/01 (Anmerkung: ab dem Schreiben der Frage ist es Januar, 15., 2018). Es geht also einen Monat zurück.

Das bedeutet, dass versucht wird, die Bilder an einen Post mit der ID 0 anzuhängen, der im Dezember 2017 veröffentlicht wurde.

Wenn ich meine Posts betrachte, könnte es 4 Täter geben:

Bildbeschreibung hier eingeben

Dann gibt es die database mit wp_posts selbst:

Bildbeschreibung hier eingeben

Offensichtlich gibt es keinen Post mit ID 0 aber wenn wir post_id auf -1 setzen, wie in $post_id = '-1'; Es gibt kein Problem, es funktioniert plötzlich, was bedeutet, dass irgendwo ein Post mit der ID 0 sein muss.

Ausführen der Abfrage:

 SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.ID = '0' 

Liefert nichts, wie folgt:

Bildbeschreibung hier eingeben

Interessanterweise wird ein Thumbnail eines Posts entfernt, wenn dies geschieht:

Bildbeschreibung hier eingeben

Die ID dieses Posts ist 71 , es gibt keine Beziehung.

Und manchmal funktioniert es problemlos.

Bitte beachten Sie, dass die Medien-Upload-Struktur immer noch das Jahr / Monat-Format verwendet, funktioniert es, wenn ich das Format auf nur /uploads/ ohne das Y / M-Format ändere, aber ich möchte für mein Skript auf Standardeinstellungen arbeiten.

Was kann ich tun?

Solutions Collecting From Web of "Warum wird media_handle_sideload in den Ordner des letzten Monats hochgeladen?"