Directorio de carga diferente según el tipo de publicación en un tema

4

Tengo muchos archivos de imágenes cargados y tamaños de imágenes. Por lo tanto, sería mejor organizar los archivos multimedia en carpetas según el tipo de publicación. Acabo de leer este tutorial, pero como puedo ver funciona con plugins. ¿Cómo cambiar esto para usar en un tema? Gracias.

function custom_upload_directory( $args ) {
 
    $id = $_REQUEST['post_id'];
    $parent = get_post( $id )->post_parent;
 
    // Check the post-type of the current post
    if( "post-type" == get_post_type( $id ) || "post-type" == get_post_type( $parent ) ) {
        $args['path'] = plugin_dir_path(__FILE__) . "uploads";
        $args['url']  = plugin_dir_url(__FILE__) . "uploads";
        $args['basedir'] = plugin_dir_path(__FILE__) . "uploads";
        $args['baseurl'] = plugin_dir_url(__FILE__) . "uploads";
    }
    return $args;
}
add_filter( 'upload_dir', 'custom_upload_directory' );
    
pregunta user9909 21.12.2012 - 18:16

2 respuestas

7

Si entiendo bien tu pregunta, ¿quieres una función dentro de tu tema que agregue directorios para el post_type actual? como: uploads / post_type_name. Si es así, aquí hay una función para eso:

function wpse_16722_type_upload_dir( $args ) {

    // Get the current post_id
    $id = ( isset( $_REQUEST['post_id'] ) ? $_REQUEST['post_id'] : '' );

    if( $id ) {    
       // Set the new path depends on current post_type
       $newdir = '/' . get_post_type( $id );

       $args['path']    = str_replace( $args['subdir'], '', $args['path'] ); //remove default subdir
       $args['url']     = str_replace( $args['subdir'], '', $args['url'] );      
       $args['subdir']  = $newdir;
       $args['path']   .= $newdir; 
       $args['url']    .= $newdir; 
    }
    return $args;
}
add_filter( 'upload_dir', 'wpse_16722_type_upload_dir' );
    
respondido por el Pontus Abrahamsson 22.12.2012 - 19:52
-2

En WP 4.4, debe devolver el $args justo antes de finalizar la función que no está dentro de la condición de $id .

    
respondido por el z1k0s95 09.03.2016 - 10:29

Lea otras preguntas en las etiquetas