web-dev-qa-db-ja.com

カスタム投稿タイプにpdfファイルを添付

カスタム投稿タイプにpdfファイルを添付しようとしています。
wpsnipp.comでこのスニペットを見つけました。
コードはトリックを行いますが、投稿専用です。
'events'という名前のカスタム投稿タイプがあり、それを機能させることができません。

add_action("admin_init", "pdf_init");
add_action('save_post', 'save_pdf_link');
function pdf_init(){
    add_meta_box("my-pdf", "PDF Document", "pdf_link", "post", "normal", "low");
    }
function pdf_link(){
    global $post;
    $custom  = get_post_custom($post->ID);
    $link    = $custom["link"][0];
    $count   = 0;
    echo '<div class="link_header">';
    $query_pdf_args = array(
            'post_type' => 'attachment',
            'post_mime_type' =>'application/pdf',
            'post_status' => 'inherit',
            'posts_per_page' => -1,
            );
    $query_pdf = new WP_Query( $query_pdf_args );
    $pdf = array();
    echo '<select name="link">';
    echo '<option class="pdf_select">SELECT pdf FILE</option>';
    foreach ( $query_pdf->posts as $file) {
       if($link == $pdf[]= $file->guid){
          echo '<option value="'.$pdf[]= $file->guid.'" selected="true">'.$pdf[]= $file->guid.'</option>';
             }else{
          echo '<option value="'.$pdf[]= $file->guid.'">'.$pdf[]= $file->guid.'</option>';
             }
            $count++;
    }
    echo '</select><br /></div>';
    echo '<p>Selecting a pdf file from the above list to attach to this post.</p>';
    echo '<div class="pdf_count"><span>Files:</span> <b>'.$count.'</b></div>';
}
function save_pdf_link(){
    global $post;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ return $post->ID; }
    update_post_meta($post->ID, "link", $_POST["link"]);
}
add_action( 'admin_head', 'pdf_css' );
function pdf_css() {
    echo '<style type="text/css">
    .pdf_select{
            font-weight:bold;
            background:#e5e5e5;
            }
    .pdf_count{
            font-size:9px;
            color:#0066ff;
            text-transform:uppercase;
            background:#f3f3f3;
            border-top:solid 1px #e5e5e5;
            padding:6px 6px 6px 12px;
            margin:0px -6px -8px -6px;
            -moz-border-radius:0px 0px 6px 6px;
            -webkit-border-radius:0px 0px 6px 6px;
            border-radius:0px 0px 6px 6px;
            }
    .pdf_count span{color:#666;}
            </style>';
}
function pdf_file_url(){
    global $wp_query;
    $custom = get_post_custom($wp_query->post->ID);
    echo $custom['link'][0];
}

そしてテーマの中にリンクを表示するには:

<? pdf_file_url(); ?>

投稿の種類を「投稿」から「イベント」に変更したところ、「イベント」ページにメタボックスが表示されました。
ここまでは順調ですね。
初めてPDFを保存することはありません。そしてまたそれは正しいリンクを表示します。
しかし、私がpdfを変更しようとしても、それは保存されません。最初のものをもう一度表示します。

3
belacqua16

これは私が私のWordpressのサイトでカスタム投稿タイプで私がポストにpdfを追加するのに使ったコードで、私のためにその仕事を変更してそれを使うことを試みます。それが役立つことを願っています

function add_custom_meta_boxes() {  
    add_meta_box('wp_custom_attachment', 'Hotel Brochure', 'wp_custom_attachment', 'hotel_post', 'normal', 'high');  
}
add_action('add_meta_boxes', 'add_custom_meta_boxes');  

function wp_custom_attachment() {  
    wp_nonce_field(plugin_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;
}

add_action('save_post', 'save_custom_meta_data');
function save_custom_meta_data($id) {
    if(!empty($_FILES['wp_custom_attachment']['name'])) {
        $supported_types = array('application/pdf');
        $arr_file_type = wp_check_filetype(basename($_FILES['wp_custom_attachment']['name']));
        $uploaded_type = $arr_file_type['type'];

        if(in_array($uploaded_type, $supported_types)) {
            $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 {
                update_post_meta($id, 'wp_custom_attachment', $upload);
            }
        }
        else {
            wp_die("The file type that you've uploaded is not a PDF.");
        }
    }
}

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

PDFを入手する

$hotel_brochure = get_post_meta( $post_id, 'wpcf-brochure', true );
$hotel_brochure['url']
8
ksr89

私は昨夜、上のコード(および追加のコメント)を使用してこれを機能させたところです。ここで追加したいことがいくつかあります。まず、「PDFを入手するには」セクションで、「wpcf-brochure」を「wp_custom_attachment」に変更する必要があります。次に、OPからの最後の質問に答えてそれをバックエンドに表示するために、ここで私が使用した手法があります。 "echo $ html;"という行の前にfunctions.phpに以下を追加してください。

$filearray = get_post_meta( get_the_ID(), 'wp_custom_attachment', true );
$this_file = $filearray['url'];
if($this_file != ""){
   $html .= '<div>Current file:<br>"' . $this_file . '"</div>';
}
1