Поддержка Проблемы и решения Результат функции выводится в другом месте

  • Решено Дэн

    (@danarst)


    Здравствуйте!

    У меня был код внутри шаблона для одной страницы, который выводил все посты с типом «Портфолио» в виде слайдера.
    Потом шаблон сделали общим для нескольких страниц и в итоге код вывода слайдера перенесли в контент страницы и он там не работает. Мне сказали создать функцию и шорткод.

    Вот код, который был ранее в шаблоне:

    <?php
                            global $post;
                            $args = array( 'post_type' => 'portfolio_posts');
                            $myposts = get_posts( $args );
                            foreach( $myposts as $post ){ setup_postdata($post);
                                ?>
                                <li>
                                    <?php the_post_thumbnail('big'); ?>
                                    <div class="uk-position-botom uk-panel">
                                        <?php the_title(); ?>
    
                                    </div>
                                </li>                            
                                <?php
                            }
                            wp_reset_postdata();
                            ?>
    

    Я переделал его в functions.php вот так:

    function portfolioslider() {
    
    	global $post;
    	$args = array( 'post_type' => 'portfolio_posts');
    	$myposts = get_posts( $args );
    
    		foreach( $myposts as $post ){ 
    			setup_postdata($post);
    			$postimg = the_post_thumbnail('big');
    			$posttitle = the_title();
    			$out .= '<li>'.$postimg.'<div class="uk-position-botom uk-panel">'.$posttitle.'
    </div></li>';
    		}     
    	return $out;	
    }
    
    add_shortcode( 'portfolioslider', 'portfolioslider' );

    Картинки и названия выводятся возле тега body, где в шаблоне есть код:

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
    <?php endwhile; else: ?>
    Не найдено записей по вашему запросу
    
    <?php endif; ?>

    А если в функции изменю название глобальной переменной с post на portfolio например, то картинки выводиться не будут, а будет лишь выводится несколько раз название текущей страницы.

    Подскажите пожалуйста как это исправить все? Может я функцию неправильно написал?
    Заранее спасибо, уже 4ый час вожусь

    • Тема изменена 5 месяцев назад пользователем Дэн.
    • Тема изменена 5 месяцев назад пользователем Дэн. Причина: более конкретная информация
Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Функции the_post_thumbnail() и the_title() не возвращают результат в виде строки, а выводят на экран сразу в момент вызова.

    Вам нужны get_the_post_thumbnail() и get_the_title().

    Автор Дэн

    (@danarst)

    @sergeybiryukov спасибо вам огромное! Наконец-то эти 4 часа ада прошли)

Просмотр 2 ответов — с 1 по 2 (всего 2)