Definir pós-miniatura (com php)?

3

Um site que eu herdei usa campos personalizados para definir um caminho para miniaturas. Idealmente, eu gostaria de mudar isso para usar o post-thumbnail embutido. Existe uma maneira de definir processualmente a pós-miniatura?

Obrigado

    
por Michael Watson 17.08.2011 / 14:41

1 resposta

9

O problema será a diferença nos dados necessários para definir a miniatura da postagem (um ID de anexo) e o que provavelmente está no campo personalizado: uma URL.

A maneira que vou sugerir é muito desleixada: adiciona mais anexos ao WordPress. Uma maneira melhor seria escrever uma consulta SQL personalizada em que você pega o ID do anexo do URL do campo personalizado. Isso funciona, só pode não ser o melhor caminho.

Primeiro, obtenha todas as postagens:

// 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;

Em seguida, vamos percorrê-los, pegando o URL original da imagem e inserindo-o como um novo anexo. Por fim, atualizaremos a tabela postmeta para refletir nosso novo ID de miniatura e nos livraremos do antigo campo personalizado de miniatura de postagem.

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 );
    }

É isso!

Aqui está como um plugin: enlace

    
por chrisguitarguy 17.08.2011 / 18:59