Este conjunto de funciones PHP constituye una solución elegante para la gestión de descargas privadas en WordPress, elevando la experiencia del usuario a través de una interfaz de administración intuitiva y la implementación de shortcodes para la visualización de descargas específicas.
La función principal, agregar_menu_descargas(), establece una nueva pestaña en el menú de administración, proporcionando acceso a la función pagina_descargas(). Esta función centraliza las operaciones relacionadas con descargas, permitiendo a los administradores cargar, visualizar, editar y eliminar archivos asociados a identificadores únicos.
Un aspecto distintivo es el uso de shortcodes, en este caso, el shortcode ‘mostrar_descargas’, implementado por la función mostrar_descargas_shortcode(). Este shortcode permite la fácil integración de la visualización de descargas en cualquier página de WordPress, proporcionando flexibilidad y personalización a los administradores.
La seguridad se aborda con cautela, incorporando medidas como la sanitización de datos y la validación de archivos para garantizar la integridad del sistema. La integración en WordPress se realiza de manera armoniosa mediante ganchos y acciones, asegurando una coexistencia sin problemas con el núcleo del sistema.
Estas funciones no solo son líneas de código; representan una herramienta completa para potenciar la gestión de descargas en WordPress. Al ofrecer una administración robusta y amigable junto con la capacidad de integrar shortcodes, estas funciones no solo informan sino que también mejoran significativamente la usabilidad del sitio. En última instancia, reflejan la versatilidad de WordPress cuando se combina con un enfoque técnico sólido y estratégico.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.
<?php
// Agregar una nueva pestaña al menú de administración
function agregar_menu_descargas() {
add_menu_page(
'Descargas',
'Descargas',
'manage_options',
'descargas_menu',
'pagina_descargas',
'dashicons-download',
20
);
}
add_action('admin_menu', 'agregar_menu_descargas');
// Página de administración de Descargas
function pagina_descargas() {
?>
<div class="wrap">
<h1>Descargas Privadas</h1>
<form method="post" enctype="multipart/form-data">
<!-- Campo para subir archivos -->
<input type="file" name="archivo_descarga" />
<?php submit_button('Subir Descarga'); ?>
</form>
<form method="post">
<h2>Descargas Disponibles</h2>
<?php
// Obtener descargas desde la opción de la base de datos
$descargas = get_option('descargas_privadas', array());
if (isset($_FILES['archivo_descarga']) && $_FILES['archivo_descarga']['error'] == 0) {
// Subir el archivo y obtener su ID
$adjunto_id = media_handle_upload('archivo_descarga', 0);
// Guardar información del archivo y el identificador en la opción de la base de datos
$descargas[] = array(
'id' => $adjunto_id,
'name' => $_FILES['archivo_descarga']['name'],
'identificador' => '',
);
update_option('descargas_privadas', $descargas);
}
if (isset($_POST['guardar_cambios']) && isset($_POST['identificador'])) {
// Actualizar identificadores al hacer clic en "Guardar Cambios"
foreach ($_POST['identificador'] as $index => $identificador) {
if (isset($descargas[$index])) {
$descargas[$index]['identificador'] = sanitize_text_field($identificador);
}
}
update_option('descargas_privadas', $descargas);
}
if (isset($_GET['action']) && $_GET['action'] === 'eliminar_descarga' && isset($_GET['id'])) {
// Eliminar la descarga con el ID correspondiente
$descargas = array_filter($descargas, function ($descarga) {
return $descarga['id'] != $_GET['id'];
});
update_option('descargas_privadas', $descargas);
// Redirigir de nuevo a la página de Descargas
wp_redirect(admin_url('admin.php?page=descargas_menu'));
exit;
}
if (!empty($descargas)) {
?>
<table class="form-table">
<?php
foreach ($descargas as $index => $descarga) {
?>
<tr>
<th>
Archivo subido:
<a href="<?php echo wp_get_attachment_url($descarga['id']); ?>" download>
<?php echo $descarga['name']; ?>
</a>
</th>
<td>
<!-- Campo de texto editable para el identificador -->
<input type="text" name="identificador[<?php echo $index; ?>]" value="<?php echo esc_attr($descarga['identificador']); ?>" placeholder="Identificador">
</td>
<td>
<a href="<?php echo admin_url('admin.php?page=descargas_menu&action=eliminar_descarga&id=' . $descarga['id']); ?>">
<span class="dashicons dashicons-trash"></span>
</a>
</td>
</tr>
<?php
}
?>
</table>
<p>
<input type="submit" name="guardar_cambios" class="button button-primary" value="Guardar Cambios">
</p>
<?php
} else {
echo '<p>No hay descargas disponibles.</p>';
}
?>
</form>
</div>
<?php
}
// Función para mostrar las descargas mediante un shortcode
function mostrar_descargas_shortcode() {
ob_start(); // Captura la salida
?>
<div class="wrap">
<h2>Descargas Disponibles</h2>
<?php
// Obtener descargas desde la opción de la base de datos
$descargas = get_option('descargas_privadas', array());
if (!empty($descargas)) {
?>
<table class="form-table">
<?php
foreach ($descargas as $index => $descarga) {
?>
<tr>
<th>
Archivo subido:
<a href="<?php echo wp_get_attachment_url($descarga['id']); ?>" download>
<?php echo $descarga['name']; ?>
</a>
</th>
<td>
Identificador: <?php echo esc_html($descarga['identificador']); ?>
</td>
</tr>
<?php
}
?>
</table>
<?php
} else {
echo '<p>No hay descargas disponibles.</p>';
}
?>
</div>
<?php
return ob_get_clean(); // Devuelve la salida capturada
}
add_shortcode('mostrar_descargas', 'mostrar_descargas_shortcode');
Lenguaje del código: HTML, XML (xml)
Entendiendo el Código
1. Agregar Nueva Pestaña al Menú de Administración:
- Función:
agregar_menu_descargas()- Utiliza
add_menu_pagepara incorporar una nueva pestaña al menú de administración. - Parámetros:
- ‘Descargas’ como título de la pestaña.
- ‘dashicons-download’ como ícono.
- ‘manage_options’ para los usuarios con permisos de administrador.
- ‘descargas_menu’ como identificador único de la página.
- ‘pagina_descargas’ como la función que se ejecutará al hacer clic.
- Prioridad 20 en el menú.
- Utiliza
2. Página de Administración de Descargas:
- Función:
pagina_descargas()- Estructura:
- Formulario para subir archivos.
- Formulario para gestionar descargas existentes.
- Proceso de carga de archivos y actualización de la opción de la base de datos ‘descargas_privadas’.
- Gestión de identificadores y eliminación de descargas.
- Interfaz de Administración:
- Utiliza
wp_get_attachment_urlpara generar enlaces de descarga. - Incluye formularios para editar identificadores y eliminar descargas.
- Redirecciona utilizando
wp_redirectdespués de la eliminación.
- Utiliza
- Estructura:
3. Función para Mostrar Descargas mediante un Shortcode:
- Función:
mostrar_descargas_shortcode()- Obtiene la información de las descargas desde la opción de la base de datos ‘descargas_privadas’.
- Genera una salida HTML para mostrar la información de las descargas en una tabla.
4. Acciones y Hooks:
add_action('admin_menu', 'agregar_menu_descargas'): Agrega la pestaña al menú de administración.add_shortcode('mostrar_descargas', 'mostrar_descargas_shortcode'): Registra el shortcode para mostrar descargas.
5. Proceso de Subida de Archivos:
- Utiliza
media_handle_uploadpara procesar la subida de archivos. - Actualiza la opción de la base de datos ‘descargas_privadas’ con la nueva información.
6. Gestión de Identificadores y Eliminación:
- Permite la asociación de identificadores a cada descarga.
- Facilita la eliminación de descargas mediante un enlace específico.
7. Visualización de Descargas:
- Presenta las descargas disponibles en una tabla con enlaces, identificadores y opciones de eliminación.
- Proporciona un formulario para la modificación de identificadores.
8. Verificación y Carga de Descargas Privadas en Página de Producto:
- Utiliza un shortcode (‘mostrar_descargas’) para integrar la visualización de descargas en una página de producto específica.
9. Redirecciones y Enlaces:
- Utiliza
wp_redirectpara redirigir después de realizar operaciones como eliminar una descarga. - Genera enlaces con parámetros específicos para acciones como la eliminación de descargas.
Si necesitas adaptar el código a las necesidades de tu proyecto o agregar una funcionalidad específica a tu página web no dudes en contactar conmigo.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.