如何在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 自定义帖子类型分类 - 获取特定内容

如何在wordpress rest api中过滤自定义帖子类型的自定义字段?

如何获取在 Wordpress 中按类别过滤的自定义帖子类型的永久链接?

如何:在wordpress中自定义帖子类型的自定义类别存档页面

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询

Wordpress - 如何通过其分类过滤添加的自定义帖子?