Actualmente tengo un archivo CSV que tiene 2 columnas: una para el ID de la publicación y otra para la URL de la imagen. Hay 10.000 publicaciones y, por lo tanto, 10.000 imágenes.
Necesito importarlos a WordPress y establecer cada imagen como imagen destacada.
¿Cómo se puede lograr esto? Soy consciente de que hay complementos que mostrarán la imagen destacada desde una URL externa, pero en realidad necesito importar las imágenes en el mismo servidor (como el nuevo sitio web se está construyendo en un servidor diferente, el DNS de los dominios se actualizará para ir live – haciendo que la antigua URL de la ruta completa sea inútil).
Me gustaría agregar a la respuesta de davemac para completarla.
Tendrías que insertar programáticamente la publicación con wp_insertar_post() y guarde la identificación de la publicación que devolverá la función.
Entonces correrías media_sideload_image() para descargar la imagen de la url al sitio de wp, guarde el valor devuelto como una variable, que es un elemento html de la imagen, por ejemplo <img src="http:mywpsite/wp-content/....">
.
Elimina la variable para que solo te quede el src, por ejemplo. http:mywpsite/wp-content/....
y usa esto para adjunto_url_a_postid() que devolverá la identificación del archivo adjunto.
Con esto, tenemos todos los componentes necesarios para cumplir con nuestro objetivo. Ahora use la identificación de la publicación y la identificación del archivo adjunto para configurar las imágenes destacadas usando set_post_miniatura()
¡Eso es todo!
El código se vería un poco como
$post_id = wp_insert_post($array);//create new post and save its id
$img = media_sideload_image( $url, $post_id);//download image to wpsite from url
$img = explode("'",$img)[1];// extract http.... from <img src'http...'>
$attId = attachment_url_to_postid($img);//get id of downloaded image
set_post_thumbnail( $post_id, $attId );//set the given image as featured image for the post
-
Muchas gracias Estimado 🙂 me salvaste el tiempo.
– Arman H.
2 de marzo a las 11:06
davemac
La respuesta de @omer Farooq es útil, pero para ampliar eso y configurar la imagen como la imagen destacada para la publicación (como lo solicitó OP), puede hacer lo siguiente:
// will return the attachment id of the sideloaded img
$image_id = media_sideload_image( $image_url, $post_id, $filename, 'id' );
// set as featured image
set_post_thumbnail( $post_id, $image_id );
WordPress ya tiene una función integrada llamada media_sideload_image para exactamente este tipo de funcionalidad. Esta función descargará la imagen y la adjuntará a su publicación.
Entonces, supongamos que descarga todos los registros de csv a una matriz, y tiene 1000 índices, cada uno con 2 elementos “post_id” e “image_url”. Ahora la image_url del primer elemento estaría en $csv_items[0][‘image_url’]. Una vez que tenga esto, simplemente puede buscar la matriz y adjuntarla a las identificaciones de publicación relevantes.
<?php
foreach($csv_items as $csv_item){
$image = media_sideload_image($csv_item['image_url'], $csv_item['post_id']);
}?>
-
Esto adjuntará imágenes a la publicación, pero no configurará la imagen como una imagen destacada para la publicación, que es lo que solicitó el operador. Para ello, podemos utilizar el
$return
parámetro enmedia_sideload_image
y configúralo enid
. Esto nos dará la identificación del archivo adjunto, que podemos usar enset_post_thumbnail
para configurar la imagen como una imagen destacada para la publicación.– davemac
17 de diciembre de 2017 a las 4:41