Intereting Posts
Переместить боковую панель выше содержимого ниже, когда реагирование Каков наилучший способ хранения пользовательских переменных Подпишитесь на обновления продукта, пока изображение не будет обновлено. Существуют ли ограничения на обработчики фильтров? Изменение wp-контента на другое имя? Многопозиционная настройка Вход просто сбрасывает / перезаписывает ссылку на ссылку также не работает Неплохо ли писать запись аудита / доступа / журнала транзакций непосредственно в файловую систему? Как я могу ограничить доступ к пользовательской роли WordPress только для определенного плагина? Вывести значение настраиваемого поля для строки сообщения определение дочерней страницы постоянной ссылки Как определить, влияет ли плагин на вашу файловую систему Будет ли имя пользователя WordPress отображаться где-нибудь на сайте? Моя функция php header () не работает Выполнить короткий код только в другом коротком коде Доступ к теме и использование дистрибутива GPL-адаптера?

как проверить, используется ли короткий код более одного раза в том же сообщении

Я написал плагин для коротких кодов. В принципе плагин имеет следующую структуру:

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

Мне нужно различать случай, когда короткий код вызывается в первый раз или нет. Я думаю, что мне нужно объявить какую-то переменную, но я не знаю, как и где я должен ее объявить.

Solutions Collecting From Web of "как проверить, используется ли короткий код более одного раза в том же сообщении"

Я ваш callback 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; } 

Пожалуйста, не злоупотребляйте глобальным пространством имен для этого: избегайте констант, глобальных переменных и подобных обходных решений, которые могут привести к неожиданным конфликтам.

Существует несколько способов сделать это. Одним из таких способов является определение константы при первом запуске обратного вызова.

 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