Modificare la didascalia dell'immagine nell'editor visivo

16 mar 2017, 15:30:56
Visualizzazioni: 77
Voti: 0

Ancora una volta vorrei chiedere il vostro gentile aiuto.

In sostanza, voglio modificare la didascalia sotto le immagini nei singoli articoli. Invece di visualizzare la caption (post_excerpt), vorrei mostrare il titolo dell'immagine (post_title) in grassetto e la descrizione dell'immagine (post_content), in questo modo:
Soluzione

Con l'aiuto di @birgire ho ottenuto questo risultato utilizzando il filtro img_caption_shortcode (LINK). Purtroppo, lavorando con questa soluzione, ho scoperto che non è perfetta.

Di default, quando si inserisce un'immagine tramite l'editor visivo di WordPress, la didascalia viene inserita sotto l'immagine. Modificando l'immagine, questa didascalia può essere regolata individualmente (per questa singola istanza) se necessario, come mostrato qui: Modifica della didascalia

Il problema con l'uso del filtro img_caption_shortcode è che sostituisce il contenuto che verrebbe altrimenti restituito in ogni caso, rendendo impossibili le modifiche individuali (come descritto sopra). Vorrei mantenere il comportamento originale di WordPress in questo caso, ma comunque sostituire la didascalia inserita con il titolo e la descrizione dell'immagine.

Al momento non ho un punto di partenza su come ottenere questo. Immagino che devo trovare un modo per modificare l'output del testo che viene automaticamente inserito nell'editor visivo insieme all'immagine singola. Qualcuno può aiutarmi o indicarmi la direzione giusta? Qualsiasi tipo di aiuto è molto apprezzato. Grazie.

EDIT: Questo è il codice che sto attualmente utilizzando:

<?php
/**
 * Plugin Name: Didascalia Immagine Modificata
 * Description: Sostituisce la didascalia dell'immagine con titolo e descrizione
 * 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
Commenti

Per favore pubblica il codice che stai utilizzando attualmente così non dobbiamo seguire tutti i commenti nel thread precedente.

WebElaine WebElaine
16 mar 2017 18:46:04

Grazie per il tuo commento. Ho aggiunto il codice nel mio post originale.

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

Grazie, questo aiuta. Sembra che tu debba solo aggiungere un altro condizionale all'interno di if( is_a( $img, '\WP_Post' ) ): qualcosa come, if è impostata una didascalia per questa immagine specifica, mostra quella didascalia sovrascritta; else (il tuo codice originale che mostra il titolo e il contenuto).

WebElaine WebElaine
16 mar 2017 22:05:54

Puoi controllare la mia soluzione alternativa per le nuove immagini caricate qui. @HansWernersen

birgire birgire
28 mar 2017 13:57:16

Grazie per la tua risposta. Potrei modificare l'output tramite il tuo metodo rapido e sporco indirizzando l'ID specifico dell'immagine, ho capito bene? Sfortunatamente sarebbe un po' scomodo, poiché richiederebbe l'aggiunta di nuovo codice per ogni immagine di cui voglio cambiare la didascalia. Inoltre, sarebbe impossibile da fare quando sono coinvolti più utenti/autori (con ancora meno conoscenza di codifica rispetto a me). @birgire

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

Come fa Wordpress a ottenere questo risultato? Quando si aggiunge un'immagine a un post/pagina, la didascalia viene inserita automaticamente. Se modifico la didascalia dell'immagine all'interno del post/pagina, la didascalia inserita automaticamente viene cambiata solo per questa singola istanza. Posso emulare questo comportamento con il mio plugin? Qualcosa lungo le linee di quanto suggerito da @WebElaine: Se viene inserita una didascalia alternativa, mostrala, altrimenti mostra (in grassetto) il titolo dell'immagine e la descrizione dell'immagine. Non ho idea di come posso indirizzare tutti gli input modificati come si può vedere nella seconda immagine. Tutto l'aiuto è molto apprezzato, grazie!

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

Mi riferivo alla parte del filtro di quella risposta, non alla parte dell'aggiornamento SQL ;-) Dovrebbe funzionare per le nuove immagini. @HansWernersen

birgire birgire
28 mar 2017 18:03:53
Mostra i restanti 2 commenti