Come visualizzare una didascalia con shortcode in un'area diversa da the_content

13 set 2010, 22:21:49
Visualizzazioni: 1.42K
Voti: 0

Voglio disabilitare le didascalie degli shortcode per i post in uno dei miei temi e visualizzare il contenuto altrove, ad esempio in una sidebar.

Le immagini non sono caricate su WordPress, ma vengono collegate utilizzando la funzionalità "aggiungi un'immagine → da URL" dell'editor di post, generando il seguente shortcode:

[caption id="" align="alignnone" width="300" caption="Leonard Nimoy ha fatto molte più cose che interpretare Mr. Spock"]<a href="http://example.com/nimoy"><img src="http://example.com/uploads/nimoy.jpg" alt="Leonard Nimoy in abito nero" title="Leonard Nimoy" width="300" height="228" /></a>[/caption]

Qualche idea? Suppongo che si possa usare un filtro su img_caption_shortcode in qualche modo, ma non sono sicuro che sia l'approccio corretto.

0
Tutte le risposte alla domanda 1
6

Prova questo:

$caption_info = array();

add_filter( 'img_caption_shortcode', 'capture_caption', 10, 3 );

function capture_caption( $blank = '', $attr, $content ) {

    global $caption_info;

    $caption_info[] = array('attr' => $attr, 'content' => $content );
    return ' ';
}

Salverà le informazioni di tutte le didascalie nella variabile globale $caption_info e ne sopprimerà la visualizzazione nel contenuto (viene restituito uno spazio perché il risultato del filtro viene ignorato se vuoto).

14 set 2010 06:49:39
Commenti

Fantastico. Sapevo che avrebbe funzionato in qualche modo. Dovrei aggiungere un condizionale is_singular() a questo?

Dan Gayle Dan Gayle
14 set 2010 16:33:58

Beh, dipende da come vuoi esattamente che funzioni. In questa forma si attiverà ad ogni chiamata della funzione img_caption_shortcode() che gestisce gli shortcode [caption] e [wp_caption]. Se vuoi saltare in alcune condizioni - verificale e restituisci una stringa vuota '' nella funzione.

Rarst Rarst
14 set 2010 16:43:13

L'ho inserito, ma facendo global $caption_info; var_dump($caption_info); nel mio single.php risulta in array(0) {}. Idee?

Dan Gayle Dan Gayle
14 set 2010 20:10:37

Momento di stupidità, ma ci sono inciampato anch'io, quindi... La variabile viene riempita solo dopo che il contenuto è stato visualizzato e gli shortcode sono stati eseguiti. Lo stai facendo dopo the_content()?

Rarst Rarst
14 set 2010 20:16:52

L'ho appena capito da solo e stavo per fare la stessa domanda, lol. Fare questo: $content = apply_filters('the_content',get_the_content()); prima nella pagina aiuta. Poi posso semplicemente fare echo $content dove normalmente ci sarebbe the_content(). Però sembra comunque un hack. C'è un modo per far eseguire quel filtro prima?

Dan Gayle Dan Gayle
14 set 2010 20:40:04

Probabilmente ci sono diversi modi per gestire la cosa. Proverei a recuperare il contenuto (senza assegnarlo a una variabile) e rimuovere il filtro da img_caption_shortcode così non viene più eseguito e duplica le informazioni quando il contenuto effettivo viene visualizzato. Si potrebbe anche semplicemente recuperare il contenuto ed estrarre gli shortcode con regex, ma sarebbe una cosa completamente diversa.

Rarst Rarst
15 set 2010 05:46:03
Mostra i restanti 1 commenti