Saltar al contenido

Utilizando la galería de medios de WordPress para listar PDFs

Listar los PDFs en la librería de medios de WordPress puede mejorar la usabilidad de tu sitio web y proporcionar a tus usuarios acceso rápido a información relevante. Ya sea para recursos educativos, archivos descargables o simplemente para organizar documentos en una intranet.

La capacidad de listar y mostrar PDFs ofrece un valor significativo a tu audiencia. Aprovecha esta funcionalidad en WordPress para mejorar la experiencia del usuario y hacer que la gestión de contenido sea más eficiente.

En nuestro caso utilizamos la clase wp_query() para sacar la información que necesitamos de la base de datos de WordPress y la envolveremos en un shortcode para luego mostrar el listado o bien en una página o una template del tema.


function list_pdfs_shortcode() {
    ob_start(); // Inicia el buffer de salida

    $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 );

    if ( $query_pdf->have_posts() ) {
        while ( $query_pdf->have_posts() ) {
            $query_pdf->the_post();

            // Obtener el enlace al archivo PDF
            $pdf_url = wp_get_attachment_url( get_the_ID() );

            // Mostrar el enlace o cualquier otra información que desees
            echo '<a href="' . esc_url( $pdf_url ) . '">' . get_the_title() . '</a><br>';
        }

        // Restablecer los datos postglobales
        wp_reset_postdata();
    } else {
        echo 'No se encontraron archivos PDF.';
    }

    return ob_get_clean(); // Devuelve el contenido del buffer de salida
}

// Registra el shortcode
add_shortcode('list_pdfs', 'list_pdfs_shortcode');

Para mostrar el listado en tus páginas o secciones utiliza el shortcode:

[list_pdfs]

Para mostrar el listado en tus templates o con PHP utiliza esta función de WordPress:


<?php echo do_shortcode('[list_pdfs]'); ?>

Si necesitas afinar las búsquedas con wp_query(), te recomiendo habilitar las categorías y etiquetas para la galería de medios de WordPress o crear tus propias taxonomías. Por defecto en WordPress esto no es posible. No te preocupes, te dejo dos snippets sencillos para tu functions.php o plugin de funcionalidades.

La solución perfecta para tener distintos listados dependiendo de valor de la taxonomía o con una combinación de estas.


// Habilitar categorías y etiquetas en la biblioteca de medios
function enable_media_categories_and_tags() {
    // Habilitar categorías
    register_taxonomy_for_object_type('category', 'attachment');
    
    // Habilitar etiquetas
    register_taxonomy_for_object_type('post_tag', 'attachment');
}
add_action('init', 'enable_media_categories_and_tags');

// Añadir nueva taxonomía para los medios - Protocolos de Seguridad
function add_media_taxonomy() {
    $labels = array(
        'name'                       => _x('Protocolos de Seguridad', 'taxonomy general name'),
        'singular_name'              => _x('Protocolo de Seguridad', 'taxonomy singular name'),
        'search_items'               => __('Buscar Protocolos de Seguridad'),
        'popular_items'              => __('Protocolos de Seguridad Populares'),
        'all_items'                  => __('Todos los Protocolos de Seguridad'),
        'parent_item'                => null,
        'parent_item_colon'          => null,
        'edit_item'                  => __('Editar Protocolo de Seguridad'),
        'update_item'                => __('Actualizar Protocolo de Seguridad'),
        'add_new_item'               => __('Añadir Nuevo Protocolo de Seguridad'),
        'new_item_name'              => __('Nuevo Nombre del Protocolo de Seguridad'),
        'separate_items_with_commas' => __('Separar Protocolos de Seguridad con comas'),
        'add_or_remove_items'        => __('Añadir o quitar Protocolos de Seguridad'),
        'choose_from_most_used'      => __('Elegir de los más usados'),
        'menu_name'                  => __('Protocolos de Seguridad'),
    );

    $args = array(
        'hierarchical'      => false,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'protocolos-de-seguridad'),
    );

    register_taxonomy('protocolos_de_seguridad', 'attachment', $args);
}

add_action('init', 'add_media_taxonomy');

Si utilizad una nueva taxonomía como la que acabo de crear, necesitarás cambiar la función que has creado con wp_query() añadiendo tax_query() para hacer el filtro por la taxonomía y filtrando por el valor que le hayas indicado. El filtro se hace infinito.

Por ejemplo en una intranet añades la taxonomía «personas» y asignas documentos de forma individual, consigues tener una intranet privada con una forma fácil de compartir estos documento.


function list_pdfs_shortcode() {
    ob_start();

    $protocolo_to_filter = 'nombre_del_protocolo'; // Cambia 'nombre_del_protocolo' por el protocolo deseado

    $query_pdf_args = array(
        'post_type'      => 'attachment',
        'post_mime_type' => 'application/pdf',
        'post_status'    => 'inherit',
        'posts_per_page' => -1,
        'tax_query'      => array(
            array(
                'taxonomy' => 'protocolos_de_seguridad',
                'field'    => 'slug',
                'terms'    => $protocolo_to_filter,
            ),
        ),
    );

    $query_pdf = new WP_Query($query_pdf_args);

    if ($query_pdf->have_posts()) {
        while ($query_pdf->have_posts()) {
            $query_pdf->the_post();
            $pdf_url = wp_get_attachment_url(get_the_ID());
            echo '<a href="' . esc_url($pdf_url) . '">' . get_the_title() . '</a><br>';
        }
        wp_reset_postdata();
    } else {
        echo 'No se encontraron archivos PDF en el protocolo de seguridad especificado.';
    }

    return ob_get_clean();
}

add_shortcode('list_pdfs', 'list_pdfs_shortcode');

* Como apunte añadido, también puedes afinar mucho mas si se filtra por Roles de usuario. De igual forma, puedes crear tus propios roles de usuario e introducir el filtro en la función programada con wp_query(). De nuevo, infinitas opciones.

Casos de uso

  • Directorio de recursos
  • Menú de descargas para miembros
  • Catálogo de productos descargables (Incluso de pago, añadiendo stripe)
  • Página de recursos educativos
  • Intranet personal y dinámica

Espero que te esté tutorial te sirva de ayuda, si tienes algún problema o quieres que profundice mas o con mas ejemplos, házmelo saber.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.