@hypero

Не получается создать шорткод?

Всем привет.
Не получается создать шорткод, наверное не так делаю.
function true_misha_func( $atts ){ ?>
    <div class="slider">
        <div class="slider-init">
            <?php foreach(getSlider() as $slider_post): setup_postdata($slider_post); ?>
            <div class="slider-item">
                <div class="container">
                    <div class="slider-item-inner">
                        <div class="slider-info">
                            <?php the_field('text_slider', $slider_post->ID) ?>
                        </div>
                        <a href="<?php the_field('link_slider', $slider_post->ID); ?>" class="slider-link" style="background-color: <?php the_field('button_slider_color', $slider_post->ID); ?>; color: <?php the_field('button_slider_color2', $slider_post->ID); ?>"><?php the_field('text_btn_slider', $slider_post->ID); ?></a>
                    </div>
                </div>
            </div>
        <?php endforeach; ?>
        </div>
    </div>
<?php }
add_shortcode( 'slider', 'true_misha_func' );
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Функция шорткода должна возвращать переменную 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() должна возвращаться массив записей для работы, без нее ничего работать не будет
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы