A veces es necesario agregar dinámicamente una imagen destacada a una publicación o un tipo de publicación personalizada desde otro servidor que el que está ejecutando su instalación de WordPress. Y se enfrenta a un problema común: ¿cómo hacerlo?
Por supuesto, en este caso, debe tomar la imagen destacada del segundo servidor, descargarla a su propio servidor, en la carpeta de carga, y asignarla a la publicación correcta. En el primer paso vamos a crear una nueva publicación de forma dinámica y luego nos ocuparemos de la imagen destacada.
Paso 1: crea una publicación de forma dinámica
Para crear una publicación de forma dinámica, debe utilizar el wp_insert_post () función. Puede colocar el código a continuación en una declaración «SI»; de lo contrario, cada vez que se carga una página, se creará una nueva publicación. No es tan útil.
// Register Post Data
$post = array();
$post['post_status'] = 'publish';
$post['post_type'] = 'post'; // can be a CPT too
$post['post_title'] = 'My New Post';
$post['post_content'] = 'My new post content';
$post['post_author'] = 1;
// Create Post
$post_id = wp_insert_post( $post );
Ejecutar este código simplemente creará una nueva publicación. Ahora es el momento de agregar la imagen destacada.
Paso 2: agregue la imagen destacada
Para agregar la imagen destacada desde una URL, tenemos que usar algunas funciones de WordPress:
- wp_upload_dir () : para recuperar la ruta de la carpeta del cargador
- wp_mkdir_p () : para crear una carpeta y establecer permisos
- wp_check_filetype () : para comprobar el formato del archivo adjunto
- sanitize_file_name () : para formatear el nombre del archivo adjunto
- wp_insert_attachment () : para crear un archivo adjunto
- wp_generate_attachment_metadata () : para generar metadatos de adjuntos
- wp_update_attachment_metadata () : para actualizar los metadatos del adjunto
- set_post_thumbnail () : para asignar un archivo adjunto como imagen destacada de la publicación
Y ahora aquí está el código. Comenté cada acción para que pueda ver exactamente lo que sucede cuando se ejecuta este script.
// 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'] . '/' . $filename;
} else {
$file = $upload_dir['basedir'] . '/' . $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 );
Lo interesante de este código es que puede colocarlo en un bucle. Por ejemplo, para importar publicaciones desde un archivo CSV o un archivo XML. Esto es realmente poderoso y realmente útil, pero no olvide una cosa: nunca use este script en su archivo functions.php sin colocar una etiqueta condicional antes, de lo contrario, obtendrá cientos de nuevas publicaciones creadas en cuestión de minutos.
¿Le resultó útil este fragmento? ¡Deje un comentario y cuéntenos qué creó a partir de este fragmento!