it-swarm.com.de

PDF-Datei an benutzerdefinierten Beitragstyp anhängen

Ich versuche, eine PDF-Datei an einen benutzerdefinierten Beitragstyp anzuhängen.
Ich habe dieses Snippet bei wpsnipp.com gefunden.
Der Code macht den Trick, aber nur für Beiträge.
Ich habe einen benutzerdefinierten Beitragstyp namens "Ereignisse" und kann ihn nicht zum Laufen bringen.

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];
}

Und um den Link im Theme anzuzeigen:

<? pdf_file_url(); ?>

Ich habe den Beitragstyp von "Beitrag" in "Ereignisse" geändert und das Meta-Feld wird auf der Seite "Ereignisse" angezeigt.
So weit, ist es gut.
Das PDF wird beim ersten Mal gespeichert. Und es zeigt auch den richtigen Link.
Aber wenn ich versuche, das PDF zu ändern, wird es nicht gespeichert. Es wird wieder der erste angezeigt.

3
belacqua16

Hier ist mein Code, den ich in meiner WordPress-Site in benutzerdefinierten Beitragstyp verwendet habe, um das PDF zum Beitrag hinzuzufügen, und seine Arbeit für mich versucht, es zu ändern und zu verwenden. Hoffe es wird helfen

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');

Um das PDF zu erhalten

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

Ich habe diese letzte Nacht gerade mit dem obigen Code (und dem zusätzlichen Kommentar) zum Laufen gebracht und es gibt ein paar Dinge, die ich hier hinzufügen möchte. Zunächst sollte im Abschnitt "Um das PDF zu erhalten" "wpcf-brochure" in "wp_custom_attachment" geändert werden. Als nächstes, um die letzte Frage von OP zu beantworten und sie im Backend erscheinen zu lassen, hier ist die Technik, die ich verwendet habe. Vor der Zeile "echo $ html;" Fügen Sie in functions.php Folgendes hinzu:

$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