Stai cercando un modo per creare una nuova metabox nella schermata di modifica del tuo post con un menu di selezione? Sebbene probabilmente esista un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per allegare file PDF ai post con selezione file tramite metabox personalizzata.
Istruzioni:
Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o in un plugin specifico per il sito:
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];
}
Per visualizzare il file PDF, puoi usare questo codice:
<? pdf_file_url(); ?>
<a href="<? pdf_file_url(); ?>">My PDF File</a>
Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come copiare / incollare correttamente snippet di codice in WordPress, in modo da non rompere accidentalmente il tuo sito.
Se ti è piaciuto questo snippet di codice, prendi in considerazione la lettura dei nostri altri articoli sul sito come: 20 migliori temi WordPress per chiese per espandere il gregge e come tracciare i link di affiliazione in Google Analytics.
Ciao, ho bisogno di aggiungere più tipi MIME, è possibile?.
Puoi creare un array per il mime, ad esempio:
‘post_mime_type’ => array(‘application/doc’,’application/pdf’)
Il non funziona nel loop.
Il <? pdf_file_url(); ?> non funziona nel loop.
grazie per il codice. :)
Ciao, grazie per lo script. Lo sto usando con un tipo di post personalizzato.
La visualizzazione è corretta ma non riesco a salvare il pdf. Anzi, lo salva la prima volta ma poi non riesco a cambiarlo. Quindi immagino che sia la funzione 'save':
function save_pdf_link(){
global $post;
if (defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE){ return $post->ID; }
update_post_meta($post->ID, “link”, $_POST[“link”]);
}
Il mio tipo personalizzato si chiama 'events'. Hai qualche idea per farlo funzionare?
Grazie
ciao amico, ho un tipo di post personalizzato, listing, non riesco ad aggiungere il codice php sopra per visualizzare il PDF, quando aggiungo questo codice a functions.php allora viene aggiunto per i miei Post ma non per i miei listing.
saluti
Ciao, da quando ho aggiornato a WP3.5 è scomparso dalla modifica dei miei post/pagine, quindi non posso più aggiungere/modificare PDF. Qualcuno può aiutarmi?
Grazie, Craig
RISOLTO!!! mancava il "php" nello snippet
scusa per il mio inglese:
puoi integrare questo codice per una pagina? quali modifiche bisogna fare?
Ho fatto un test in un post ma non funziona, il link è
non si collega al mio file, aiutatemi per favore!!Ottimo lavoro! Ma se provo ad aggiungere più Metabox, ottengo lo stesso file per ogni campo personalizzato... Ho provato a creare funzioni diverse come: function pdf2_ Qualche idea?
il tuo codice mi rompe il sito.
l'ho trovato molto utile, c'è un modo per visualizzare il nome del file invece del solo File PDF?
tnx
sostituisci semplicemente
$pdf[]= $file->guid
con
$pdf[]= $file->post_title
Questo è un post fantastico, estremamente utile. Sto cercando di adattarlo per consentire la selezione e l'output di più PDF, ma sto avendo difficoltà. Quale sarebbe il modo migliore per procedere? Qualsiasi consiglio è apprezzato, e grazie ancora per l'articolo
Non ho testato, ma prova a inserire l'attributo "multiple" nel .
Ciao Kevin,
Sono arrivato qui tramite una ricerca e la funzione pdf_link è stata utile per correggerla come parte di un tema personalizzato e tipi di post su cui sto lavorando.
Grazie, mi hai risparmiato ore.
Kevin, ho trovato la soluzione:
Sostituisci quanto segue:
echo ‘SELECT pdf FILE’;
con questo:
echo ”;
So che questo è un post molto vecchio, ma la soluzione corretta sarebbe passare un valore vuoto, immagino!
Sostituisci quanto segue:
echo ‘SELECT pdf FILE’;
con questo:
echo ‘SELECT pdf FILE’;
Posso pensare a così tanti siti web che ne trarrebbero beneficio!
Come potrei includerlo in un'istruzione if? Quindi, se è stato caricato un pdf, mostra il link, per esempio...
Potresti semplicemente sostituire la funzione pdf_file_url con quanto segue che imposterebbe tutto per te. http://pastebin.com/KZmigAyF
Grazie mille Kevin, l'ho appena testato e funziona a meraviglia 🙂 fantastico – ritwitterò
Fantastico, sono contento di sentire che ho potuto aiutare.
il link non funziona