如何在 WordPress 的自定义 post 类型中附加 pdf 文件?

How to attach the pdf file in the custom post type in the WordPress?

我正在使用 WordPress。我创建了一个自定义 post 类型。现在我必须添加文件上传选项,以便管理员可以上传 pdf。

我尝试了一些代码,得到了正确的输出。

现在,我的问题是当我上传 pdf 并单击发布按钮时它没有上传。我没有收到任何错误。我正在使用以下代码。

function add_pdfcustom_meta_boxes() {  
    add_meta_box('wp_custom_attachment', 'Guideline Pdf Upload', 'wp_custom_attachment', 'guideline', 'normal', 'default');  
}
add_action('add_meta_boxes', 'add_pdfcustom_meta_boxes');  

function wp_custom_attachment() {  
    wp_nonce_field( basename( __FILE__ ), 'wp_custom_attachment_nonce');
    $html = '<p class="description">';
    // $html .= 'Upload your PDF here.';
    $html .= '</p>';
    $html .= '<input type="file" id="wp_custom_attachment" name="wp_custom_attachment" value="" size="25">';
    echo $html;
}

function save_pdfcustom_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 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


 
}
add_action('save_post', 'save_pdfcustom_meta_data');

function update_edit_form() {
    echo ' enctype="multipart/form-data"';
} // end update_edit_form
add_action('post_edit_form_tag', 'update_edit_form');

我正在尝试 link and this link

要查看您的 post 是否有附件,请编辑以下函数

function wp_custom_attachment() {
 
    wp_nonce_field(plugin_basename(__FILE__), 'wp_custom_attachment_nonce');
    $file = get_post_meta(get_the_ID(), 'wp_custom_attachment', true); 
    if($file['url']):
        $html .= 'Current file attached <a href="'.$file['url'].'" target="_blank">Preview file</a>'; 
    endif;
    $html .= '<p class="description">';
        $html .= 'Upload your PDF here.';
    $html .= '</p>';
    $html .= '<input type="file" id="wp_custom_attachment" name="wp_custom_attachment" value="" size="25" />';
     
    echo $html;
 
} // end wp_custom_attachment

我建议对自定义字段使用 ACF。没有必要重新发明轮子。

请注意,这些文件未在您的媒体库中注册,因此您必须从上传文件夹中手动删除文件。