Jak zmienić domyślny folder przesyłania plików w WP…


Uwaga! Wszystkie informacje i solucje zawarte w postach typu DYI mogą z czasem przestać być aktualne. Niektóre publikowane kody źródłowe, będąc zależnymi od używanych konfiguracji platform i sprzętu, mogą nie działać, lub działać nieprawidłowo u niektórych użytkowników. Stosując opisane rozwiązania przyjmujesz do wiadomości i zgadzasz się, że nie ponoszę odpowiedzialności za ich finalne efekty.


…i wyłączyć tworzenie pierdyliardów wariacji rozmiarowych? Zanim Ci o tym opowiem, to napiszę tylko, że to spore ułatwienie dla małych, niezbyt rozbudowanych stron. Nie dość, że brak dodatkowych plików jest oszczędnością miejsca na dysku serwera, to jeszcze łatwo później zbackupować dane. Wystarczy kopia bazy danych, nowego folderu mediów i używanych pluginów, żeby bez problemu przenieść serwis w inne miejsce. A kod wtyczki może wyglądać tak:

<?php
/*
Plugin Name: Custom Img Upload Path
Description: Zmienia lokalizację folderu przesyłania plików.
Version: 1.4
Author: Dariusz Staropiętka
*/

add_filter('upload_dir', 'custom_upload_dir');
function custom_upload_dir($dirs) {
    $custom_dir = 'upl'; // Nowa lokalizacja, koniecznie bez początkowego ukośnika

    $dirs['path'] = ABSPATH . $custom_dir;
    $dirs['url'] = site_url($custom_dir);
    $dirs['basedir'] = ABSPATH . $custom_dir;
    $dirs['baseurl'] = site_url($custom_dir);

    return $dirs;
}

// Przenoszenie plików do folderu /upl
add_action('wp_handle_upload', 'custom_handle_upload', 10, 2);
function custom_handle_upload($fileinfo, $context) {
    $upload_dir = wp_upload_dir();
    $file = $fileinfo['file'];
    $file_name = basename($file);
    $new_file = $upload_dir['path'] . '/' . $file_name;

    if (rename($file, $new_file)) {
        $fileinfo['file'] = $new_file;
        $fileinfo['url'] = str_replace($upload_dir['basedir'], $upload_dir['baseurl'], $new_file);
    }

    return $fileinfo;
}

// Wyłączenie generowania dodatkowych rozmiarów obrazów
add_action('init', 'disable_default_image_sizes');
function disable_default_image_sizes() {
    remove_image_size('thumbnail');
    remove_image_size('medium');
    remove_image_size('medium_large');
    remove_image_size('large');
}

// Opcjonalnie: Wyłącz generowanie rozmiarów obrazów przez wtyczki
add_filter('intermediate_image_sizes_advanced', 'remove_image_sizes');
function remove_image_sizes($sizes) {
    unset($sizes['thumbnail']);
    unset($sizes['medium']);
    unset($sizes['medium_large']);
    unset($sizes['large']);
    return $sizes;
}

?>

W przedstawionym rozwiązaniu folderem do przechowywania obrazów jest folder „upl” umieszczony w roocie strony. Ścieżkę można zmienić w kodzie.