Ajustarea textului de subtitrare al imaginii în editorul vizual

16 mar. 2017, 15:30:56
Vizualizări: 77
Voturi: 0

Încă o dată, aș dori să vă rog ajutorul vostru.

În principiu, doresc să ajustez subtitrarea imaginii de sub imaginile din articole. În loc să afișez subtitrarea (post_excerpt), aș dori să afișez titlul imaginii (post_title) (bold) și descrierea imaginii (post_content), similar cu aceasta:
Soluție

Cu ajutorul lui @birgire, am reușit să implementez aceasta folosind filtrul img_caption_shortcode (LINK). Din păcate, lucrând cu această soluție, am descoperit că nu este perfectă.

În mod implicit, când inserezi o imagine în editorul vizual WordPress, subtitrarea este inserată sub imagine. Când editezi imaginea, această subtitrare poate fi ajustată individual (pentru această instanță specifică) dacă este necesar, așa cum se arată aici: Modificarea subtitrării

Problema cu folosirea filtrului img_caption_shortcode este că înlocuiește conținutul care ar fi returnat în mod normal, indiferent de circumstanțe, ceea ce înseamnă că ajustările individuale (cum am descris mai sus) devin imposibile. Aș dori să păstrez comportamentul original al WordPress în acest caz, dar totuși să înlocuiesc subtitrarea inserată cu titlul și descrierea imaginii.

Momentan, nu am un punct de plecare pentru a realiza acest lucru. Îmi imaginez că trebuie să găsesc o metodă de a schimba textul care este inserat automat în editorul vizual împreună cu imaginea. Poate cineva să mă ajute sau să mă îndrume în direcția corectă? Orice fel de ajutor este apreciat. Mulțumesc.

EDIT: Acesta este codul pe care îl folosesc în prezent:

<?php
/**
 * Plugin Name: Subtitrare Imagine Modificată
 * Description: Suprascrie Subtitrarea Imaginii Cu Titlul Și Descrierea
 * 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
Comentarii

Te rog să postezi codul pe care îl folosești în prezent, astfel încât să nu trebuiască să parcurgem toate comentariile din discuția anterioară.

WebElaine WebElaine
16 mar. 2017 18:46:04

Mulțumesc pentru comentariu. Am adăugat codul în postarea mea originală.

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

Mulțumesc, asta ajută. Se pare că trebuie doar să adaugi o altă condiție în interiorul lui if( is_a( $img, '\WP_Post' ) ): ceva de genul, if este setată o legendă pentru această imagine specifică, afișează acea legendă suprascrisă; else (codul tău original care afișează titlul și conținutul).

WebElaine WebElaine
16 mar. 2017 22:05:54

Puteți verifica soluția alternativă pentru imaginile încărcate recent aici. @HansWernersen

birgire birgire
28 mar. 2017 13:57:16

Vă mulțumesc pentru răspuns. Aș putea modifica rezultatul prin metoda dumneavoastră rapidă & improvizată adresând ID-ul specific al imaginii, am înțeles corect? Din păcate, asta ar fi puțin incomod, deoarece necesită adăugarea de cod nou pentru fiecare imagine la care doresc să modific legenda. De asemenea, ar fi imposibil de realizat atunci când sunt implicați mai mulți utilizatori/autori (cu și mai puține cunoștințe de codare decât mine). @birgire

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

Cum realizează WordPress acest lucru? Când adaug o imagine într-un articol/pagină, legenda este inserată automat. Dacă modific legenda imaginii în interiorul articolului/paginii, legenda inserată automat este schimbată doar pentru această instanță. Pot să reproduc acest comportament cu plugin-ul meu? Ceva de genul sugestiei lui @WebElaine: Dacă este introdusă o legendă alternativă, afișează-o, altfel afișează titlul imaginii (îngroșat) & descrierea imaginii. Nu am idee cum pot adresa toate modificările introduse așa cum se vede în a doua poză. Orice ajutor este foarte apreciat, vă mulțumesc!

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

Mă refeream la partea de filtru din acel răspuns, nu la partea de actualizare SQL ;-) Ar trebui să funcționeze pentru imaginile noi. @HansWernersen

birgire birgire
28 mar. 2017 18:03:53
Arată celelalte 2 comentarii