Как просуммировать строки в шорткоде wordpress?

185
16 ноября 2018, 19:20

Хочу написать шорткод в которому будут выводиться последние 5 записей таксономии. Вся загвоздка в том, что я не знаю как просуммировать строки в этом месте:

$cont += "<li><a href='". $post->guid. "'>" . $post->post_title . "</a></li><br />";

т.к. по хорошему атрибуты $post должны выводиться через echo и если я подставляю в выражение выше - получаю ошибку.

Код:

function shortcode_function() {
  $args = array(
  'numberposts' => 5,
  'category'    => 0,
  'orderby'     => 'date',
  'order'       => 'DESC',
  'meta_key'    => '',
  'meta_value'  =>'',
  'post_type'   => 'movies',
  'suppress_filters' => true,
);
$posts = get_posts( $args );
$cont = 0;
foreach( $posts as $post ){ 
setup_postdata($post);
   $cont += "<li><a href='". $post->guid. "'>" . $post->post_title . "</a></li><br />";
}
  return $cont;
}
add_shortcode( 'show_films', 'shortcode_function' );
Answer 1

Операция сцепления строк в php называется конкатенация и описывается с помощью точки.

function shortcode_function() {
    $args = array(
        'numberposts'      => 5,
        'category'         => 0,
        'orderby'          => 'date',
        'order'            => 'DESC',
        'meta_key'         => '',
        'meta_value'       => '',
        'post_type'        => 'movies',
        'suppress_filters' => true,
    );
    $posts = get_posts( $args );
    $cont  = ''; // Пустая строка
    foreach ( $posts as $post ) {
        setup_postdata( $post );
        // Конкатенация
        $cont .= "<li><a href='" . $post->guid . "'>" . $post->post_title . "</a></li><br />";
    }
    return $cont;
}
add_shortcode( 'show_films', 'shortcode_function' );
Answer 2

Моя задача решается с помощью буферизации вывода ob_start() - ob_get_clean()

function shortcode_function() {
ob_start();
    $args = array(
    'numberposts' => 5,
    'category'    => 0,
    'orderby'     => 'date',
    'order'       => 'DESC',
    'meta_key'    => '',
    'meta_value'  =>'',
    'post_type'   => 'movies',
    'suppress_filters' => true,
);
$posts = get_posts( $args );
$cont = 0;
foreach( $posts as $post ){ 
setup_postdata($post); 
 ?>
<li><a href="<?php echo $post->guid; ?>"><?php echo $post->post_title; ?></a></li>
<?php }
$cont = ob_get_clean();
    return $cont;
}
add_shortcode( 'show_films', 'shortcode_function' );
READ ALSO
Конфиг для сайта

Конфиг для сайта

Хочу написать фреймворк (чисто для практики), возник вопрос: а как мне хранить конфиг для сайта? обычный массив в php-файле кажется не очень...

184
Как спарсить страницу с javascript контентом?

Как спарсить страницу с javascript контентом?

На входе страница Ссылка

148
Обращение к свойству через переменную

Обращение к свойству через переменную

Имеется следующий объект (поля могут меняться):

161
Проблема с запуском minion - Kohana3 // Cron

Проблема с запуском minion - Kohana3 // Cron

Не могу уже 3-й день настроить модуль и корректно запуститься, помогите пожалуйста с решением проблемы

157