如何在WordPress的自定义帖子类型中附加pdf文件?
Posted
技术标签:
【中文标题】如何在WordPress的自定义帖子类型中附加pdf文件?【英文标题】:How to attach the pdf file in the custom post type in the WordPress? 【发布时间】:2022-01-19 10:45:22 【问题描述】:我正在使用 WordPress。我创建了一个自定义帖子类型。现在我必须添加文件上传选项,以便管理员可以上传 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 和这个link
【问题讨论】:
代码正在运行。在您的函数 wp_custom_attachment 中,您可以检查帖子是否附加了某些内容并将其显示在上方,例如选择文件按钮。 【参考方案1】:要查看您的帖子是否有附件,请编辑以下功能
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 用于自定义字段。没有必要重新发明***。
请注意,这些文件未在您的媒体库中注册,因此您必须手动从上传文件夹中删除文件。
【讨论】:
我需要创建上传文件夹吗? 所有文件都将存储在 wp-content/uploads/current-year/current-month/ 是的,但我没有得到任何 pdf,创建了一个新帖子,上传了 pdf 但仍然没有得到它。 我已经测试了教程链接中的代码及其适用于帖子类型的代码。我注意到你正在使用 save_post 作为指南帖子类型,而它应该是 save_post_guideline - WP 3.7: save_post_$post_type 清除缓存并再次检查,是的,它正在工作。因此 pdf 不会显示在媒体中,但会显示在月份文件夹中。对吗?以上是关于如何在WordPress的自定义帖子类型中附加pdf文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在wordpress rest api中过滤自定义帖子类型的自定义字段?
如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?
如何:在wordpress中自定义帖子类型的自定义类别存档页面