ti-enxame.com

Pasta de upload específica para PDFs no tipo de postagem personalizado WP multisite

Preciso filtrar os uploads para uma pasta específica para um tipo de postagem personalizada chamado "documento" apenas para PDFs.

Até agora eu tenho:

function custom_upload_directory( $args ) {
$base_directory = '/home/xxx/my_uploadfolder';
$base_url = 'http://xxxx/wp-content/uploads/my_uploadfolder';

$id = $_REQUEST['post_id'];
$parent = get_post( $id )->post_parent;
// Check the post-type of the current post

if( "document" == get_post_type( $id ) || "document" == get_post_type( $parent ) ) {
    $args['path'] = $base_directory;
    $args['url']  = $base_url;
    $args['basedir'] = $base_directory;
    $args['baseurl'] = $base_url;

}

return $args;
}
add_filter( 'upload_dir', 'custom_upload_directory' );

Funciona, mas com alguns problemas:: qualquer tipo de arquivo é redirecionado em my_uploadfolder. Além disso, não consigo excluir esses arquivos de WP admin uma vez lá. Alguém pode ajudar?

14
Gerald

A razão pela qual você está tendo problemas aqui é que você está aplicando um filtro universal a upload_dir. Em vez de fazer isso, use um filtro condicional para upload_dir depois de verificar primeiro ['mime-type'] para application/pdf. Você precisa interceptar o processo de upload no gancho de ação wp_handle_upload e alterar a pasta de upload para lá. O que você postou está indo na direção certa, mas você precisa estar trabalhando com os dados $_POST recebidos e aplicando o filtro lá procurando por upload de arquivos ['mime-type'] que o WordPress armazena durante o processo de upload.

2
Brian

você pode considerar usar

if(get_post_mime_type($id) == 'application/pdf'){
   ...
}

para verificar arquivos PDF.

http://codex.wordpress.org/Function_Reference/get_post_mime_type

Você também pode dar uma olhada no código por trás da função wp_delete_attachment () e pode conectar-se a ela com o delete attachment action. Para remover os arquivos, você pode usar unlink ()

http://php.net/manual/en/function.unlink.php

1
birgire