Contenido

Añade una imagen personalizada a tus posts

22 jul

+ 12

Esta mañana con Ignacio Lledó hemos llegado a desarrollar un sistema con el que hacer que la primera imagen subida a nuestro post, pase ser la foto del post. Y todo ello sin plugins.

Antecendentes

Como vemos en la imagen queremos mostrar una imagen, en este caso en el sidebar de nuestro WordPress y queremos ver una imagen relacionada al artículo. Inicialmente se hacía de forma manual, el usuario insertaba la URL de la imagen en un campo personalizado al que le dama un nombre ya pactado con el resto de usuarios para así poder repescarlo en el sidebar.

auto_meta

Una vez insertada la URL, unicamente había que indicar en el HTML del sidebar.php de nuestro theme la URL de la imagen que queremos que aparezca.

auto_meta2

....
<ul class="sidebar">
<li class="post">
<img src="<?php echo get_post_meta($post->ID, 'KEY_DEFINIDA', true); ?>" alt="<?php the_title(); ?>" class="align_left" />
<?php the_excerpt('Leer más'); ?>
</li>
....

El sistema funciona, pero ¿por que no hacerlo más fácil?

Haciendoló más fácil al usuario

Para empezar dejamos el theme igual que el sistema anterior, seguimos leyendo la información de la misma KEY_DEFINIDA con la que los usuarios ya se han familiarizado. Ahora tendremos que hacerles el trabajo nosotros :D

Para añadir la funcionalidad podemos elegir uno de los 3 posibles sistemas de los que podemos hacer uso para añadir funcionalidades a WordPress.

  1. Mediante un plugin
  2. En el fichero my-hacks.php
  3. En el fichero functions.php de nuestro theme

En este caso hemos optado por el fichero functions.php de nuestro theme ya que esta funcionalidad está ligada completamente al diseño y si cambiamos de diseño, quizas no necesitemos que siga ejecutandosé.

Así que añadimos el siguiente código:

// Cambia el nombre del META
define ("META_KEY", "KEY_DEFINIDA");

function auto_add_meta_images($postID) {
    // Solo añadirá la primera imagen como Meta
    $post = get_post( $postID );
    if (!get_post_meta($postID, META_KEY, true))
        add_post_meta($post->post_parent, META_KEY, $post->guid);
    return $postID;
}

add_action('add_attachment', 'auto_add_meta_images');

¿Como funciona?

Con este sistema, únicamente tendremos que dedicarnos a subir imágenes mediante el sistema de subidas de WordPress 2.5 o superior y el automáticamente almacenará en el Campo personalizado definido previamente con la dirección de la primera imagen que subamos.

Conclusión

Con wordpress podemos hacer lo que queramos y la imaginación es el límite. Las cosas más simples a veces pueden serlo todavía más :D

  • Andrés, esta opción es genial y lo quería utilizar.

    Tengo una duda que seguro que a ti te resultará muy sencilla: he ido poniendo manualmente a lo largo de los últimos meses sólo la cadena /wp-content/uploads… y lo que siga a cada imagen en el custom value, porque en el theme lo tengo definido así, ya que me pone por defecto antes de esa cadena la url de la web (con el código ).

    La pregunta es si con el sistema que acabas de explicar se puede hacer que sólo ponga como valor lo que sigue a la url de la web, o si es que no se puede hacer saber cómo hacer un buyscar y reemplazar en el phpmyadmin para cambiar sólo en los campos en los que se incluye el custom value para cambiarlos todos a la vez y cambiar el theme.

    Gracias de antemano.

  • @David: Este sistema te introducirá la imagen con la ruta absoluta a tu blog, que en principio es lo ideal para tema de feeds, enlaces externos,…

    Podrías usar el comando replace de SQL para cambiar los antíguos desde el PhpMyAdmin. El único cambio es que tendrás que cambiar la tabla a la que se hacen los cambios.

    Los campos personalizados se meten en wp_postmeta.

  • Sinceramente, no soy informatico ni programador y me da que puedo pifiarla… sería mucho pedir que pusieras la cadena SQL que poner en el phpmyadmin para cambiarlo?? si no, no pasa nada, a ver si encuentro algo por ahí… buff que miedo.

  • @David: Debería ser algo así.

    update wp_postmeta set meta_value = replace(meta_value,'/wp-content/uploads','http://www.TUBLOG/wp-content/uploads');

    Solo tendrías que poner TUBLOG la dirección que toque y revisar que el la tabla wp_postmeta exista.

  • Andrés, muchas gracias por tu ayuda. Voy a probarlo ahora mismo.

  • Interesante y muy util. Con esto se puede expander mas las posibilidades de hacer mas cosas :D

  • implementado y funcionando correctamente. Muchas gracias Andrés!

    Por cierto, habría alguna posiblidad (plugin o hack) de poder “escanear” las fotos que estuvieran adjuntadas a los correspondientes posts (en la carpeta uploads de wordpress o en servicios externos) y automáticamente te creara la correspondiente miniatura de la imagen.

    Un saludo!

  • Andrés, una pregunta acerca de tu agradecida ayuda de la sentencia en SQL, a ver si puedes aclarar please… resulta que en esa tabla (que si existe) hay otras cosas que también tienen esa cadena, y me da miedo que lo sustituya también y deje de funcionar algo más. Por ejemplo:

    en el campo “meta_key” existe un valor “_wp_attached_file” y en el “meta_value” un “/var/www/vhosts/TUBLOG/httpdocs/wp-content/uploads//2008/07/sugerencia-4-retocada.jpg”

    Hay alguna manera de que sólo sustituya cuando el meta_key sea igual a “Image” ????

    Gracias anticipadas y perdona por el asalto…

  • Hay alguna forma de llamar el tamaño MEDIO o MINIATURA que crea WP al subir una imagen automaticamente?

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.