Căutați o modalitate de a crea un nou metabox în ecranul de editare a postărilor dvs. cu un meniu de selecție? Deși probabil există un plugin pentru asta, am creat o secțiune rapidă de cod pe care o puteți folosi pentru a atașa fișiere PDF la postări cu selecție de fișiere personalizată prin metabox.
Instrucțiuni:
Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:
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];
}
Pentru a afișa fișierul PDF, puteți folosi acest cod:
<? pdf_file_url(); ?>
<a href="<? pdf_file_url(); ?>">My PDF File</a>
Notă: Dacă este prima dată când adăugați secvențe de cod în WordPress, consultați ghidul nostru despre cum să copiați / lipiți corect secvențe de cod în WordPress, pentru a nu vă defecta accidental site-ul.
Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare să consultați celelalte articole ale noastre de pe site, cum ar fi: Cele mai bune 20 de teme WordPress pentru biserici pentru extinderea turmei și Cum să urmăriți linkurile afiliate în Google Analytics.
Bună, am nevoie să adaug mai multe tipuri mime, este posibil?.
Puteți face un array pentru mime, de exemplu:
‘post_mime_type’ => array(‘application/doc’,’application/pdf’)
Funcția nu funcționează în buclă.
Funcția <? pdf_file_url(); ?> nu funcționează în buclă.
Mulțumesc pentru cod. 🙂
Bună, mulțumesc pentru script. Îl folosesc cu un tip de postare personalizat.
Afisajul este corect, dar nu pot salva PDF-ul. Mai exact, îl salvează prima dată, dar apoi nu îl mai pot modifica. Deci, presupun că este funcția de 'salvare':
function save_pdf_link(){
global $post;
if (defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE){ return $post->ID; }
update_post_meta($post->ID, “link”, $_POST[“link”]);
}
Tipul meu personalizat se numește „events”. Aveți vreo idee pentru a-l face să funcționeze?
Mulțumesc
Salut, am un tip de postare personalizat, listing, nu pot adăuga codul PHP de mai sus pentru a afișa PDF-ul, când adaug acest cod în functions.php, acesta este adăugat pentru Postările mele, dar nu și pentru listările mele.
Salutări
Bună, de la actualizarea la WP3.5, acest lucru a dispărut din postările/paginile mele de editare, așa că nu mai pot adăuga/edita PDF-uri. Poate cineva să mă ajute?
Mulțumesc, Craig
REZOLVAT!!! secțiunii îi lipsește „php”
scuze pentru engleza mea:
poți integra acest cod pentru o pagină? ce modificări trebuie făcute?
Am făcut un test înapoi într-o postare, dar nu funcționează, linkul nu face conexiunea cu fișierul meu, ajutați-mă, vă rog!!
Trebă excelentă! Dar dacă încerc să adaug mai multe Metabox-uri, ajung să obțin același fișier pentru fiecare câmp personalizat.. Am încercat să creez funcții diferite, cum ar fi: function pdf2_ Aveți vreo idee?
codul tău îmi strică site-ul.
l-am găsit foarte util, există vreo modalitate de a afișa numele fișierului în loc de doar Fișier PDF:?
Mulțumesc
doar înlocuiește
$pdf[]= $file->guid
cu
$pdf[]= $file->post_title
Aceasta este o postare fantastică, extrem de utilă. Încerc să o adaptez pentru a permite selectarea și apoi afișarea mai multor PDF-uri, dar mă chinui. Care ar fi cea mai bună modalitate de abordare? Orice sfat este apreciat și mulțumesc din nou pentru articol.
Nu am testat, dar încearcă să inserezi atributul „multiple” în .
Salut Kevin,
Am ajuns aici în urma unei căutări și funcția pdf_link a fost utilă pentru a o repara ca parte a unei teme personalizate și a tipurilor de postări pe care lucrez.
Mulțumesc, mi-ai economisit ore.
Kevin am găsit soluția:
Înlocuiește următoarele:
echo ‘SELECT pdf FILE’;
cu acesta:
echo ”;
Știu că este un post foarte vechi, dar soluția corectă ar fi să treci o valoare goală, cred!
Înlocuiește următoarele:
echo ‘SELECT pdf FILE’;
cu acesta:
echo ‘SELECT pdf FILE’;
Mă pot gândi la atât de multe site-uri web care ar beneficia de acest lucru!
Cum aș putea include acest lucru într-o instrucțiune if? Deci, dacă a fost încărcat un fișier pdf, afișează linkul, de exemplu…
Ai putea înlocui funcția pdf_file_url cu următoarea care ți-ar configura lucrurile. http://pastebin.com/KZmigAyF
Mulțumesc mult Kevin, tocmai am testat și funcționează ca un farmec 🙂 uimitor – voi re-tweeta
Super, mă bucur să aud că am putut ajuta.
linkul nu funcționează