Cum să afișezi un scurtcode de caption în alt loc decât the_content
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ă.

Î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).

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

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.

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

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()
?

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?

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.
