web-dev-qa-db-fra.com

Dossier de téléchargement spécifique pour les PDF dans le type de publication personnalisé WP multisite

Je dois filtrer les téléchargements dans un dossier spécifique pour un type de publication personnalisé appelé "document" uniquement pour les fichiers PDF.

Jusqu'à présent, j'ai:

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' );

Cela fonctionne, mais avec quelques problèmes:: tout type de fichier est redirigé dans my_uploadfolder. De plus, je ne peux pas supprimer ces fichiers de WP admin une fois sur place. Quelqu'un peut aider?

14
Gerald

La raison pour laquelle vous rencontrez des problèmes ici est que vous appliquez un filtre universel à upload_dir. Plutôt que de procéder ainsi, utilisez un filtre conditionnel pour upload_dir après la première vérification de ['mime-type'] pour application/pdf. Vous devez intercepter le processus de téléchargement à l'aide du crochet d'action wp_handle_upload et modifier le dossier de téléchargement à cet endroit. Ce que vous avez posté va dans la bonne direction, mais vous devez travailler avec les données $_POST entrantes et y appliquer le filtre en recherchant le téléchargement des fichiers ['mime-type'] que WordPress stocke pendant le processus de téléchargement.

2
Brian

vous pourriez envisager d'utiliser

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

pour vérifier les fichiers pdf.

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

Vous pouvez également jeter un coup d'oeil au code derrière la fonction wp_delete_attachment () et vous pouvez y accéder avec l'action delete attachment . Pour supprimer les fichiers, vous pouvez utiliser unlink ()

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

1
birgire