我正在尝试制作自定义帖子类型(CPT)插件。我使用波纹管代码保存附件,它的工作完美,但我的问题是如何将此附件保存到WordPress目录中wp-content
或新位置以外的单独文件夹中。
例如:
现在它保存在
wp-content/uploads/2018/04
文件夹
但我想要
wp-content/uploads/myfile
文件夹
function save_custom_meta_data($id) {
/* --- security verification --- */
if(!wp_verify_nonce($_POST['wp_custom_attachment_nonce'], plugin_basename(__FILE__))) {
return $id;
} // end if
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $id;
} // end if
if('page' == $_POST['post_type']) {
if(!current_user_can('edit_page', $id)) {
return $id;
} // end if
} else {
if(!current_user_can('edit_page', $id)) {
return $id;
} // end if
} // end if
/* - end security verification - */
// Make sure the file array isn't empty
if(!empty($_FILES['wp_custom_attachment']['name'])) {
// Setup the array of supported file types. In this case, it's just PDF.
$supported_types = array('application/pdf');
// Get the file type of the upload
$arr_file_type = wp_check_filetype(basename($_FILES['wp_custom_attachment']['name']));
$uploaded_type = $arr_file_type['type'];
// Check if the type is supported. If not, throw an error.
if(in_array($uploaded_type, $supported_types)) {
// Use the WordPress API to upload the file
$upload = wp_upload_bits($_FILES['wp_custom_attachment']['name'], null, file_get_contents($_FILES['wp_custom_attachment']['tmp_name']));
if(isset($upload['error']) && $upload['error'] != 0) {
wp_die('There was an error uploading your file. The error is: ' . $upload['error']);
} else {
add_post_meta($id, 'wp_custom_attachment', $upload);
update_post_meta($id, 'wp_custom_attachment', $upload);
} // end if/else
} else {
wp_die("The file type that you've uploaded is not a PDF.");
} // end if/else
} // end if
} // end save_custom_meta_data
add_action('save_post', 'save_custom_meta_data');
答案 0 :(得分:0)
您需要使用2个过滤器直接更改自定义帖子以处理上传。
将YOUR_CPT
和YOUR_DIR
更改为您想要的目录
根据DOCS
从WordPress管理信息中心上传媒体时, 对用户指定的每个文件调用wp_handle_upload一次。 wp_handle_upload_prefilter是一个由。调用的管理过滤器 wp_handle_upload函数。单个参数$ file代表一个 $ _FILES数组的单个元素。 wp_handle_upload_prefilter 为您提供检查或更改文件名的机会 在文件移动到最终位置之前。
AND upload_dir
此挂钩允许您更改上载文件的目录 至。 wp_upload_dir使用数组中的键和值 在wordpress核心中运行,正在进行工作。
使用代码:
add_filter( 'wp_handle_upload_prefilter', 'my_pre_upload' );
function my_pre_upload( $file ) {
add_filter( 'upload_dir', 'my_custom_upload_dir' );
return $file;
}
function my_custom_upload_dir( $param ) {
$id = $_REQUEST['post_id'];
$parent = get_post( $id )->post_parent;
if( "YOUR_CPT" == get_post_type( $id ) || "YOUR_CPT" == get_post_type( $parent ) ) {
$mydir = '/YOUR_DIR';
$param['path'] = $param['basedir'] . $mydir;
$param['url'] = $param['baseurl'] . $mydir;
}
return $param;
}
您也可以阅读此article