it-swarm.com.de

Organisieren Sie Uploads nach Jahr, Monat und Tag

Ab sofort sind meine hochgeladenen Dateien nach Jahr und Monat sortiert. Aber ich möchte sie nach Jahr, Monat und Tag organisieren. Ich meine so 2012/10/30/image goes here

PS: Dafür gibt es ein Plugin . Aber ich möchte für diese einfache Aufgabe kein Plugin verwenden. Vielen Dank

4
Giri

Code basiert auf einer anderen Antwort von mir und dieser SO Antwort .

Es verwendet das Veröffentlichungsdatum post/page/cpt, um die Pfade zu erstellen.
Beachten Sie, dass auch $the_post->post_date_gmt verfügbar ist.

add_filter('wp_handle_upload_prefilter', 'wpse_70946_handle_upload_prefilter');
add_filter('wp_handle_upload', 'wpse_70946_handle_upload');

function wpse_70946_handle_upload_prefilter( $file )
{
    add_filter('upload_dir', 'wpse_70946_custom_upload_dir');
    return $file;
}

function wpse_70946_handle_upload( $fileinfo )
{
    remove_filter('upload_dir', 'wpse_70946_custom_upload_dir');
    return $fileinfo;
}

function wpse_70946_custom_upload_dir($path)
{   
    /*
     * Determines if uploading from inside a post/page/cpt - if not, default Upload folder is used
     */
    $use_default_dir = ( isset($_REQUEST['post_id'] ) && $_REQUEST['post_id'] == 0 ) ? true : false; 
    if( !empty( $path['error'] ) || $use_default_dir )
        return $path; // Error: not uploading from a post/page/cpt 

    $the_post = get_post( $_REQUEST['post_id'] );
    $y = date( 'Y', strtotime( $the_post->post_date ) );
    $m = date( 'm', strtotime( $the_post->post_date ) );
    $d = date( 'd', strtotime( $the_post->post_date ) );

    $customdir = '/' . $y . '/' . $m . '/' . $d;

    $path['path']    = str_replace($path['subdir'], '', $path['path']); //remove default subdir (year/month)
    $path['url']     = str_replace($path['subdir'], '', $path['url']);      
    $path['subdir']  = $customdir;
    $path['path']   .= $customdir; 
    $path['url']    .= $customdir;  

    return $path;
}
2
brasofilo

Soweit ich das beurteilen kann, wird der Filter 'upload_dir' in wp-includes\functions.php nur einmal aufgerufen

Ich finde diese Lösung viel einfacher. Alle Uploads werden zum Zeitpunkt des Uploads in das Jahr/Monat/Tag-Verzeichnis gestellt.

function upload_dir_filter($uploads){
    $day = date('d');
    $uploads['path'] .= '/' . $day;
    $uploads['url']  .= '/' . $day;
    return $uploads;
}
add_filter('upload_dir', 'upload_dir_filter');
1
Greenzilla

Ich habe aus diesen 2 Codes einen neuen Code gemacht. Die Bilder werden in den Post-Date-Ordner hochgeladen, nicht in den Upload-Date-Ordner:

function upload_dir_filter($uploads){

    $the_post = get_post( $_REQUEST['post_id'] );
    $y = date( 'Y', strtotime( $the_post->post_date ) );
    $m = date( 'm', strtotime( $the_post->post_date ) );
    $day = date( 'd', strtotime( $the_post->post_date ) );
    $uploads['path'] .= '/' . $day;
    $uploads['url']  .= '/' . $day;
    return $uploads;
}
add_filter('upload_dir', 'upload_dir_filter');