es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inserta una entrada de WordPress utilizando wp_insert_post y adjunta la imagen destacada.

Intenté insertar una publicación utilizando la función wp_insert_post en el archivo functions.php, la publicación se insertó correctamente, pero no la imagen adjunta para la imagen destacada.

Alguien puede ayudar con esto, ¿qué hay de malo en mi código a continuación?

$post_if = $wpdb->get_var("SELECT count(post_title) FROM $wpdb->posts WHERE post_title like '$title'");
if($post_if < 1){
    // código
    $new_post = array(
        'post_title' => $title,
        'post_content' => $contents,
        'post_status' => 'publicar',
        'post_author' => 1,
        'post_type' => 'post'
    );

    $post_id = wp_insert_post($new_post); 
    $image = "https://fake.org/image.jpg";


    $media = media_sideload_image($image, $post_id); //$post_id from wp_insert_post


    // por lo tanto, debemos encontrarlo para poder establecerlo como ID destacado
    if(!empty($media) && !is_wp_error($media)){
        $args = array(
            'post_type' => 'attachment',
            'posts_per_page' => -1,
            'post_status' => 'any',
            'post_parent' => $post_id
        );

        // referencia la nueva imagen para establecer como destacada
        $attachments = get_posts($args);

        if(isset($attachments) && is_array($attachments)){
            foreach($attachments as $attachment){
                // obtener la fuente de las imágenes de tamaño completo (sin tonterías de 300x150 en la ruta)
                $image = wp_get_attachment_image_src($attachment->ID, 'full');
                // determinar si en la imagen $media que creamos, existe la cadena de la URL
                if(strpos($media, $image[0]) !== false){
                    // si es así, encontramos nuestra imagen. establecerla como miniatura
                    set_post_thumbnail($post_id, $attachment->ID);
                    // solo queremos una imagen
                    break;
                }
            }
        }
    }
}

He intentado muchos tutoriales que encontré en la web, pero nada funciona.

Por favor, cualquier persona que tenga experiencia con esto puede compartir una solución.

Muchas gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar con la función media_sideload_image, que se utiliza para cargar la imagen y adjuntarla a la publicación. Podrías intentar usar en su lugar la función wp_insert_attachment para insertar el archivo adjunto y luego establecerlo como imagen destacada utilizando set_post_thumbnail. Aquí tienes un ejemplo de código:

    $nueva_publicacion = array(
        'post_title' => $titulo,
        'post_content' => $contenido,
        'post_status' => 'publicar',
        'post_author' => 1,
        'post_type' => 'publicación'
    );
    
    $id_publicacion = wp_insert_post($nueva_publicacion);
    
    $url_imagen = 'https://falso.org/imagen.jpg';
    $nombre_imagen = basename($url_imagen);
    
    // Descargar archivo de imagen
    $tmp = download_url($url_imagen);
    
    // Establecer variables para el almacenamiento
    // arreglar el nombre del archivo para las cadenas de consulta
    $partes = explode('?', $nombre_imagen);
    $nombre_imagen = $partes[0];
    $directorio_subidas = wp_upload_dir();
    $ruta_archivo = $directorio_subidas['path'] . '/' . $nombre_imagen;
    
    // Escribir el archivo
    file_put_contents($ruta_archivo, file_get_contents($tmp));
    
    // Comprobar el tipo de archivo. Lo utilizaremos como 'post_mime_type'.
    $tipo_archivo = wp_check_filetype($nombre_imagen, null);
    
    // Establecer datos adjuntos
    $adjunto = array(
        'post_mime_type' => $tipo_archivo['type'],
        'post_title' => sanitize_file_name($nombre_imagen),
        'post_content' => '',
        'post_status' => 'heredar'
    );
    
    // Crear el archivo adjunto
    $id_adjunto = wp_insert_attachment($adjunto, $ruta_archivo, $id_publicacion);
    
    // Establecer como imagen destacada
    set_post_thumbnail($id_publicacion, $id_adjunto);
    
    // Incluir la imagen en la biblioteca multimedia
    require_once ABSPATH . 'wp-admin/includes/image.php';
    $datos_adjunto = wp_generate_attachment_metadata($id_adjunto, $ruta_archivo);
    wp_update_attachment_metadata($id_adjunto, $datos_adjunto);
    

    Este código descarga la imagen utilizando download_url, la almacena en el directorio wp-content/uploads utilizando file_put_contents, crea un archivo adjunto utilizando wp_insert_attachment, lo establece como imagen destacada utilizando set_post_thumbnail, y luego incluye la imagen en la biblioteca multimedia utilizando wp_generate_attachment_metadata y wp_update_attachment_metadata.

Comments are closed.