Fallo aleatorio al agregar imágenes programáticamente a la biblioteca de medios con wp_generate_attachment_metadata
Estoy ejecutando la última versión de WordPress (4.6) en un servidor LAMP (hosting compartido) con PHP versión 5.6.12.
Estoy tratando de agregar programáticamente 10 imágenes, subidas por FTP al directorio wp-uploads
, a la biblioteca de medios usando las tres funciones de WordPress wp_insert_attachment
, wp_generate_attachment_metadata
y wp_update_attachment_metadata
.
Mi problema:
A veces, mi script PHP funciona (las 10 imágenes se agregan correctamente a la biblioteca de medios) - y a veces no (de las 10 imágenes, solo se agregan 4, 5, 6 o similares). Cada imagen tiene un tamaño de 2M - 4M.
Lo que he hecho hasta ahora:
Habilité error_logging a través de php.ini y descubrí que de vez en cuando wp_generate_attachment_metadata
falla (es decir, mientras procesa la 5ta, 6ta, 7ma o imagen similar) y mi script PHP completo termina. No obtengo más información del error_log() que eso. Como sospechaba problemas de memoria, aumenté el tamaño de memoria para php a 120M (mi proveedor de hosting me da 128M) y la ejecución del script a 100s (mi proveedor de hosting me da 120s).
Todos los archivos existen (por supuesto), todos son PNGs - y, como dije, usando el mismo conjunto de 10 imágenes para pruebas, a veces funciona y a veces no...
Mi pregunta:
¿Existe algún problema conocido con
wp_generate_attachment_metadata
en WP 4.6? Todo funcionaba bien hasta que actualicé mi sitio de WP 4.3 a 4.6...Si la falta de memoria está causando el problema, ¿cómo podría optimizar mi script PHP para manejar el límite de memoria de 128M dado por mi proveedor de hosting?
¿Cómo puedo averiguar si la falta de memoria causa que mi script PHP termine?
¡Gracias de antemano!
Aquí está mi código:
$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');
for($i = 0; $i < 10; $i++) {
$attachment = array(
'post_mime_type' => 'image/png',
'post_title' => 'mi descripción',
'post_content' => 'mi descripción',
'post_status' => 'inherit'
);
$image_id = wp_insert_attachment($attachment, $images[$i], $post_id);
$image_data = wp_generate_attachment_metadata($image_id, $images[$i]);
wp_update_attachment_metadata($image_id, $image_data);
}

He revisado tu código y creo que te falta el guid de las imágenes. Por favor, revisa el código a continuación:
$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');
// Obtener la ruta al directorio de subida.
$wp_upload_dir = wp_upload_dir();
foreach($images as $name) {
$attachment = array(
'guid'=> $wp_upload_dir['url'] . '/' . basename( $name ),
'post_mime_type' => 'image/png',
'post_title' => 'mi descripción',
'post_content' => 'mi descripción',
'post_status' => 'inherit'
);<br/>
$image_id = wp_insert_attachment($attachment, $name, $post_id);<br/>
// Asegúrate de que este archivo esté incluido, ya que wp_generate_attachment_metadata() depende de él.
require_once( ABSPATH . 'wp-admin/includes/image.php' );<br/>
// Generar los metadatos para el adjunto y actualizar el registro en la base de datos.
$attach_data = wp_generate_attachment_metadata( $image_id, $name );<br/>
wp_update_attachment_metadata( $image_id, $attach_data );<br/>
}
Para más detalles, consulta la función wp_insert_attachment.

Gracias por señalarme el guid
faltante. Lo agregaré a mi código, lo intentaré nuevamente y te haré saber si eso resuelve el problema.

Hmm, parece que el guid
faltante causó el problema. Con el guid agregado ahora funciona al 100%. Mientras que con el guid faltante, a veces funcionaba, a veces no, algo extraño :-) GRACIAS DE NUEVO ashikra
