Cómo mostrar un caption de shortcode en otro lugar que no sea the_content

13 sept 2010, 22:21:49
Vistas: 1.42K
Votos: 0

Quiero desactivar los captions de shortcode para las entradas en uno de mis temas, y mostrar el contenido en otro lugar, como en una barra lateral.

Las imágenes no están subidas a WordPress, pero están enlazadas usando la funcionalidad del editor de añadir imagen -> desde URL, lo que resulta en el siguiente shortcode:

[caption id="" align="alignnone" width="300" caption="Leonard Nimoy ha hecho muchas más cosas que solo interpretar al Sr. Spock"]<a href="http://example.com/nimoy"><img src="http://example.com/uploads/nimoy.jpg" alt="Leonard Nimoy con traje negro" title="Leonard Nimoy" width="300" height="228" /></a>[/caption]

¿Alguna idea? Supongo que usando un filtro en img_caption_shortcode de alguna manera, pero no sé si ese es el enfoque correcto.

0
Todas las respuestas a la pregunta 1
6

Prueba esto:

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

Guardará la información de todos los subtítulos en la variable global $caption_info y suprimirá su visualización en el contenido (se devuelve un espacio porque el resultado del filtro se ignora si está vacío).

14 sept 2010 06:49:39
Comentarios

Genial. Sabía que de alguna manera funcionaría. ¿Debería agregar un condicional is_singular() a esto?

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

Bueno, eso depende de cómo quieras que funcione exactamente. En esta forma se activará en cada llamada de la función img_caption_shortcode() que impulsa los shortcodes [caption] y [wp_caption]. Si deseas omitir en algunas condiciones, verifícalas y devuelve un valor vacío '' en la función.

Rarst Rarst
14 sept 2010 16:43:13

Lo he implementado, pero al hacer global $caption_info; var_dump($caption_info); en mi single.php obtengo array(0) {}. ¿Alguna idea?

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

Momento tonto, pero yo mismo tropecé con eso, así que... La variable se llena solo después de que el contenido se muestra y los shortcodes se ejecutan. ¿Estás haciendo esto después de the_content()?

Rarst Rarst
14 sept 2010 20:16:52

Acabo de descubrir esto yo mismo, y estaba a punto de hacer esa pregunta, lol. Hacer esto: $content = apply_filters('the_content',get_the_content()); antes en la página ayuda. Entonces puedo simplemente hacer echo $content donde iría the_content(). Aún así se siente como un truco. ¿Hay alguna manera de hacer que ese filtro se ejecute antes?

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

Probablemente hay varias formas de manejar esto. Yo intentaría recuperar el contenido (sin asignarlo a una variable) y eliminar el filtro de img_caption_shortcode para que no se ejecute y duplique la información cuando se muestre el contenido real. También podría simplemente recuperar el contenido y buscar shortcodes con regex, pero el código sería algo completamente diferente.

Rarst Rarst
15 sept 2010 05:46:03
Mostrar los 1 comentarios restantes