多个实例破坏了 WordPress 短代码

发布于 2024-11-14 09:50:41 字数 901 浏览 3 评论 0原文

我编写了一个短代码,根据 id 显示作者简介。例如 [user-profile id="1"] 将显示 user- 中定义的配置文件块作者 1 的 profile.php。它有效(即使在同一页面上有多个实例)。

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
}

...除了短代码输出显示在其他条目内容之前,无论其在代码中的位置如何。为了解决这个问题,我添加了这个修复:

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    function get_user_profile() { include 'user-profile.php'; }
    ob_start();
    get_user_profile();
    $output_string = ob_get_contents();
    ob_end_clean();
    return $output_string;
}

...它可以解决定位问题,但破坏了短代码的多个实例。 [user-profile id="1"] 可以工作,但 [user-profile id="1"] [user-profile id="2"] 会破坏它 - 页面在此时停止加载。

我如何修改它以允许多个实例?

I wrote a shortcode that displayed author profiles based on id. For example [user-profile id="1"] would display the profile block defined in user-profile.php for author 1. It worked (even with multiple instances on the same page).

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
}

...except the shortcode output was showing up before other entry content regardless of its place in the code. To solve this I added this fix:

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    function get_user_profile() { include 'user-profile.php'; }
    ob_start();
    get_user_profile();
    $output_string = ob_get_contents();
    ob_end_clean();
    return $output_string;
}

...which worked to solve the positioning problem but broke multiple instances of the shortcode. [user-profile id="1"] works but [user-profile id="1"] [user-profile id="2"] breaks it—the page just stops loading at that point.

How can I modify this to allow multiple instances?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

塔塔猫 2024-11-21 09:50:41

试试这个方法:

[user-profile id="1"][/user-profile] [user-profile id="2"][/user-profile]

Try this way:

[user-profile id="1"][/user-profile] [user-profile id="2"][/user-profile]
埋情葬爱 2024-11-21 09:50:41

问题解决了!我更新了 user-profile.php 代码,因此它全部是 PHP 并且没有使用任何 echos。然后我将短代码函数更改为:

function user_profile( $atts, $content = null ) {
    global $post;
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
    return $user_hcard;
}

Problem solved! I updated the code in user-profile.php code so that it was all PHP and did not use any echos. Then I changed the shortcode function to:

function user_profile( $atts, $content = null ) {
    global $post;
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
    return $user_hcard;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文