Как изменить папку загрузки Wordpress программно? - PullRequest
4 голосов
/ 13 марта 2012

У меня есть пользовательская тема, в которой я создал кнопку загрузки, где я вызываю Wordpress Uploader при нажатии этих кнопок. Примерно так:

jQuery('#ahng_blog_upload_button').click(function() { 
    formfield = jQuery('#ahng_blog_upload_image').attr('name');
    tb_show('Upload or Select Photo and Click on "Insert into Post"', 'media-upload.php?type=audio&TB_iframe=true');
    return false;
});

Прямо сейчас, в моей папке functions.php, я установил, где я хочу, чтобы файлы загружались (http://website.com/wp-content/uploads), но я хочу изменить местоположение загрузки в зависимости от того, какая кнопка нажата.

Например, когда нажата кнопка «Загрузить изображение» , измените папку загрузки на images (http://website.com/wp-content/uploads/images) и когда 'Загрузить Нажмите кнопку MP3 * , измените папку для загрузки на audio (http://website.com/wp-content/uploads/audio).

Я знаю, что могу загрузить все в папку по умолчанию, о которой я упоминал ранее, но проще разобраться позже, если мне нужно найти определенный файл с помощью ftp.

Есть ли способ сделать это с помощью jquery и ajax и вызова php-файла, который на самом деле ничего не возвращает, но вносит изменения в Upload Dir в wordpress? Или любым другим способом?

1 Ответ

3 голосов
/ 25 ноября 2012

Метод, который я использую, основан на чистых хуках WordPress, без участия jQuery или Ajax.

И я действительно не знаю, на какие кнопки вы ссылаетесь ... Прошло некоторое время с тех пор, как единственная кнопка - "Загрузить медиа". Если вы не используете индивидуальные.

Этот ответ WordPress StackExchange имеет другие возможности фильтрации. Ниже приведен код, настроенный для фильтрации загрузок по типу носителя.

add_filter('wp_handle_upload_prefilter', 'wpse_25894_handle_upload_prefilter');
add_filter('wp_handle_upload', 'wpse_25894_handle_upload');

function wpse_25894_handle_upload_prefilter( $file )
{
    add_filter('upload_dir', 'wpse_25894_custom_upload_dir');
    return $file;
}

function wpse_25894_handle_upload( $fileinfo )
{
    remove_filter('upload_dir', 'wpse_25894_custom_upload_dir');
    return $fileinfo;
}

function wpse_25894_custom_upload_dir($path)
{   
    // Determines 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; //error or uploading not from a post/page/cpt 

     // Save uploads in FILETYPE based folders. When using this method, 
     // you may want to change the check for $use_default_dir
     $extension = substr( strrchr( $_POST['name'], '.' ), 1 );

     switch( $extension )
     {
        case 'jpg':
        case 'png':
        case 'gif':
            $customdir = '/images';
            break;

        case 'mp4':
        case 'm4v':
            $customdir = '/videos';
            break;

        case 'txt':
        case 'doc':
        case 'pdf':
            $customdir = '/documents';
            break;

        default:
            $customdir = '/others';
            break;
     }

    //remove default subdir (year/month)
    $path['path']    = str_replace($path['subdir'], '', $path['path']); 
    $path['url']     = str_replace($path['subdir'], '', $path['url']);  

    $path['subdir']  = $customdir;
    $path['path']   .= $customdir; 
    $path['url']    .= $customdir;  

    return $path;
}
...