多个实例破坏了 WordPress 短代码
我编写了一个短代码,根据 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个方法:
Try this way:
问题解决了!我更新了 user-profile.php 代码,因此它全部是 PHP 并且没有使用任何 echos。然后我将短代码函数更改为:
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: