2012-03-13 2 views
4

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

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? Или любым другим способом?

+0

У меня такой же вопрос. Кто-нибудь ?! –

ответ

2

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

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

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

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; 
}