Wordpress CPT附件保存到单独的文件夹

时间:2018-04-05 11:12:35

标签: wordpress custom-post-type

我正在尝试制作自定义帖子类型(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');

1 个答案:

答案 0 :(得分:0)

您需要使用2个过滤器直接更改自定义帖子以处理上传。

YOUR_CPTYOUR_DIR更改为您想要的目录

根据DOCS

wp_handle_upload_prefilter

  

从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