[wp-trac] [WordPress Trac] #53181: attachment_url_to_postid not working in latest wordpress
WordPress Trac
noreply at wordpress.org
Tue May 11 18:13:00 UTC 2021
#53181: attachment_url_to_postid not working in latest wordpress
-------------------------------+------------------------------
Reporter: hedgehog90 | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Media | Version: 5.7.1
Severity: normal | Resolution:
Keywords: reporter-feedback | Focuses:
-------------------------------+------------------------------
Changes (by SergeyBiryukov):
* keywords: => reporter-feedback
* component: General => Media
Old description:
> Given the url of an existing attachment:
> "https://localhost/wp-content/uploads/2021/05/14893-tiny-toon-adventures-
> nes-front-cover.jpg"
>
> On wp-include/media.php line 4809 it does something strange:
>
> {{{#!php
> if ( 0 === strpos( $path, $dir['baseurl'] . '/' ) ) {
> $path = substr( $path, strlen( $dir['baseurl'] . '/' ) );
> }
> }}}
>
> It removes the baseurl, leaving a partial path that will never be found
> in the database.
> However if instead it replaced $dir['baseurl'] with $dir["basedir"], it
> would create a valid $path.
New description:
Given the url of an existing attachment:
"https://localhost/wp-content/uploads/2021/05/14893-tiny-toon-adventures-
nes-front-cover.jpg"
On wp-include/media.php line 4809 it does something strange:
{{{#!php
if ( 0 === strpos( $path, $dir['baseurl'] . '/' ) ) {
$path = substr( $path, strlen( $dir['baseurl'] . '/' ) );
}
}}}
It removes the baseurl, leaving a partial path that will never be found in
the database.
However if instead it replaced `$dir['baseurl']` with `$dir["basedir"]`,
it would create a valid `$path`.
--
Comment:
Hi there, welcome back to WordPress Trac! Thanks for the ticket.
Just noting that I could not reproduce the issue on a clean install,
`attachment_url_to_postid()` seems to work as expected for me.
> On wp-include/media.php line 4809 it does something strange:
>
> {{{#!php
> if ( 0 === strpos( $path, $dir['baseurl'] . '/' ) ) {
> $path = substr( $path, strlen( $dir['baseurl'] . '/' ) );
> }
> }}}
>
> It removes the baseurl, leaving a partial path that will never be found
in the database.
This particular code was added in [30501] / #30346 to replace incorrect
`ltrim()` usage introduced with the function in [29029] / #27891.
This matches how the `_wp_attached_file` post meta field is stored in the
database, it is supposed to be a path relative to the uploads directory
and not a full URL nor a full path from the root directory. See [8796] /
#7622 and [36120] / #35106 for more context.
However, if the site was upgraded from an older install (before WordPress
2.7), it is possible that some `_wp_attached_file` values contain a full
URL, which indeed might be something that `attachment_url_to_postid()`
does not account for.
Could you share the `_wp_attached_file` meta value for the file in
question?
--
Ticket URL: <https://core.trac.wordpress.org/ticket/53181#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list