Agregar imagen destacada a una publicación insertada programáticamente en WordPress

5 abr 2013, 20:03:19
Vistas: 18.5K
Votos: 5

Quiero insertar una publicación programáticamente, así que aquí está el código para agregar una:

global $user_ID;
$new_post = array(
    'post_title' => 'Mi Nueva Publicación',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

¿Cómo agregar una imagen destacada a la publicación y activarla para pruebas?

1
Comentarios

¿Qué quieres decir con activarlo para pruebas?

Sunyatasattva Sunyatasattva
5 abr 2013 20:33:18
Todas las respuestas a la pregunta 3
7

La miniatura de la entrada se guarda simplemente como metadato de la entrada con la clave: _thumbnail_id. Entonces, después de insertar la entrada y obtener el ID de la misma, puedes establecer el metadato para esa entrada. El $thumbnail_id es simplemente el ID de la imagen que deseas establecer como miniatura, depende de ti ya que no puedo deducir de tu pregunta cuál debería ser este valor.

global $user_ID;
$new_post = array(
    'post_title' => 'Mi Nueva Entrada',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

if( ! is_wp_error( $post_id ) )
       update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
5 abr 2013 20:45:29
Comentarios

¿Cómo puedo probar este código? Si lo convierto en una función, ¿dónde debería llamarlo?

10wtaylor 10wtaylor
7 abr 2013 19:25:05

No lo sé. Mi intención era solo hacerte saber que podrías actualizar los metadatos de la publicación después de como sea que estés insertando el post.

helgatheviking helgatheviking
7 abr 2013 21:47:59

¡La función de imagen destacada encontrará automáticamente cualquier metadato que contenga una imagen!

10wtaylor 10wtaylor
9 abr 2013 12:01:52

Eso no es lo que preguntaste. Preguntaste cómo establecer programáticamente una imagen destacada al insertar una publicación. Lo haces configurando la clave meta _thumbnail_id para esa publicación. Si no era eso lo que querías decir, por favor revisa tu pregunta para mayor claridad.

helgatheviking helgatheviking
9 abr 2013 12:23:29

Entonces, ¿para qué sirve la función update_post_meta, si la función de imagen destacada no puede recuperar la imagen de allí!

10wtaylor 10wtaylor
9 abr 2013 14:09:03

¿Eh? La clave meta _thumbnail_id es exactamente lo que usa la función the_post_thumbnail() para recuperar el ID de la imagen destacada. Puedes verificarlo en wp-includes/post-thumbnail-template.php

helgatheviking helgatheviking
9 abr 2013 14:35:54

Gracias Helga, esto era lo que estaba diciendo en el comentario anterior.

10wtaylor 10wtaylor
9 abr 2013 15:39:16
Mostrar los 2 comentarios restantes
0

utiliza la función set_post_thumbnail,

//$file es la ruta al archivo subido (por ejemplo como se establece en el array $_FILE del archivo enviado)
//$filename es el nombre del archivo
//primero necesitamos subir el archivo a la carpeta de uploads de WordPress
$upload_file = wp_upload_bits($filename, null, @file_get_contents($file));
if(!$upload_file['error']) {
  //si es exitoso, inserta el nuevo archivo en la biblioteca de medios (crea un nuevo tipo de post attachment)
  $wp_filetype = wp_check_filetype($filename, null );
  $attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_parent' => $post_id,
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit'
  );
  //wp_insert_attachment( $attachment, $filename, $parent_post_id );
  $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id );
  if (!is_wp_error($attachment_id)) {
     //si el post de attachment se creó correctamente, lo inserta como thumbnail al post $post_id
     require_once(ABSPATH . "wp-admin" . '/includes/image.php');
     //wp_generate_attachment_metadata( $attachment_id, $file ); para imágenes
     $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
     wp_update_attachment_metadata( $attachment_id,  $attachment_data );
     set_post_thumbnail( $post_id, $attachment_id );
   }
}
13 jun 2017 17:34:46
1
-1
 $wp_filetype = wp_check_filetype(basename($filename), null );
  $wp_upload_dir = wp_upload_dir();
  $attachment = array(
     'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), 
     'post_mime_type' => $wp_filetype['type'],
     'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
     'post_content' => '',
     'post_status' => 'inherit'
  );
  $attach_id = wp_insert_attachment( $attachment, $filename, $post_id );     
  require_once(ABSPATH . 'wp-admin/includes/image.php');
  $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
  wp_update_attachment_metadata( $attach_id, $attach_data );

Para más información consulta este enlace https://developer.wordpress.org/reference/functions/wp_insert_attachment/

5 abr 2013 20:43:14
Comentarios

esto solo cargará un archivo en la biblioteca de medios y lo adjuntará a la entrada, pero no actualizará realmente la miniatura de la entrada.

Aurovrata Aurovrata
20 ene 2021 13:16:06