Пользовательский пост WpQuery foreach l oop возвращает только один результат после добавления heredo c - PullRequest
0 голосов
/ 13 июля 2020

Я ломаю голову над этим день или два. Я пытаюсь заставить WordPress печатать все последние сообщения, используя шорткод, который вызывает функцию в functions.php. Мне удалось заставить код работать, но он был напечатан в верхней части страницы, потому что я предполагаю, что по умолчанию PHP echo s, а мне нужно return. Другая проблема в том, что на данный момент он печатает только самый последний результат. L oop работал до того, как я начал использовать HEREDOC, но я решил, что мне нужно использовать его для возврата вместо echo.

Код:

add_shortcode('recentvideos' , 'printrecenttv');

function printrecenttv(){
    $recent_posts = wp_get_recent_posts(array(
        'numberposts' => 4, // Number of recent posts thumbnails to display
        'post_status' => 'publish', // Show only the published posts
        'post_type'  => "tv" //Show only Videos
    ));
    foreach($recent_posts as $post) : 
        $perm = get_permalink($post['ID']);
        $imgurl = get_the_post_thumbnail_url($post['ID'], 'full');
return <<<HTML
     <div class="videoposter">
        <a class="posterlink" href="$perm">
                <img class="posterimg" src="$imgurl">
            </a>
    </div>
HTML;
     endforeach; wp_reset_query();
}

Что я делаю не так ?

1 Ответ

0 голосов
/ 13 июля 2020

Проблема в вашем коде - это возврат.

return возвращает значение и останавливает дальнейшее выполнение кода, что означает, что весь код после return не будет выполняться.

Вы запускаете свой foreach, запускаете код и используйте return, вы передали heredo c в return (первая итерация l oop), и все, return останавливает все дальнейшее выполнение кода.

Вам нужно создать переменную за пределами l oop, скажем, $html = '';, и каждая итерация объединяет html, который вам нужен. После выполнения foreach вы можете проверить, не является ли $html пустым, а затем вернуть $html

$html = '';

foreach ($recent_posts as $post) {
    $perm   = get_permalink($post['ID']);
    $imgurl = get_the_post_thumbnail_url($post['ID'], 'full');

    $html .= '<div class="videoposter">';
    $html .=   '<a class="posterlink" href="' . $perm . '">';
    $html .=     '<img class="posterimg" src="' . $imgurl . '">';
    $html .=   '</a>';
    $html .= '</div>';
}

if (!empty($html)) {
  return $html;
}

Вы, конечно, можете использовать heredo c, если хотите.

Надеюсь, это поможет =]

...