¿Establecer imagen posterior a la miniatura (con php)?

3

Un sitio que he heredado usa campos personalizados para establecer una ruta para las miniaturas. Idealmente, me gustaría cambiar esto para usar la imagen incorporada posterior a la miniatura. ¿Hay alguna manera de establecer de manera procedimental la miniatura posterior?

Gracias

    
pregunta Michael Watson 17.08.2011 - 14:41

1 respuesta

9

El problema será la diferencia en los datos necesarios para configurar la miniatura de la publicación (un ID de archivo adjunto) y lo que probablemente esté en el campo personalizado: una URL.

La forma en que lo voy a sugerir es muy descuidada: agrega más archivos adjuntos a WordPress. Una mejor manera podría ser escribir una consulta SQL personalizada en la que tome el ID del archivo adjunto de la URL del campo personalizado. Esto funciona, puede que no sea la mejor manera.

Primero, obtén todos los mensajes:

// get an array of all the posts
    $posts = get_posts(
        array( 
            'numberposts'   => -1,
            'post_type'     => 'post'
        )
    );

    // bail if our get_posts() call failed
    if( empty( $posts ) ) return;

Luego los recorreremos, agarrando la URL de la imagen original y luego insertándola como un nuevo archivo adjunto. Finalmente, actualizaremos la tabla de postmeta para reflejar nuestra nueva ID de miniaturas y eliminar el antiguo campo personalizado de miniaturas de publicaciones.

foreach( $posts as $p )
    {
        // change your old thumbnail key!
        $image_url = get_post_meta( $p->ID, 'your_old_thumbnail_key', true );

        // no thumbnail? on to the next
        if( empty( $image_url ) ) continue;

        // find our mime type for later
        $filetype = wp_check_filetype( $image_url );

        // Set up an array of args for our new attachment
        $args = array(
            'post_mime_type' => $filetype['type'],
            'post_title'     => esc_attr( $p->post_title ), // you may want something different here
            'post_content'   => '',
            'post_status'    => 'inherit'
        );

        // Insert the attachment!
        $thumb_id = wp_insert_attachment( $args, $image_url,  $p->ID );

        // gotta set up some meta data (height, width, etc)
        // our functions are int his file, so we have to include it
        require_once(ABSPATH . 'wp-admin/includes/image.php');
        $metadata = wp_generate_attachment_metadata( $thumb_id, $image_url );
        wp_update_attachment_metadata( $thumb_id, $metadata );

        // Finally! set our post thumbnail
        update_post_meta( $p->ID, '_thumbnail_id', $thumb_id );

        // Uncomment the next line to delete the old custom field
        //delete_post_meta( $p->ID, 'your_old_thumbnail_key', $image_url );
    }

Eso es todo!

Aquí está como un complemento: enlace

    
respondido por el chrisguitarguy 17.08.2011 - 18:59

Lea otras preguntas en las etiquetas