¿Estás buscando una forma de crear un nuevo metabox en tu pantalla de edición de publicaciones con un menú desplegable? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puedes usar para adjuntar archivos PDF a publicaciones con selección de archivos de metabox personalizada.
Instrucciones:
Todo lo que tienes que hacer es agregar este código al archivo functions.php de tu tema o a un plugin específico del sitio:
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];
}
Para mostrar el archivo PDF, puedes usar este código:
<? pdf_file_url(); ?>
<a href="<? pdf_file_url(); ?>">My PDF File</a>
Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo copiar / pegar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera consultar nuestros otros artículos en el sitio como: los 20 mejores temas de WordPress para iglesias para expandir la congregación y cómo rastrear enlaces de afiliados en Google Analytics.
Hola, necesito agregar más tipos MIME, ¿es posible?
Puedes hacer un array para el mime, por ejemplo:
‘post_mime_type’ => array(‘application/doc’,’application/pdf’)
El no está funcionando en el bucle.
El <? pdf_file_url(); ?> no está funcionando en el bucle.
gracias por el código. 🙂
Hola, gracias por el script. Lo estoy usando con un tipo de publicación personalizado.
La visualización es correcta pero no puedo guardar el pdf. Más bien, lo guarda la primera vez pero luego no puedo cambiarlo. Así que supongo que es la función de 'guardar':
function save_pdf_link(){
global $post; if (defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE){ return $post->ID; } update_post_meta($post->ID, “link”, $_POST[“link”]);
Mi tipo personalizado se llama 'events'. ¿Alguna idea para que funcione?
Gracias
hola amigo, tengo un tipo de publicación personalizado, listado, no puedo agregar el código php anterior para mostrar el PDF, cuando agrego este código a functions.php, se agrega para mis Publicaciones pero no para mis listados.
saludos
Hola, desde que actualicé a WP3.5 esto ha desaparecido de mis publicaciones/páginas de edición, por lo que ya no puedo agregar/editar PDFs. ¿Alguien puede ayudar?
Gracias, Craig
¡¡¡RESUELTO!!! al fragmento le faltaba el "php"
perdón por mi inglés:
¿puedes integrar este código para una página? ¿cuáles son los cambios a realizar?
hice una prueba de vuelta en una publicación pero no funciona que el enlace es
no hace la conexión con mi archivo ¡ayuda por favor!¡Gran trabajo! Pero si intento agregar múltiples Metabox, termino obteniendo el mismo archivo para cada campo personalizado. Intenté crear diferentes funciones como: function pdf2_ ¿Alguna idea?
tu código rompe mi sitio.
lo encontré muy útil, ¿hay alguna forma de mostrar el nombre del archivo en lugar de solo Archivo PDF?
gracias
solo reemplaza
$pdf[]= $file->guid
con
$pdf[]= $file->post_title
Esta es una publicación fantástica, extremadamente útil. Estoy tratando de adaptarla para permitir la selección y salida de múltiples PDF, pero estoy teniendo dificultades. ¿Cuál sería la mejor manera de abordarlo? Cualquier consejo es apreciado, y gracias de nuevo por el artículo.
Não testei, mas tenta inserir o atributo “multiple” no .
Hola Kevin,
Llegué aquí por una búsqueda y la función pdf_link resultó útil para arreglar como parte de un tema personalizado y tipos de publicación en los que estoy trabajando.
Gracias, me ahorraste horas.
Kevin, encontré la solución:
Reemplaza lo siguiente:
echo ‘SELECT pdf FILE’;
con esto:
echo ”;
Sé que es una publicación muy antigua, ¡pero la solución correcta sería pasar un valor vacío, supongo!
Reemplaza lo siguiente:
echo ‘SELECT pdf FILE’;
con esto:
echo ‘SELECT pdf FILE’;
¡Se me ocurren tantos sitios web que se beneficiarían de esto!
¿Cómo podría incluir esto en una declaración if? Por ejemplo, si se ha subido un PDF, mostrar el enlace...
Podrías reemplazar la función pdf_file_url con la siguiente que te configuraría todo. http://pastebin.com/KZmigAyF
Muchas gracias Kevin, lo acabo de probar y funciona de maravilla 🙂 increíble, lo retuitearé
Genial, me alegra saber que pude ayudar.
el enlace no funciona