En un artículo anterior habíamos visto como usar el Media Uploader de WordPress para subir archivos, sin embargo en este artículo veremos una manera alterna a través de código que nos permita personalizar la subida de archivos en WordPress.
Resultado Final
Al final lo que queremos obtener será algo similar a la siguiente imagen, en donde se muestra un formulario de subida de archivos:

Código para subir archivos a WordPress
El siguiente código es parte del código de un plugin de ejemplo, te creará una nueva opción de menú bajo el menú de Herramientas y sirve como código base para la subida de archivos en WordPress usando PHP y funciones de WordPress.
<?php
/*
Plugin Name: Upload custom file
Plugin URI: https://decodecms.com
description: Demo plugin for uploading files with PHP
Version: 1.0
Author: Jhon Marreros
Author URI: https://decodecms.com
License: GPL2
*/
// Show Form
add_action( 'admin_menu', 'register_media_selector_settings_page' );
function register_media_selector_settings_page() {
add_submenu_page( 'tools.php', 'Upload File', 'Upload File', 'manage_options', 'upload-file', 'dcms_upload_file_settings_callback' );
}
function dcms_upload_file_settings_callback() {
?>
<div class="wrap">
<h1>Ejemplo de subida de archivo</h1>
<br>
<form enctype="multipart/form-data" method="post">
Selecciona algún archivo: <input name="upload-file" type="file" /> <hr>
<input type="submit" value="Enviar archivo" />
</form>
</div>
<?php
if(isset($_FILES['upload-file'])) {
global $wp_filesystem;
WP_Filesystem();
$name_file = $_FILES['upload-file']['name'];
$tmp_name = $_FILES['upload-file']['tmp_name'];
$allow_extensions = ['xls', 'xlsx', 'csv'];
// File type validation
$path_parts = pathinfo($name_file);
$ext = $path_parts['extension'];
if ( ! in_array($ext, $allow_extensions) ) {
echo "Error - File type not allowed";
return;
}
$content_directory = $wp_filesystem->wp_content_dir() . 'uploads/archivos-subidos/';
$wp_filesystem->mkdir( $content_directory );
if( move_uploaded_file( $tmp_name, $content_directory . $name_file ) ) {
echo "File was successfully uploaded";
} else {
echo "The file was not uploaded";
}
}
}
En el código anterior:
- Todo el contenido se mostrará bajo la página que carga el enlace de menú creado
- Creamos un formulario de subida de archivos con HTML
- Verificamos si se envía un Post para procesar la subida de archivos
- Recuperamos el nombre del archivo y nombre temporal
- Validamos la extensión del archivo
- Movemos el archivo temporal a la ubicación final
- Comprobamos si hay errores o si se realizó correctamente
Conclusión
La subida de archivos directamente con PHP puede que no sea tan visual, sin embargo te puede servir de base para construir algo más complejo en tus temas y plugins personalizados.
¿Aún con dudas?, en el siguiente video se explica más detalladamente.
Hola buenas tardes, una consulta: ¿Cómo puedo agregarlo como shortcode?
Hola, te sugiero revises este artículo en donde se realiza algo similar con un Shortcode y Ajax: https://decodecms.com/subir-archivos-en-wordpress-usando-ajax/
Si cargo un archivo con el mismo nombre se remplaza, si el archivo ya existe con el mismo nombre debería guardar con otro nombre.
Hola, si quieres esa funcionalidad tendría que comprobar antes si el archivo con nombre $name_file ya existe y agregarle un número por ejemplo al nombre. Saludos.