【问题标题】:Wordpress shortcodes in the wrong placeWordpress 短代码在错误的位置
【发布时间】:2014-06-13 14:27:19
【问题描述】:

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

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

function wanted(){
    echo "wanted";
}

并发布此内容

start
[simplenote]
end

给出这个结果:

wanted
start
unwanted
end

我希望它在开始和结束之间插入“想要的”文本。 我知道最简单的解决方案是在 Wanted() 中返回“wanted”,但我已经拥有所有这些功能,而且它们非常庞大。是否有一个简单的解决方案,无需从头开始编写所有内容?

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

【问题讨论】:

  • 我认为没有办法解决这个问题,因为生成短代码输出的函数是在输出页面/帖子内容之前执行的,因此为什么需要在上面的示例中显示。跨度>

标签: php wordpress plugins shortcode


【解决方案1】:

点击此链接http://codex.wordpress.org/Shortcode_API#Overview

当 the_content 显示时,短代码 API 将解析任何 注册的短代码,例如“[myshortcode]”,分离并解析 属性和内容(如果有),并传递给它们相应的 简码处理函数。任何字符串返回(不回显) 短代码处理程序将被插入到帖子正文中,以代替 简码本身。

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

function wanted(){
    return "wanted";
}

【讨论】:

    【解决方案2】:

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

    function wanted() {
        echo get_wanted();
    }
    

    所以你可以做任何一个,但只有一个地方的大部分代码。这是 WordPress 中的常见模式,例如the_title()get_the_title()

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

    【讨论】:

      【解决方案3】:

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

      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;
      }
      

      【讨论】:

      • 我做到了,它部分工作。文本在开始和结束之间可见,但它也在开始之前打印功能。有没有办法抑制它?
      • 应该被禁止。这是原始代码:eval.in/143153 结果:想要开始不需要的结束 这是输出缓冲:eval.in/143155 结果:开始想要不需要的结束
      • 它有效,我的错 :) 我使用 ob_get_content 代替,现在它完美运行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2018-03-11
      • 2013-04-07
      相关资源
      最近更新 更多