Estoy tratando de crear una función de WordPress que tome una URL de imagen, descargue la imagen, la cargue en la biblioteca de medios y devuelva la identificación de la imagen.
lo adapte de esta respuesta que era tomado de aquíy agregué wp_insertar_archivo adjunto() al final.
De momento no funciona porque no devuelve nada ni sube ningún medio.
Me cansé de depurar paso a paso con var_dump()
y he descubierto la $url
El parámetro se pasa correctamente, pero no se emite nada desde download_url
.
¿Sabes lo que está mal?
¿Puedes ver algo más en la función que podría estar rota?
/* Add image to media library from URL and return the new image ID */
function bg_image_upload($url) {
// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );
// Download file to temp dir
$timeout_seconds = 10;
$temp_file = download_url( $url, $timeout_seconds );
if ( !is_wp_error( $temp_file ) ) {
// Array based on $_FILE as seen in PHP file uploads
$file = array(
'name' => basename($url), // ex: wp-header-logo.png
'type' => 'image/png',
'tmp_name' => $temp_file,
'error' => 0,
'size' => filesize($temp_file),
);
$overrides = array(
// Tells WordPress to not look for the POST form
// fields that would normally be present as
// we downloaded the file from a remote server, so there
// will be no form fields
// Default is true
'test_form' => false,
// Setting this to false lets WordPress allow empty files, not recommended
// Default is true
'test_size' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );
if ( !empty( $results['error'] ) ) {
// Insert any error handling here
} else {
$filename = $results['file']; // Full path to the file
$local_url = $results['url']; // URL to the file in the uploads dir
$type = $results['type']; // MIME type of the file
$wp_upload_dir = wp_upload_dir(); // Get the path to the upload directory.
$attachment = array (
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_mime_type' => $type,
'post_status' => 'inherit',
'post_content' => '',
);
$img_id = wp_insert_attachment( $attachment, $filename );
return $img_id;
}
}
}
¿Has revisado los registros del servidor web? Es posible que deba habilitar la depuración en PHP y ver si eso le da algunas pistas.
– sal
13 de octubre de 2018 a las 4:14
@sal acaba de revisar los registros de errores, pero están vacíos
– TinyTiger
13 de octubre de 2018 a las 4:34
verifique el registro de su servidor web. /var/logs/nginx/error_log para nginx por ejemplo.
– gabriel
13 de octubre de 2018 a las 5:29
¡Hubo un error! Simplemente no lo tenía encendido antes. esta mostrando
PHP Fatal error: Uncaught Error: Call to undefined function wp_generate_password()
pero no estoy seguro de por qué ya que nunca llamé así. Aquí está el texto completo del error: pastebin.com/kf68j5YE– TinyTiger
13 de octubre de 2018 a las 11:28
Lo primero que me viene a la mente es que tal vez la función no esté conectada correctamente dentro de WP: mira este artículo. Lo siento, pero aunque entiendo WP, no es mi pan y mantequilla. Espero que esto ayude de todos modos 🙂
– sal
14/10/2018 a las 19:35