¿Cómo configurar la imagen destacada mediante programación desde la URL?

4 minutos de lectura

Tengo algunas identificaciones de publicaciones y quiero configurar las imágenes destacadas de estas publicaciones desde la misma URL.

Aquí está mi adición de códigos postales:

$catid = get_cat_ID("XX Cat");

$my_post = array(); 
$my_post['post_title'] = $title; 
$my_post['post_content'] = $description; 
$my_post['post_status'] = 'publish'; 
$my_post['post_author'] = 1; 
$my_post['post_category'] = array( $catid ); 

$post_id = wp_insert_post( $my_post );

Ejemplo: post_id = 1 Quiero configurar la imagen destacada en: ejemplo.com/imagen.png

¿Cómo puedo hacer esto?

avatar de usuario
hassan saeed

Puede configurar una imagen como miniatura destacada de una publicación cuando está en su biblioteca de medios. Para agregar una imagen en su biblioteca de medios, debe cargarla en su servidor.

prueba este código:

// Add Featured Image to Post
$image_url="http://s.wordpress.org/style/images/wp-header-logo.png"; // Define the image URL here
$image_name="wp-header-logo.png";
$upload_dir       = wp_upload_dir(); // Set upload folder
$image_data       = file_get_contents($image_url); // Get image data
$unique_file_name = wp_unique_filename( $upload_dir['path'], $image_name ); // Generate unique name
$filename         = basename( $unique_file_name ); // Create image file name

// Check folder permission and define file location
if( wp_mkdir_p( $upload_dir['path'] ) ) {
  $file = $upload_dir['path'] . "https://stackoverflow.com/" . $filename;
} else {
  $file = $upload_dir['basedir'] . "https://stackoverflow.com/" . $filename;
}

// Create the image  file on the server
file_put_contents( $file, $image_data );

// Check image file type
$wp_filetype = wp_check_filetype( $filename, null );

// Set attachment data
$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title'     => sanitize_file_name( $filename ),
    'post_content'   => '',
    'post_status'    => 'inherit'
);

// Create the attachment
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );

// Include image.php
require_once(ABSPATH . 'wp-admin/includes/image.php');

// Define attachment metadata
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );

// Assign metadata to attachment
wp_update_attachment_metadata( $attach_id, $attach_data );

// And finally assign featured image to post
set_post_thumbnail( $post_id, $attach_id );

URL de referencia: http://www.wpexplorer.com/wordpress-featured-image-url/

Modificado como su requisito: o ese propósito ignore el estándar de WordPress y cargue su imagen única de todas las publicaciones en su carpeta personalizada y agregue esta ruta de imagen o dirija la URL de la imagen externa en la publicación como campo meta de atributo adicional y cuando muestre la publicación en su tema, simplemente use su img con la ayuda de la identificación de la publicación. código de demostración: para configurar la imagen

<?php
    update_post_meta ( 7, 'imgkey', 'www.url.path' );//7 is post id
?>

para obtener una imagen en la página de su tema donde desea mostrarla

<?php
    $img_value = get_post_meta( get_the_ID(), 'imgkey', true );
?>
<img src="<?php echo $img_value?>">

Tenga en cuenta que si es nuevo en los metacampos personalizados de publicaciones de WordPress, lea este artículo:
https://codex.wordpress.org/Custom_Fields

o
artículo no oficial sobre campos personalizados: https://premium.wpmudev.org/blog/creating-custom-fields-manually

  • Quiero usar una sola imagen. Pero este código está agregando una imagen más de una… Tampoco quiero agregar diferentes tamaños de imagen. Quiero subir imagen que tiene que ser solo en tamaño original…

    – Cris Denolatter

    07/01/2017 a las 18:45

  • estoy actualizando mi respuesta

    – Hassan Said

    7 de enero de 2017 a las 19:02

  • Funciona perfectamente.

    – Faisal Ramzán

    30 de junio de 2020 a las 13:22

  • Funciona según lo previsto. Una de las mejores respuestas que he encontrado. Notas de comentarios de On Point y Nice. No necesitarías nada más.

    – Karue Benson Karue

    12 de julio de 2021 a las 8:15

  • Gracias @HassanSaeed, acabas de ahorrarme al menos una hora preciosa en mi primer complemento de WP.

    – Rey Gwada

    11 oct 2021 a las 17:03

si tiene que cargar una imagen y luego asignarla como miniatura de la publicación, la forma más rápida es usar media_sideload_image y luego set_post_thumbnail

https://developer.wordpress.org/reference/functions/media_sideload_image/

$url     = "http://url-of-the-image.jpg";
$post_id = [post id]
$desc    = "image description";

$image = media_sideload_image( $url, $post_id, $desc,'id' );

set_post_thumbnail( $post_id, $image );

  • Ahora bien, esta es la verdadera respuesta.

    – markmoxx

    1 de febrero de 2021 a las 9:55

  • Buena respuesta, pero lo único que debe tener en cuenta aquí es que necesita tener una extensión de archivo en url. Si tiene alguna URL de API que no tiene extensión de archivo, esto no funcionará.

    – Antonio

    6 de mayo de 2021 a las 7:44

  • @Antonio Puede usar la función download_url ($ image_url) desarrollador.wordpress.org/reference/functions/download_url

    – Sunil Prajapati

    16 abr a las 6:53

Solo para complementar la respuesta de @Naraj, si está trabajando en un archivo externo, recuerde agregar:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

si no agrega eso, recibirá un mensaje de error que dice que media_sideload_image no está definido.

¿Ha sido útil esta solución?