Wordpress 仅为自定义帖子类型更改上载文件夹的位置-不起作用
我在functions.php中使用了一段代码,理论上,这应该会更改自定义帖子类型的上传位置(保持页面和帖子上传目录不变) 我的自定义帖子类型是“下载” 我的新目录是一个名为“下载”的文件夹,位于我的“wp内容”文件夹中 我的wp content目录如下所示Wordpress 仅为自定义帖子类型更改上载文件夹的位置-不起作用,wordpress,function,upload,Wordpress,Function,Upload,我在functions.php中使用了一段代码,理论上,这应该会更改自定义帖子类型的上传位置(保持页面和帖子上传目录不变) 我的自定义帖子类型是“下载” 我的新目录是一个名为“下载”的文件夹,位于我的“wp内容”文件夹中 我的wp content目录如下所示 可湿性粉剂含量 下载 插件 主题 上传 请参阅下面的函数,有什么可以帮助我理解为什么这不起作用?谢谢 add_filter( 'upload_dir', 'my_custom_upload_dir' ); function my_c
- 可湿性粉剂含量
- 下载
- 插件
- 主题
- 上传
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 );
}
uploads\u dir
过滤器需要另一个实现来成功修改uploads dir/路径
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 = '/' . 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;
}
这里需要注意的是,结构是/wp content/uploads/downloads/yyyy/mm/filename.ext
我原以为以下内容可以处理/wp content/downloads/…
,但我无法确定它为什么不起作用
$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;
可能上传文件夹必须在媒体设置中设置为
wp content
,http://example.com/wp-admin/options-media.php
,并将函数的前两个条件设置为,以便_8519968 _custom _upload _dir
处理其他上传可能性(直接在媒体库中-无ID的帖子和其他帖子类型中).是否有任何错误?是否创建了目录?我认为在$subdir
变量中使用/
可能有问题。我不确定是否存在这种情况,但请尝试删除它。是否在wp content中设置了在内部创建目录的权限