¿Puede un Shortcode Obtener HTML/Texto del Contenido y Devolverlo Dos Veces con HTML Agregado?

21 may 2016, 03:44:05
Vistas: 1.34K
Votos: 2

Estoy intentando reducir algo de trabajo para mí mismo, y esperaba que alguien pudiera saber si esto es posible.

Estas son imágenes configuradas en un slider que muestra una superposición de texto en la imagen en la siguiente diapositiva de una publicación multipágina.

Esto es lo que estoy intentando hacer. Tomar esto:

<h2>Título de la Imagen</h2>
[caption]<img src="http">[/caption]
texto para la diapositiva

Y generar esto:

<div class="singe_slide">
<h2>Título de la Imagen</h2>
[caption]<img src="http">[/caption]
</div>
<!--nextpage-->
<div class="singe_slide">
<h2>Título de la Imagen</h2>  //Misma Imagen Página Siguiente
[caption]<img src="http">[/caption]
<div class="slide_caption"><div class="captExt">
texto para la diapositiva
</div></div>
<!--nextpage-->

Actualmente estoy usando esto para mis shortcodes, pero lleva tanto tiempo como añadir manualmente los divs, y es muy desordenado. Se ve así:

[Slide]<h2>Título de la Imagen</h2>
[caption]<img src="http">[/caption][/Slide]
<!--nextpage-->
[Slide]<h2>Título de la Imagen</h2> //Misma Imagen Página Siguiente
[caption]<img src="http">[/caption]
[SlideCap]texto para la diapositiva[/SlideCap][/Slide]
<!--nextpage-->

Y estos son mis 2 shortcodes:

function Slide($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<div class="singe_slide">' . do_shortcode($content) . '</div>';
}
add_shortcode('Slide', 'Slide');

function SlideCap($atts, $content = null) {
    $content = wpautop(trim($content));
   return '<div class="slide_caption"><div class="captExt">' . do_shortcode($content) . '</div></div>';
}
add_shortcode('SlideCap', 'SlideCap');

Estoy abierto a sugerencias sobre una forma más fácil de hacer esto. Este es mi primer shortcode, así que soy nuevo en esto.

¿Es posible obtener algo entre shortcodes como variable? [shortcode]Esta Parte Aquí[/shortcode]

8
Comentarios

Creo que no termino de entender. El segundo argumento en tu manejador de shortcode - $content - obtendrá el contenido que está entre tus shortcodes. ¿Es eso lo que quieres decir? No estoy seguro de por qué estás ejecutando esto a través de do_shortcode() de nuevo...

Tim Malone Tim Malone
21 may 2016 04:47:14

@TimMalone He añadido más información al post que podría ayudar. Primero que nada, no soy programador de php así que mucho de esto es prueba y error. Lo ejecuté dos veces porque tengo un shortcode dentro de otro shortcode y no sé cómo hacerlo de otra manera. He añadido cómo escribo mi shortcode actualmente cuando hago una publicación en WP. Estoy intentando devolver el encabezado y la imagen dos veces con un nextpage separándolo y el texto una vez en la segunda página todo envuelto en div's.

DRK DRK
21 may 2016 15:00:55

Lo que no queda claro en tu pregunta es qué salida HTML estás intentando lograr. Has compartido mucho código, pero no has dicho "Tengo este shortcode X y quiero que produzca este HTML Y. Este código Z es lo que estoy intentando usar para crearlo, pero en lugar de eso está produciendo W. ¿Por qué pasa eso?"

ToniWidmo ToniWidmo
21 may 2016 16:03:39

@AntonChanning Tenme paciencia, no soy programador. Expuse lo que estoy tratando de lograr y lo que actualmente hago para conseguirlo. El problema es que es muy tedioso añadir todos los shortcodes y encabezados/imágenes dos veces. Es igual de laborioso que poner el HTML yo mismo en lugar de usar shortcodes. Lo que quiero hacer es que mi shortcode tome el $content y lo muestre como yo quiero. Básicamente, combinar mis shortcodes en uno. Simplemente no sé cómo obtener cada elemento que necesito entre los shortcodes y mostrarlo como quiero. ¿Necesito dividirlo primero en un array?

DRK DRK
21 may 2016 16:42:11

Ahora tengo un programador trabajando en ello. Si lo logra, publicaré lo que hizo.

DRK DRK
21 may 2016 17:37:15

Entonces, ¿estás intentando usar un shortcode para crear una imagen con un pie de foto?

ToniWidmo ToniWidmo
21 may 2016 17:43:42

¿Estás buscando algo más como [slide=http://image.url]<h2>Título de la imagen</h2>[slidecap]Este es el pie de foto.[/slidecap][/slide]?

ToniWidmo ToniWidmo
21 may 2016 18:09:47

@AntonChanning Disculpa si te estoy confundiendo con esto. El pie de foto proviene de WordPress y no debe confundirse con el shortcode SlideCap. El pie de foto se inserta automáticamente cuando lo añado en el campo de pie de foto de la imagen, donde pongo el crédito de la imagen. El SlideCap es una superposición opaca sobre la imagen con texto que describe la imagen. Si uso [slide=http://image.url] eso crearía incluso más pasos. Estoy intentando tomar el título h2, la imagen con o sin pie de foto, y el texto de la publicación, y luego publicar el título h2 y la imagen en una página, y después el título h2, la imagen y el texto de la publicación en la siguiente página.

DRK DRK
21 may 2016 18:17:26
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 1
1

Entiendo lo que realmente estás preguntando. Preguntas cuál es la variable para el contenido entre los shortcodes. Si eso es todo lo que preguntas, entonces la respuesta es la variable de parámetro $content. Ya la estás procesando en tu código.

Además, en tu ejemplo, parece que tienes un tercer shortcode, [caption], que no estás procesando. ¿Es deliberado? No parece que realmente quieras producir HTML final con eso, por lo que esta solución asume que no lo deseas.

Voy a asumir que lo que quieres es un formato de shortcode simple de usar como:

[slide=TítuloDeLaImagen][slideimg]http://algún.dominio/slide.jpg[/slideimg][slidecap]Este es el pie de foto.[/slidecap][/slide]

Que luego puedes procesar simplemente ajustando tus funciones así:

function shortcode_slide($atts, $content = null) {
    if(empty($atts)) {
        $img_title='';
    } else {
        // [slide=Título]...[/slide]
        // [slide="Título de varias palabras"]...[/slide]
        $atts = $this->attributefix( $atts );
        $img_title = '<h2>'.trim(array_shift($atts),'="').'</h2>'; // Elimina comillas y signos de igual.
    }

    $content = wpautop(trim($content));
    return '<div class="singe_slide">'.$img_title. do_shortcode($content) . '</div>';
}
add_shortcode('slide', 'shortcode_slide');

function shortcode_slidecap($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<div class="slide_caption"><div class="captExt">' . do_shortcode($content) . '</div></div>';
}
add_shortcode('slidecap', 'shortcode_slidecap');

function shortcode_slideimg($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<img src="'.$content.'" />';
}
add_shortcode('slideimg', 'shortcode_slideimg');

Esto debería producir HTML funcional.

21 may 2016 18:26:00
Comentarios

Increíble, gracias. Lo probaré mañana y veré si puedo hacerlo funcionar.

DRK DRK
22 may 2016 04:34:52