¿Estás buscando una forma de agregar un metabox a tu menú de pantalla de edición de publicaciones que contenga todos los archivos de audio? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puedes usar para agregar un metabox personalizado que liste todos los archivos de audio de la biblioteca de medios en WordPress.
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", "audio_init");
add_action('save_post', 'save_audio_link');
function audio_init(){
add_meta_box("mp3-audio", "MP3 AUDIO", "audio_link", "post", "normal", "low");
}
function audio_link(){
global $post;
$custom = get_post_custom($post->ID);
$link = $custom["link"][0];
$count = 0;
echo '<div class="link_header">';
$query_audio_args = array(
'post_type' => 'attachment',
'post_mime_type' =>'audio',
'post_status' => 'inherit',
'posts_per_page' => -1,
);
$query_audio = new WP_Query( $query_audio_args );
$audio = array();
echo '<select name="link">';
echo '<option class="audio_select">SELECT AUDIO FILE</option>';
foreach ( $query_audio->posts as $file) {
if($link == $audio[]= $file->guid){
echo '<option value="'.$audio[]= $file->guid.'" selected="true">'.$audio[]= $file->guid.'</option>';
}else{
echo '<option value="'.$audio[]= $file->guid.'">'.$audio[]= $file->guid.'</option>';
}
$count++;
}
echo '</select><br /></div>';
echo '<p>Selecting an audio file from the above list to attach to this post.</p>';
echo '<div class="audio_count"><span>Files:</span> <b>'.$count.'</b></div>';
}
function save_audio_link(){
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ return $post->ID; }
update_post_meta($post->ID, "link", $_POST["link"]);
}
add_action( 'admin_head', 'audio_css' );
function audio_css() {
echo '<style type="text/css">
.audio_select{
font-weight:bold;
background:#e5e5e5;
}
.audio_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;
}
.audio_count span{color:#666;}
</style>';
}
function audio_file_url(){
global $wp_query;
$custom = get_post_custom($wp_query->post->ID);
echo $custom['link'][0];
}
Agrega este fragmento de código para mostrar la URL de audio especificada en tu archivo de plantilla de WordPress.
<?
audio_file_url()
?>
Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo agregar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera revisar nuestros otros artículos en el sitio como: 19 mejores plugins de WordPress para fotógrafos y 30 formas de ganar dinero con blogs en línea.
Hola Kevin, ¿podrías decirme cómo obtengo la URL para mostrarla como un shortcode de audio en mi tema?
Hola,
Primero, esto es brillante, creo que algo así debería ser parte de la funcionalidad principal de WordPress.
He estado revisando esto para ver si puedo usarlo como guía para algo que estoy haciendo. Me pregunto si hay una manera de adaptar esto para mostrar categorías de enlaces en lugar de archivos multimedia. Estoy familiarizado con los metaboxes con casillas y campos, pero los menús desplegables son nuevos para mí, y estoy jugando con get_terms(link_category) pero me cuesta un poco cómo integrarlo en una solución como esta.
¿Alguna idea? Si no, está bien.
¡Gracias!
Hola Jen,
¿Qué es lo que intentas hacer? Si me envías un correo electrónico rápido al respecto, debería poder ayudarte a poner las cosas en marcha.
http://wpsnipp.com/index.php/contact/
¡Muchas gracias! ¡Esto es exactamente lo que necesitaba!
Hola Doug, genial me alegra que te guste el fragmento.
Hola,
Gracias por tu publicación.
Tengo una pregunta: ¿cómo mostrar el nombre del archivo en lugar de la URL del archivo.
Perdón por mi mal inglés.
Anne
Hola Anne, notarás en las líneas 24 y 26 – $file->guid cambia la segunda instancia en cada línea o guid a post_title, por ejemplo: $file->post_title
línea 24
———-
echo ‘guid.'” selected=”true”>’.$audio[]= $file->guid.”;
a
echo ‘guid.'” selected=”true”>’.$audio[]= $file->post_title.”;
línea 26:
———–
echo ‘guid.'”>’.$audio[]= $file->guid.”;
a
echo ‘guid.'”>’.$audio[]= $file->post_title.”;
Hola Kevin,
¡Muchas gracias por tu ayuda!
Anne
De nada Anne, disfruta los fragmentos de WordPress.
Bueno, buenos consejos. ¿Hay algún sitio de ejemplo que ya haya tenido éxito usando tu script?
Es difícil saberlo porque a mucha gente le gusta este fragmento, pero como es un fragmento de administrador, es difícil decirlo.
Hola Kevin, tengo una solicitud que también puede estar relacionada con este artículo. Espero que puedas echarle un vistazo y considerar si podrías publicar un artículo al respecto.
Mis usuarios usan campos personalizados para adjuntar archivos como pdf, word, etc. a sus publicaciones. Sería maravilloso si pudiera hacer que a los lectores les resulte un poco más fácil entender que se trata de un archivo en lugar de un enlace a otros sitios, agregando automáticamente un ícono a la izquierda del título del archivo.
Por ejemplo, un usuario carga un archivo pdf y debajo del contenido (frontend) aparece el título del archivo y un ícono de pdf al lado del título. Normalmente uso el plugin Custom Field Template.
Aprecio tu preocupación.
Hola Zeb, puedes hacer este tipo de cosas con javascript,
http://cool-javascripts.com/jquery/add-icons-to-your-links-automatically-using-jquery-css.html
Funciona muy bien. sin embargo, investigaré una versión actualizada de este fragmento también.
Gracias por la respuesta Kevin.
Como ya has indicado, necesita una actualización. Utiliza jQuery 1.2.6 que está desactualizado y no estoy muy seguro de si está optimizado para Wordpress y si tiene problemas de seguridad. Sería muy amable de tu parte si pudieras publicar una actualización para esto.
Saludos
Hola Zeb,
Publicaré una actualización pronto, sin embargo, no usa JQuery, así que eso no debería ser un problema.