Cum să afișezi un scurtcode de caption în alt loc decât the_content

13 sept. 2010, 22:21:49
Vizualizări: 1.42K
Voturi: 0

Doresc să dezactivez subtitrarile scurtcodurilor pentru postări într-unul din temele mele și să afișez conținutul în alt loc, cum ar fi în bara laterală.

Imaginile nu sunt încărcate în WordPress, ci sunt legate folosind funcționalitatea editorului de postări "adaugă o imagine" -> "de la URL", rezultând în următorul scurtcod:

[caption id="" align="alignnone" width="300" caption="Leonard Nimoy a făcut mult mai multe lucruri decât să joace doar rolul lui Mr. Spock"]<a href="http://example.com/nimoy"><img src="http://example.com/uploads/nimoy.jpg" alt="Leonard Nimoy într-un costum negru" title="Leonard Nimoy" width="300" height="228" /></a>[/caption]

Ce părere aveți? Presupun că ar trebui să folosesc un filtru pe img_caption_shortcode cumva, dar nu sunt sigur dacă aceasta este abordarea corectă.

0
Toate răspunsurile la întrebare 1
6

Încearcă asta:

$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 ' ';
}

Acesta va salva informațiile din toate subtitrările în variabila globală $caption_info și va suprima afișarea lor în conținut (se returnează un spațiu deoarece rezultatul filtrului este ignorat dacă este gol).

14 sept. 2010 06:49:39
Comentarii

Super. Știam că va funcționa cumva. Ar trebui să adaug o condiție is_singular() la asta?

Dan Gayle Dan Gayle
14 sept. 2010 16:33:58

Păi, depinde exact cum vrei să funcționeze. În această formă se va declanșa la fiecare apel al funcției img_caption_shortcode() care alimentează shortcode-urile [caption] și [wp_caption]. Dacă vrei să sari peste anumite condiții - verifică-le și returnează '' gol în funcție.

Rarst Rarst
14 sept. 2010 16:43:13

Am introdus asta, dar făcând global $caption_info; var_dump($caption_info); în single.php rezultă array(0) {}. Păreri?

Dan Gayle Dan Gayle
14 sept. 2010 20:10:37

Moment prostesc, dar am pățit și eu la fel, deci... Variabila este completată doar după ce conținutul este afișat și shortcode-urile rulează. Faci asta după the_content()?

Rarst Rarst
14 sept. 2010 20:16:52

Tocmai am realizat și eu asta și eram pe punctul de a pune aceeași întrebare, lol. Dacă faci asta: $content = apply_filters('the_content',get_the_content()); mai devreme în pagină ajută. Apoi pot pur și simplu să fac echo $content în locul unde ar fi the_content(). Totuși, încă pare un hack. Există vreo metodă să rulezi acel filtru mai devreme?

Dan Gayle Dan Gayle
14 sept. 2010 20:40:04

Probabil sunt mai multe metode de a rezolva asta. Aș încerca să preiau conținutul (fără a-l atribui unei variabile) și să elimin filtrul de la img_caption_shortcode astfel încât să nu mai ruleze și să nu mai duplicate informația când conținutul real este afișat. De asemenea, ai putea pur și simplu să preiei conținutul și să extragi shortcode-urile cu regex, dar codul ar fi complet diferit.

Rarst Rarst
15 sept. 2010 05:46:03
Arată celelalte 1 comentarii