Функция шорткода должна возвращать переменную
return, а не выводить
echo как у вас сейчас работает. Это можно сделать двумя способами
1. Объявить буфер вывода
ob_start()
и вернуть его с помощью
ob_get_contents()
function slider_shortcode_func( $atts ) {
ob_start(); ?>
<div class="slider">
<div class="slider-init">
<h2>Slider Content</h2>
</div>
</div>
<?php ob_get_contents();
}
add_shortcode( 'slider', 'slider_shortcode_func' );
2. Собрать и вернуть переменную с помощью конкатенации строк
function slider_shortcode_func( $atts ) {
$html = '';
$html .= '<div class="slider">';
$html .= '<div class="slider-init">';
$html .= '<h2>Slider Content</h2>';
$html .= '</div>';
$html .= '</div>';
return $html;
}
add_shortcode( 'slider', 'slider_shortcode_func' );
В этом случае функции
the_field()
нужно переписать в
get_field()
PS. Раз передаете в них ID
$slider_post->ID
, функция
setup_postdata()
не нужна
PSS. Разумеется функция
getSlider()
должна возвращаться массив записей для работы, без нее ничего работать не будет