[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