Php Wordpress短代码位于错误的位置

Php Wordpress短代码位于错误的位置,php,wordpress,plugins,shortcode,Php,Wordpress,Plugins,Shortcode,我正在制作wordpress插件,我想用短代码在帖子中插入一些非常庞大的代码。我得到了这个模拟我的问题的简单代码 function shortcode_fn( $attributes ) { wanted(); return "unwanted"; } add_shortcode( 'simplenote', 'shortcode_fn'); function wanted(){ echo "wanted"; } 并发布此内容 start [simplenote] e

我正在制作wordpress插件,我想用短代码在帖子中插入一些非常庞大的代码。我得到了这个模拟我的问题的简单代码

function shortcode_fn( $attributes ) {
    wanted();
    return "unwanted";
}
add_shortcode( 'simplenote', 'shortcode_fn');

function wanted(){
    echo "wanted";
}
并发布此内容

start
[simplenote]
end
这就产生了这样的结果:

wanted
start
unwanted
end
我希望它在开始和结束之间插入“通缉”文本。 我知道最简单的解决方案是在want()中返回“want”,但我已经有了所有这些函数,它们非常庞大。有没有一个简单的解决方案,而不必从头开始写


@编辑:也许有什么方法可以将函数的所有回音存储在字符串中而不打印?

一个简单的解决方法是使用函数:

function shortcode_fn( $attributes ) {
    ob_start(); // start a buffer
    wanted(); // everything is echoed into a buffer
    $wanted = ob_get_clean(); // get the buffer contents and clean it
    return $wanted;
}

WordPress的标准方式是提供两个功能。第一,
get_wanted()
将返回所需字符串;另一个是
wanted()
,它只是:

function wanted() {
    echo get_wanted();
}
因此,您可以选择其中一种,但只能将大部分代码放在一个位置。这是WordPress中的常见模式,例如vs

正如@Ruslan提到的,不重写现有函数来构建字符串的最标准方法是使用输出控制。

遵循此链接

当显示_内容时,ShortCodeAPI将解析任何 注册短代码,如“[myshortcode]”,将 属性和内容(如果有),并将其传递给相应的 短代码处理函数。用户返回的任何字符串(不回显) 短代码处理程序将插入到post正文中,以代替 短代码本身

因此,所有短代码函数都必须返回,您可以将函数“想要”更改为:


我不认为有办法解决这个问题,因为生成短代码输出的函数是在页面/帖子内容输出之前执行的,因此在上面的示例中显示了“想要”的原因。我这样做了,并且部分有效。文本在开始和结束之间可见,但它也会在开始之前打印函数。有什么方法可以支持它吗?它应该被抑制。这是原始代码:结果:想要的开始不想要的结束这是与输出缓冲:结果:开始想要不想要的结束它的作品,我的坏:)我用ob_get_内容代替,现在它的作品完美
function wanted(){
    return "wanted";
}