如何检查一个短码在同一帖子中是否被多次使用

时间:2013-02-24 作者:Toc

我已经写了一个短代码插件。插件基本上具有以下结构:

PL::setup();

class PL {

public static function setup() {
add_shortcode("myshortcode", array ( __CLASS__,"myshortcode_handler"));
}

public static function myshortcode_handler(
... some variable assignment?
   if (time the shortcode is invoked == 1) {
      ... 
   }
   else {
      ...
   }
... some other code lines
}

}
我需要区分是否第一次调用了短代码。我想我必须声明一些变量,但我不知道如何以及在哪里声明它。

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

在您的快捷码回调中myshortcode_handler(), 使用静态变量:

function myshortcode_handler()
{
    static $first_call = TRUE;

    if ( ! $first_call )
    {
        # callback was called earlier …
    }

    # set it to FALSE after you have handled the condition.
    $first_call = FALSE;

    return;
}
请不要为此滥用全局命名空间:避免常量、全局变量和可能导致意外冲突的类似解决方法。

SO网友:s_ha_dum

有很多方法可以做到这一点。其中一种方法是在第一次运行回调时定义一个常量。

if (!defined(\'myshortcode_check\')) {
  // first time code
  define(\'myshortcode_check\',true);
} else {
  // not the first time code
}
应该相当简单。不过,这是一个全球性的问题,不是针对具体岗位的问题。这应该可以很好地用于单篇文章的显示,但可能不是您希望在文章索引上的行为。如果该短代码在索引中的任何帖子上运行,它将define 常数。

http://php.net/manual/en/function.defined.php
http://php.net/manual/en/function.define.php

结束

相关推荐

通过ShortCode属性传递标记

祝大家节日快乐。希望有人能帮助我思考我遇到的问题。我有一个插件Im building,允许用户从maps API中提取地址数据,即它验证地址,如果是业务,则提取标记图标、地址详细信息、web链接等,并构建一个短代码以在前端呈现地图。目前正在构建短代码,并通过tinyMCE模式窗口预览结果。创建地图标记内容(标记信息气泡)是导致我变灰的原因。我希望用户能够添加或操作此块的内容,但最终的结果是相当多的标记。到目前为止,我已尝试通过以下其中一个快捷码属性传递生成的标记:[my_gmaps id=\"map\"