it-swarm.dev

Spezieller Upload-Ordner für PDFs in verwendetem Post-Typ WP Multisite

Ich muss Uploads in einen bestimmten Ordner für einen benutzerdefinierten Beitragstyp namens "Dokument" nur für PDFs filtern.

Bisher habe ich:

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

Es funktioniert, aber mit einigen Problemen:: Jede Art von Datei wird in my_uploadfolder umgeleitet. Außerdem kann ich diese Dateien dort nicht von WP admin löschen. Kann jemand helfen?

14
Gerald

Der Grund, warum Sie hier Probleme haben, ist, dass Sie einen universellen Filter auf upload_dir anwenden. Verwenden Sie stattdessen einen bedingten Filter für upload_dir, nachdem Sie ['mime-type'] zum ersten Mal auf application/pdf überprüft haben. Sie müssen den Upload-Vorgang am Aktions-Hook wp_handle_upload abfangen und den Upload-Ordner dort ändern. Was Sie gepostet haben, weist in die richtige Richtung, aber Sie müssen mit den eingehenden $_POST-Daten arbeiten und den Filter dort anwenden, indem Sie nach Upload-Dateien ['mime-type'] suchen, die WordPress während des Upload-Vorgangs speichert.

2
Brian

sie könnten in Betracht ziehen,

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

um nach PDF-Dateien zu suchen.

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

Sie können sich auch den Code hinter der Funktion wp_delete_attachment () ansehen und ihn mit der Aktion delete attachment aufrufen. Zum Entfernen der Dateien können Sie unlink () verwenden.

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

1
birgire