Может ли шорткод получить HTML/текст из контента и вернуть его дважды с добавленным HTML?
Я пытаюсь упростить себе работу и надеюсь, что кто-то знает, возможно ли это.
Это изображения, настроенные в слайдере, который показывает текстовое наложение на изображение на следующем слайде в многостраничной записи.
Вот что я пытаюсь сделать. Взять это:
<h2>Заголовок изображения</h2>
[caption]<img src="http">[/caption]
текст для слайда
И вывести их вот так:
<div class="singe_slide">
<h2>Заголовок изображения</h2>
[caption]<img src="http">[/caption]
</div>
<!--nextpage-->
<div class="singe_slide">
<h2>Заголовок изображения</h2> //То же изображение на следующей странице
[caption]<img src="http">[/caption]
<div class="slide_caption"><div class="captExt">
текст для слайда
</div></div>
<!--nextpage-->
Вот что я сейчас использую для своих шорткодов, но это занимает столько же времени, как и ручное добавление div'ов, и выглядит очень грязно. Это выглядит так:
[Slide]<h2>Заголовок изображения</h2>
[caption]<img src="http">[/caption][/Slide]
<!--nextpage-->
[Slide]<h2>Заголовок изображения</h2> //То же изображение на следующей странице
[caption]<img src="http">[/caption]
[SlideCap]текст для слайда[/SlideCap][/Slide]
<!--nextpage-->
А вот мои два шорткода:
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');
Я открыт для предложений по более простому способу сделать это. Это мой самый первый шорткод, так что я новичок в этом.
Возможно ли получить что-то между шорткодами как переменную?
[shortcode]Эта часть здесь[/shortcode]
Хорошо, я думаю, я понял, о чем вы на самом деле спрашиваете. Вы спрашиваете, какая переменная отвечает за содержимое между шорткодами. Если это все, что вас интересует, то ответ — это переменная параметра $content
. Вы уже обрабатываете её в своем коде.
Также в вашем примере, похоже, есть третий шорткод, [caption]
, который вы не обрабатываете. Это сделано намеренно? Похоже, вы не хотите получать итоговый HTML с ним, поэтому данное решение предполагает, что он вам не нужен.
Я предположу, что вам нужен простой в использовании формат шорткода, например:
[slide=ЗаголовокИзображения][slideimg]http://some.domain/slide.jpg[/slideimg][slidecap]Это подпись.[/slidecap][/slide]
Который можно затем обработать, просто изменив ваши функции следующим образом:
function shortcode_slide($atts, $content = null) {
if(empty($atts)) {
$img_title='';
} else {
// [slide=Заголовок]...[/slide]
// [slide="Многословный заголовок"]...[/slide]
$atts = $this->attributefix( $atts );
$img_title = '<h2>'.trim(array_shift($atts),'="').'</h2>'; // Удаляем кавычки и знак равенства.
}
$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');
Это должно сгенерировать рабочий HTML.
