Wordpress链接到文件URL而不是附件页面

时间:2014-03-04 10:45:10

标签: php wordpress custom-post-type meta-boxes

我在wordpress functions.php文件中使用以下代码在我的自定义帖子类型中创建自定义元框,以便允许我将PDF附加到我的网页。然而,链接将我带到附件页面而不是文件URL,我不能为我的生活找出原因!任何帮助将非常感激。

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

如果有人想知道,我也从WPSnipp

采购了这段代码

1 个答案:

答案 0 :(得分:1)

您应该使用wp_get_attachment_url( $id );功能获取附件的网址。

所以你的代码看起来会更像这样:

foreach ( $query_pdf->posts as $file) {
           if($link == $pdf[]= wp_get_attachment_url($file->ID)){
              echo '<option value="'.$pdf[]= wp_get_attachment_url($file->ID).'" selected="true">'.$pdf[]= wp_get_attachment_url($file->ID).'</option>';
                 }else{
              echo '<option value="'.$pdf[]= wp_get_attachment_url($file->ID).'">'.$pdf[]= wp_get_attachment_url($file->ID).'</option>';
                 }
                $count++;
        }

该链接应该将您带到pdf而不是单个附件模板。

注意:我只对foreach循环进行了采样,因为这是保存的值。