Opened 7 years ago
Last modified 3 years ago
#43119 new defect (bug)
Allow passing empty post ID to media_handle_sideload()
Reported by: | swissspidy | Owned by: | |
---|---|---|---|
Milestone: | Future Release | Priority: | normal |
Severity: | normal | Version: | 2.6 |
Component: | Media | Keywords: | has-unit-tests has-patch needs-refresh |
Focuses: | Cc: |
Description
I stumbled upon this via https://wordpress.stackexchange.com/questions/291344/why-does-media-handle-sideload-upload-to-last-months-folder.
Basically, the person was trying to run media_handle_sideload( $file_array, $post_id = 0 )
to upload files. This works fine in so far as it calls wp_insert_attachment()
which accepts a post ID of 0
(it's the default) so the attachment won't be associated with a specific post.
However, media_handle_sideload()
doesn't fully support $post_id = 0
(or $post_id = null
, for that matter) because of the if ( $post = get_post( $post_id ) ) { … }
condition since get_post( 0 )
fetches the global post and overrides $time
.
This means you cannot upload a media file and have $time
set to today.
To reproduce:
- Create a post with the date set to last month
- Set this post as
$GLOBALS['post']
- Run
media_handle_sideload( $file_array, 0 )
- Notice that the upload folder will be the one from last month, not this month.
Proposed fix:
Change the condition from if ( $post = get_post( $post_id ) ) { … }
to if ( $post_id && $post = get_post( $post_id ) ) { … }
Consequences:
The upload folder will point to the current month, not the date from the global post if using $post_id = 0
or $post_id = null
. Not a big deal IMHO.
Attachments (3)
Change History (6)
#2
@
7 years ago
- Keywords has-patch added; needs-patch removed
Thanks for patch @AugusGils and the tests @andizer
In 43119.2.diff there are some adjustments:
- Combines patch + tests into a single patch.
- To speed things up it avoids the
download_url()
and uses an existing file instead. - Changes
$default = date( '/Y/m', current_time( 'timestamp' ) );
to$default = current_time( '/Y/m/' );
for simplification. - Some changes according to the Coding Standard.
- Adds cleanups.
Hope it helps.
Made a check on $post_id to make sure it's a valid one, this to make sure the correct upload folder is used.