Ändern des Speicherorts des Upload-Ordners nur für benutzerdefinierte Beitragstypen – funktioniert nicht

Lesezeit: 3 Minuten

Ich verwende ein Code-Snippet in meiner functions.php, das theoretisch den Speicherort meiner Uploads für meinen benutzerdefinierten Beitragstyp ändern sollte (wobei das Seiten- und Beitrags-Upload-Verzeichnis gleich bleibt).

Mein benutzerdefinierter Beitragstyp ist ‘Download

und mein neues Verzeichnis ist ein Ordner namens ‘Downloads‘ in meinem ‘wp-Inhalt‘ Mappe.

Mein wp-Inhalt Verzeichnis sieht so aus…

  • wp-Inhalt
    • Downloads
    • Plugins
    • Themen
    • Uploads

Siehe Funktion unten, kann mir jemand helfen zu verstehen, warum das nicht funktioniert? Vielen Dank.

add_filter( 'upload_dir', 'my_custom_upload_dir' );
function my_custom_upload_dir( $default_dir ){

    global $post;

    if ( $post->post_type != 'download' ) {
        return $default_dir;
    }

    /*

    * On success, the returned array will have many indices:
    * 'path' - base directory and sub directory or full path to upload directory.
    * 'url' - base url and sub directory or absolute URL to upload directory.
    * 'subdir' - sub directory if uploads use year/month folders option is on.
    * 'basedir' - path without subdir.
    * 'baseurl' - URL path without subdir.
    * 'error' - set to false.
    */

     //  Adjust settings here

    $bdir="wp-content";
    $subdir  = date( 'Y/m' );
    $dir = $bdir . $subdir;
    $burl = content_url('downloads');
    $url  = $burl . $subdir;

    $custom_dir = array( 

        'path'      => $dir,
        'url'       => $url, 
        'subdir'    => $subdir, 
        'basedir'   => $bdir, 
        'baseurl'   => $burl

    );

    return shortcode_atts( $custom_dir, $default_dir );

}

  • Erhalten Sie irgendwelche Fehler? Sind die Verzeichnisse angelegt oder nicht? Ich denke, es könnte ein Problem mit der Verwendung von a geben / in deiner $subdir Variable. Ich bin mir nicht sicher, ob dies der Fall ist, aber versuchen Sie es zu entfernen.

    – Ton7

    6. September 2012 um 10:18 Uhr

  • Setzt du in wp-content die Berechtigung, ein Verzeichnis darin zu erstellen

    – Pedro Fillastre

    23. Oktober 2012 um 12:27 Uhr

Das uploads_dir Filter benötigt eine andere Implementierung, um das Upload-Verzeichnis/Pfad erfolgreich zu ändern.

add_filter('wp_handle_upload_prefilter', 'so_8519968_handle_upload_prefilter');
add_filter('wp_handle_upload', 'so_8519968_handle_upload');

function so_8519968_handle_upload_prefilter( $file )
{
    add_filter('upload_dir', 'so_8519968_custom_upload_dir');
    return $file;
}

function so_8519968_handle_upload( $fileinfo )
{
    remove_filter('upload_dir', 'so_8519968_custom_upload_dir');
    return $fileinfo;
}

function so_8519968_custom_upload_dir( $path )
{   
    // Check 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; 

    // Check if correct post type
    $the_post_type = get_post_type( $_REQUEST['post_id'] );
    if( 'movies' != $the_post_type ) 
        return $path; 

    $customdir="https://stackoverflow.com/" . date( 'Y/m' );

    //remove default subdir (year/month) and add custom dir INSIDE THE DEFAULT UPLOAD DIR
    $path['path']    = str_replace( $path['subdir'], '/downloads' . $customdir, $path['path']); 
    $path['url']     = str_replace( $path['subdir'], '/downloads' . $customdir, $path['url']); 

    $path['subdir']  = $customdir;

    return $path;
}

Die Einschränkung hier ist, dass die Struktur ist /wp-content/uploads/downloads/yyyy/mm/filename.ext.

Ich dachte, das Folgende würde funktionieren /wp-content/downloads/... aber ich kann nicht feststellen, warum es nicht funktioniert.

$path['path']    = str_replace( 'uploads' . $path['subdir'], 'downloads' . $customdir, $path['path']); 
$path['url']     = str_replace( 'uploads' . $path['subdir'], 'downloads' . $customdir, $path['url']);    
$path['basedir'] = str_replace( 'uploads', 'downloads', $path['basedir']); 
$path['baseurl'] = str_replace( 'uploads', 'downloads', $path['baseurl']);      
$path['subdir']  = $customdir;

Eventuell muss der Uploadordner auf eingestellt werden wp-content in Medieneinstellungen, http://example.com/wp-admin/options-media.phpund machen Sie die ersten beiden Bedingungen der Funktion so_8519968_custom_upload_dir befassen sich mit den anderen Upload-Möglichkeiten (direkt in Mediathek -Post ohne ID, und in anderen Post-Typen).

1216450cookie-checkÄndern des Speicherorts des Upload-Ordners nur für benutzerdefinierte Beitragstypen – funktioniert nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy