I am using WordPress. I have created a custom post type. Now I have to add the file upload option so that the admin can upload the pdf.
I have tried some code and I am getting the output and it's correct.
Now, My issue is when I upload the pdf and click on the publish button then it's not uploading. I am not getting any errors. I am using the below code.
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 >';
// $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');
I am trying from this link and this link
CodePudding user response:
To see if there is attached file to your post edit the following function
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 >';
$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
I would recommend using ACF for custom fields. There is no point to reinvent the wheel.
Please note that those files are not registered in your Media library so you have to manualy delete files from your uploads folder.