woocommerce产品的不同上传目录

时间:2016-02-08 11:30:51

标签: php wordpress woocommerce

我一直试图直接针对woocommerce产品帖子类型进行不同的上传工作,但它适用于每次上传。这是我的代码:

function 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 && $_REQUEST['post_type'] == 'product'  
            ) 
            ? 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 = '/woo/images';
            break;

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

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

        default:
            $customdir = '/woo/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;
}

这是将我的文件写入完美的woo /目录,但不仅限于产品发布类型。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你想要覆盖woocommerce插件文件class-wc-admin-post-types.php中的woo默认上传目录。如果你想覆盖它,你可以为这个' upload_dir'创建一个过滤器。优先级更高。

add_action('pre_get_posts', '_my_pre_get_posts', 10, 1);
function _my_pre_get_posts( $wp ) {
global $typenow, $blog_id;

  if ( 'product' == $typenow && $blog_id != 1) {
switch_to_blog(1);
  }
}

由于post_type取决于要查询的当前post_type,它可能会也可能不起作用,如果您希望这也适用于订单,您可能会检查&#39; shop_order&#39;。< / p>

我尝试了一次但只工作了几次。它可能在woo方法之前就已经过时了,但我认为你也可以暂时删除一个方法,然后让脚本分开工作。

我发现你的问题正在寻找类似的东西,所以认为你可能比我更幸运。此外,WP还有一个内置的$mime动作/过滤器。我这样用它:

add_filter('upload_mimes','wpaclip_restrict_mimes_types');
function wpaclip_restrict_mimes_types($mimes) {
  if (!current_user_can('author')) {
    return;
  }

  $mimes = array(
    'acc'       => 'audio/aac',
    'mp4 | m4a' => 'audio/mp4',
    'mp1 | mp2 | mp3 | mpg | mpeg' => 'audio/mpeg',
    'ogg | oga' => 'audio/ogg',
    'wav'       => 'audio/wav',
    'webm'      => 'audio/webm'
    );

  return $mimes;
 }

这可能有助于隔离您的文件类型。