代码之家  ›  专栏  ›  技术社区  ›  pdas

如何使用php进行一段时间的短代码循环?

  •  0
  • pdas  · 技术社区  · 8 年前

    我是PHP的初学者,我一直在尝试创建一个函数,通过添加一个短代码来显示我的while循环。我知道add\u shortcode的语法要求在函数中返回,但我似乎无法让它在while循环中显示字符串。当我尝试返回字符串时,它只显示最后一个值,而不是循环。如有任何意见,将不胜感激!

    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' );
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   M Hayward    8 年前

    您是对的,您需要返回shortcode函数。您缺少的部分是,您需要在shortcode函数中返回整个输出,而不能回显它。

    因此,您需要连接$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' );