Ajustar el pie de foto dentro del editor visual

16 mar 2017, 15:30:56
Vistas: 77
Votos: 0

Una vez más me gustaría pedirles su amable ayuda.

Básicamente quiero ajustar el pie de foto debajo de las imágenes individuales en las publicaciones. En lugar de mostrar el texto alternativo (post_excerpt), me gustaría mostrar el título de la imagen (post_title) (en negrita) y la descripción de la imagen (post_content), similar a esto:
Solución

Con la amable ayuda de @birgire logré eso, usando el filtro img_caption_shortcode (ENLACE). Desafortunadamente, al trabajar con esta solución, descubrí que no es perfecta.

Por defecto, cuando se inserta una imagen individual a través del editor visual de Wordpress, el pie de foto se inserta debajo de la imagen. Al editar la imagen, este pie se puede ajustar individualmente (para esta instancia específica) si es necesario, como se muestra aquí: Cambiar pie de foto

El problema al usar el filtro img_caption_shortcode es que reemplaza el contenido que normalmente se devolvería sin importar qué, lo que significa que los ajustes individuales (como se describió anteriormente) son imposibles. Me gustaría conservar el comportamiento original de Wordpress en este caso, pero aún así reemplazar el pie de foto insertado con el título y descripción de la imagen.

Hasta ahora, no tengo un punto de partida sobre cómo lograr eso. Imagino que debo encontrar una manera de cambiar el texto de salida que se inserta automáticamente en el editor visual junto con la imagen individual. ¿Alguien puede ayudarme con eso o indicarme la dirección correcta? Cualquier tipo de ayuda es muy apreciada. Gracias.

EDIT: Este es el código que estoy usando actualmente:

<?php
/**
 * Plugin Name: Pie de imagen modificado
 * Description: Sobrescribe el pie de imagen con el título y descripción de la imagen
 * Plugin URI:  https://wordpress.stackexchange.com/a/258612/26350
 */

namespace WPSE\Q258586;

add_action( 'init', [ new Caption, 'init' ] );

class Caption
{
    private $attachment_id ;

    public function init()
    {
        add_filter( 'img_caption_shortcode',    [ $this, 'shortcode' ], 999, 3 );
        add_filter( 'shortcode_atts_caption',   [ $this, 'atts' ],      999, 3 );
    }
    public function shortcode( $output, $attr, $content )
    {
        if( isset( $attr['id'] ) && preg_match( '/attachment_\d+/i', $attr['id' ] ) )
            $this->attachment_id = str_replace( 'attachment_', '', $attr['id'] );

        return $output;
    }

    public function atts( $atts, $pair )
    {
        if( ! $this->attachment_id  )
            return $atts;

        $img = get_post( $this->attachment_id );

        if( is_a( $img, '\WP_Post' ) )
        {
            $atts['caption'] = sprintf( 
                '<span class="title-css">%s</span>
                 <br><span class="description-css">%s</span>',
                esc_html( $img->post_title ),
                esc_html( $img->post_content )
            );
        }

        $this->id = null;

        return $atts;
    }
}
Hans Wernersen
Hans Wernersen
3
Comentarios

Por favor publica el código que estás usando actualmente para no tener que revisar todos los comentarios en el hilo anterior.

WebElaine WebElaine
16 mar 2017 18:46:04

Gracias por tu comentario. He añadido el código en mi publicación original.

Hans Wernersen Hans Wernersen
16 mar 2017 19:59:32

Gracias, eso ayuda. Parece que solo necesitas añadir otro condicional dentro de if( is_a( $img, '\WP_Post' ) ): algo como, if hay un caption establecido para esta imagen en particular, muestra ese caption sobrescrito; else (tu código original que muestra el título y el contenido).

WebElaine WebElaine
16 mar 2017 22:05:54

Puedes consultar mi solución alternativa para imágenes recién subidas aquí. @HansWernersen

birgire birgire
28 mar 2017 13:57:16

Gracias por tu respuesta. Entiendo que podría cambiar el resultado mediante tu método rápido y sucio al dirigirme al ID específico de la imagen, ¿es correcto? Desafortunadamente sería un poco inconveniente, ya que requiere agregar nuevo código para cada imagen cuyo subtítulo quiero cambiar. Además, sería imposible de hacer cuando hay múltiples usuarios/autores involucrados (con incluso menos conocimientos de programación que yo). @birgire

Hans Wernersen Hans Wernersen
28 mar 2017 16:49:59

¿Cómo hace Wordpress para lograr esto? Cuando se añade una imagen a una entrada/página, el subtítulo se inserta automáticamente. Si edito el subtítulo de la imagen dentro de la entrada/página, el subtítulo insertado automáticamente se cambia solo para esta instancia. ¿Puedo emular ese comportamiento con mi plugin? Algo en la línea de lo que sugirió @WebElaine: Si se introduce un subtítulo alternativo, mostrarlo; de lo contrario mostrar (en negrita) el título de la imagen y la descripción de la imagen. No tengo idea de cómo puedo abordar todos los cambios de entrada como se ve en la segunda imagen. ¡Toda ayuda es muy apreciada, gracias!

Hans Wernersen Hans Wernersen
28 mar 2017 16:56:28

Me refería a la parte del filtro de esa respuesta, no a la parte de actualización de SQL ;-) Debería funcionar para imágenes nuevas. @HansWernersen

birgire birgire
28 mar 2017 18:03:53
Mostrar los 2 comentarios restantes