Support » Fixing WordPress » Media sorted by year has changed its URL to include the current year directory

  • Jaaaarne

    (@jaaaarne)


    Hello everyone!

    Please assist me with troubleshooting the issue I’ve never ran into before, and I’m kind of lost.

    WordPress 4.9.13 in a Multisite installation with Multisite Global Media plugin activated for the network (although deactivating it doesn’t resolve anything).

    In wp-config uploaded media files are set to be sorted into directories by year:

    $year = date( 'Y' );
    define( 'UPLOADS', 'media/' . $year );

    Last year I uploaded two images to be set as featured images. They got uploaded at media/2019 path on the server. So far so good, everything was okay and worked fine.

    Today I discovered that featured image is not displayed. When I tried to open it individually on the site, I saw that instead of 2019 it had 2020 in the URL.

    I connected to my website via FTP and saw that the images I uploaded last year were safely in their media/2019 directory.

    In my website backend, in the Media Library I saw, that the images were now displayed as broken thumbnails. Clicking on an image to see the media file properties showed me incorrect URL, with 2020 in the URL instead of 2019.

    I connected to the database and saw that correct URLs (with 2019 in path) were in the posts table.

    What on earth might have happened, why did WordPress decide to rewrite existing files’ path? And how to fix it now?

    Thanks for any input.

    ETA: Looks like wp-config is responsible. It always provides the current year, but it looks like for old uploads their original path is not preserved. Media Library dynamically alters URLs for already existing images according to what wp-config supplies. Might be handy for moving sites. 🙂 However, I’m not sure what to do about my situation.

    • This topic was modified 1 year ago by Jaaaarne.
Viewing 8 replies - 1 through 8 (of 8 total)
  • autotutorial

    (@autotutorial)

    As of WordPress 5.3 you don’t use the old date and time functions depending on an offset, now use the DATETIME class or functions available from WordPress 5.3.

    $container = new DateTime( "Y", new DateTimeZone( "UTC" ) );
    $value = $container->format( "Y" );
    //or DashBoard settings get_option( 'timezone_string' ) or get_option( 'gmt_offset' )
    //Conversion object DateTimeZone https://developer.wordpress.org/reference/functions/wp_timezone/ refer to https://developer.wordpress.org/reference/functions/wp_timezone_string/ 
    // php 5.5.0 for offset +01:00

    also from wordpress 5.3 it requires exactly YYYY-MM-DD.
    The predefined folders for uploading are created automatically by wordpress, it means not applying any code.

    if to overwrite the uploads folder you create the code with the DateTime class without Multisite Global Media plugin and you have problems, you can open a ticket bug on https://core.trac.wordrpress.org

    Joy

    (@joyously)

    Because you defined your uploads folder to be the current year, WordPress is behaving as you requested. To fix it, you should change the config file to hardcode the uploads to be media/2019, so that the existing images will work.
    The code you used dynamically sets the location of the uploads folder, which as you found out, is a bad idea.

    autotutorial

    (@autotutorial)

    A path wp-content/upluoads or media/2020 is a valid path, probably WordPress with a php regex recovers the year and overwrites it …. in this scenario it is a bug not a bad use for the constant.
    for completeness here are the predefined paths.Uploads Multisite or Normal WordPress

    Jaaaarne

    (@jaaaarne)

    Yes, I see that the year is being set dynamically in the wp-config. The question is, how come that everywhere in the database I see paths to images listed with the directory they have been originally uploaded? Everywhere, except the Media Library itself in the backend? Seems weird. Might be very useful for moving sites (changing domains etc.), but I can’t understand how it works.

    Now here’s the question. WP has a default option of sorting media into folders by year and month. How is that achieved, so that paths don’t break when a new month comes? I’d be grateful for any pointers. If WP itself can do it [the excessively fractional way], then there should be a way to do it?

    Sorting by year and month is way too much, I’m not posting images every day. But no sorting at all is equally awful, and that’s what I had to do now to get the existing images to work. Now I have incorrect paths in the database, but that doesn’t seem to mean a single thing, because it looks like they are there for decor or something. 🙂

    Joy

    (@joyously)

    All of WordPress depends on the uploads folder to remain in one place. You are trying to move it depending on the year, which as you move to a new year, the old year can’t be found. (there is only one definition of the folder location)
    WordPress by default will store media uploads into year/month/day folders inside the uploads folder. You can change this with the setting on the Media Settings page. Or you could add some code that would filter the path to remove the day or month portion.

    But don’t mix up the uploads folder with the individual media paths.

    Jaaaarne

    (@jaaaarne)

    I’m not sure I understand what you’re saying.

    By default WP wants to store media in uploads/year/month directory structure. I don’t need this. This is way too much. I don’t need 12 folders for each hold a couple of images. Also I don’t like the word “uploads”. 🙂 So I would like it to store everything in my custom structure media/year. No sorting by month. Only by year.

    However, by design WP offers either its complex year/month structure, or no structure at all. As in, the setting you are speaking of (if I understand you correctly) is an “on/off” switch. There’s no choice of how to structure stuff. You either agree to have a year/month structure for storing media, or you have an ugly heap of all your media files inside of the uploads directory with no structuring at all.

    However. Since WP itself is able to somehow sort media into year/month folder without everything falling apart come new month, there obviously should be a way to tell it to sort by year alone. I’ve searched for this kind of solution, but had no luck. :/

    Joy

    (@joyously)

    I don’t know how to say it more clearly.
    There is a mechanism to move the entire uploads folder. That is the define method that you used. But it is not set up to be dynamic. It is used for all references to the uploads folder without respect to individual posts or media.

    There is a separate mechanism to control the path inside the uploads folder for individual media. This is dynamic and the WordPress option is either on or off, as you said. There are plugins that filter the paths and allow you to control your media more minutely. You can write your own filter to change the year/month/day to just year. But you don’t do that by changing the uploads folder location with the define, as it’s a separate mechanism.

    autotutorial

    (@autotutorial)

    All settings secondary site with id 2 ( set 0 for upload Year Month) https://yourdomain.con/wp-admin/network/site-settings.php?id=2

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘Media sorted by year has changed its URL to include the current year directory’ is closed to new replies.