如何使用 php 为 while 循环做一个简码?

How to do a shortcode for a while loop with php?

我是 PHP 的初学者,我一直在尝试通过添加短代码来创建一个可以显示我的 while 循环的函数。我知道 add_shortcode 的语法在函数中需要 return,但我似乎无法让它在我的 while 循环中显示字符串。当我尝试 returning 字符串时,它只显示最后一个值,而不是循环。任何输入将不胜感激!

function events_homepage() {
    global $connection;
    mysqli_select_db($connection);
    $query = ("SELECT * FROM events WHERE start_date >= CURDATE() ORDER BY start_date LIMIT 3");
    $result = $connection->query($query);
    while ($row = $result->fetch_assoc()) {
        $title = $row['title'];
        $start_date = date('M d, Y', strtotime($row['start_date']));
        $location = $row['location'];
        $link = $row['link'];
        $str = "<p class='events_homepage_date'>$start_date</p> <p class='events_homepage_title'><a href='$link' target='_blank'>$title</a></p> <p class='events_homepage_location'>$location</p>";
        echo $str;
    }
    return;
}
add_shortcode( 'events_homepage_shortcode', 'events_homepage' );

你是对的,你需要在短代码功能中 return。您缺少的部分是您需要 return 简码函数中的整个输出,您不能回显它。

因此,您需要连接 $str,并在函数末尾输出构建的字符串。以下代码的更新版本将产生所需的输出。

function events_homepage() {
    global $connection;
    mysqli_select_db($connection);
    $query = ("SELECT * FROM events WHERE start_date >= CURDATE() ORDER BY start_date LIMIT 3");
    $result = $connection->query($query);
    $str = "";
    while ($row = $result->fetch_assoc()) {
        $title = $row['title'];
        $start_date = date('M d, Y', strtotime($row['start_date']));
        $location = $row['location'];
        $link = $row['link'];
        $str .= "<p class='events_homepage_date'>$start_date</p> <p class='events_homepage_title'><a href='$link' target='_blank'>$title</a></p> <p class='events_homepage_location'>$location</p>";
    }
    return $str;
}
add_shortcode( 'events_homepage_shortcode', 'events_homepage' );