¿Cómo puedo obtener un tamaño de imagen diferente, si todo lo que tengo es el enlace?

2

Por varias razones, no puedo usar la funcionalidad de miniaturas incorporada de Wordpress.

Lo que quiero hacer en su lugar es usar la primera imagen de la publicación como la miniatura.

Esto es lo que encontré en el códice: Muestra la primera imagen asociada con la publicación .

Sin embargo, el problema con eso es que si la publicación tiene varias imágenes, pero la primera imagen de la publicación no es la que se cargó primero, terminarás obteniendo la segunda imagen en lugar de la primera.

Entonces, decidí usar algo similar a este enfoque , que usa una expresión regular para analizar the_content para encontrar la primera publicación.

Esto funciona bien, pero termino con el tamaño de imagen que se usó en la publicación, y solo quiero el tamaño de Miniatura.

Entonces, aquí está la pregunta: Si tengo un enlace a una imagen, ¿hay alguna forma de obtener un tamaño diferente?

Parece que lo que necesito es obtener el ID del archivo adjunto, de modo que pueda obtener el tamaño de la imagen con esto:

wp_get_attachment_link( $id, 'thumbnail' );

El problema es, ¿cómo obtengo una identificación si todo lo que tengo es la URL ?

    
pregunta Joseph Silber 19.01.2012 - 03:16

3 respuestas

6

Decidí usar esto, que se basa en la respuesta de @ AndresYanez:

function get_image_id_by_link($link)
{
    global $wpdb;

    $link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link);

    return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid='$link'");
}

Esto es mucho más sucinto (ya que no salta a través de los aros de quitar primero la extensión y luego volver a agregarla), y es un poco más preciso (ya que se escapa el . y la consulta es el caso) sensible).

    
respondido por el Joseph Silber 29.01.2012 - 21:07
1
function get_attachment_id_from_src ($src) {
    global $wpdb;

    $reg = "/-[0-9]+x[0-9]+?.(jpg|jpeg|png|gif)$/i";

    $src1 = preg_replace($reg,'',$src);

    if($src1 != $src){
        $ext = pathinfo($src, PATHINFO_EXTENSION);
        $src = $src1 . '.' .$ext;
    }

    $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$src'";
    $id = $wpdb->get_var($query);

    return $id;
}

Créditos a pathorsley: enlace

    
respondido por el Andres Yanez 19.01.2012 - 03:35
0

El Códice es una fuente válida

A veces El Códice no está tan mal ...

Mostrar archivos adjuntos para la publicación actual

Este es un ejemplo modificado ligeramente del Codex.

<?php
// Do this inside The Loop (where $post->ID is available).
global $post;
$args = array( 
     'post_type'    => 'attachment'
    ,'numberposts'  => 1
    ,'post_status'  => null
    ,'post_parent'  => $post->ID
    ,'orderby'      => 'ID'
    ,'order'        => 'ASC' 
); 
$attachments = get_posts( $args );
if ( $attachments ) 
{
    foreach ( $attachments as $attachment ) 
    {
        echo apply_filters( 'the_title' , $attachment->post_title );
        the_attachment_link( $attachment->ID , false );
    }
}
?>

Sea inteligente: use el sistema detrás del sistema

Los cambios en el ejemplo del Codex son fáciles: el numberposts se establece en 1, el valor orderby es el ID y se clasifica ASC para obtener primero la publicación con el ID más bajo.

Por lo que aquí se explica por qué es inteligente : las ID se dan una después de la otra, por lo que la primera publicación cargada tendrá la ID más baja.

En el ejemplo anterior, simplemente puedes intercambiar la última función con wp_get_attachment_link() y guardarla en alguna var, que puedes reutilizar más tarde.

    
respondido por el kaiser 19.01.2012 - 05:15

Lea otras preguntas en las etiquetas