WordPress — PHP повторяет результаты в цикле

Привет, ребята, поэтому у меня есть эта простая проблема, и мне нужна помощь в ее решении. Я создаю простой шорткод PHP для WordPress, где требуется 3 входа audio text а также totalposts, Мне удалось создать макет шорткода, но я не знаю почему, но он повторяет результаты в цикле while.

Ниже приведен код:

function header_custom_box($atts) {

$atts = shortcode_atts( array( 'audio' => '', 'text' => '', 'totalposts' => '3'), $atts, 'header-custom-box' );

$audioFiles = explode( ",", $atts['audio'] );
$descText = explode( ",", $atts['text'] );

$postCount = $atts['totalposts'];
$posts = array();
$audioArray = array();
$imagesArray = array();
$textArray = array();
$buf = '';
$counter = 0;

foreach ($audioFiles as $audioFile) {
$attr = array(
'src'      => $audioFile,
'loop'     => '',
'autoplay' => '',
'preload' => 'none'
);
$audioArray[] = wp_audio_shortcode( $attr );
}

foreach ($descText as $desc) {
$textArray[]  = $desc;
}

while ($counter < $postCount) {
$buf .= '<div class="header-tab-box">';
$buf .= '<div class="audio-text"><h2>Your Daily Audio:</h2> <br/>';
$buf .= $textArray[$counter];
$buf .= '</div>';
$buf .= '<div class="audio-player">';
$buf .= $audioArray[$counter];
$buf .= '</div>';
$buf .= '</div>';
$posts[$counter] = $buf;
$counter++;
}
return $posts;

}
add_shortcode( 'header-custom-box', 'header_custom_box' );

Кроме того, он отображает результат, когда я var_dump($posts) но если я return $post это говорит Array

В этом шорткоде мне нужно применить еще одну вещь: delay в каждом посте, как это должно быть изменено на следующий пост через каждые 24-58 часов.

Заранее спасибо.

0

Решение

Это повторяется, потому что вы не сбрасываете $buf переменная в каждой итерации
так в первой итерации $buf = "firstRow"вторая итерация $buf = "firstRowSecondRow"… И это печатает вас Array, потому что вы возвращаете массив $posts содержит кусочки HTML. Если вы хотите распечатать все части вместе, просто используйте implode функция

 while ($counter < $postCount) {
$buf = ""; // make this empty in each iteration
$buf .= '<div class="header-tab-box">';
$buf .= '<div class="audio-text"><h2>Your Daily Audio:</h2> <br/>';
$buf .= $textArray[$counter];
$buf .= '</div>';
$buf .= '<div class="audio-player">';
$buf .= $audioArray[$counter];
$buf .= '</div>';
$buf .= '</div>';
$posts[$counter] = $buf;
$counter++;
}
return implode('',$posts);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]