Organizar uploads por ano, mês e dia

4

Por enquanto, meus arquivos enviados são organizados por ano e mês. Mas eu gostaria de organizá-los por ano, mês e dia. Quero dizer, assim 2012/10/30/image goes here

PS: Existe um plug-in disponível para fazer isso. Mas eu não quero usar um plugin para esta tarefa simples. Obrigado

    
por Giri 30.10.2012 / 13:01

3 respostas

2

Código baseado em outra Resposta minha e esta SO Resposta .

Ele usa a data de publicação post / page / cpt para criar os caminhos.
Observe que $the_post->post_date_gmt também está disponível.

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;
}
    
por brasofilo 31.10.2012 / 16:33
1

Tanto quanto eu posso dizer, o filtro 'upload_dir' é chamado apenas uma vez em wp-includes \ functions.php

Acho essa solução muito mais simples. Ele colocará todos os uploads no diretório ano / mês / dia para a data de envio.

function upload_dir_filter($uploads){
    $day = date('d');
    $uploads['path'] .= '/' . $day;
    $uploads['url']  .= '/' . $day;
    return $uploads;
}
add_filter('upload_dir', 'upload_dir_filter');
    
por Greenzilla 16.12.2015 / 22:15
0

Eu fiz um novo código desses dois códigos. As imagens serão enviadas para a pasta de data de postagem, não para a pasta de data enviada:

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');
    
por Westzonesolution Corp 12.10.2018 / 09:58