> * Класс «socialusers» и шорткод «userid» могут вызвать конфликт с другими плагианами, которые решили свои классы и шорткоды так же назвать. Берите более уникальные называния, например с префиксом: Rikki_Social_Users и [rikki_userid]. Было много примеров где знаменитые плагины были вынуждены менять свои шорткоды.
==
Это верно. Всё изучение особенностпей плагиностроения заняло 1 день, так что о стандарте я заботился по минимуму.
> * Функция add_shortcode появилась в WordPress 2.5. Если вы не собираетесь поддерживать WordPress 2.4, вам не нужно проверять её наличие с function_exists.
Это проверяется. См. строчку:
if (!function_exists ('add_shortcode') ) return;
> * Callback функции в объекте класса нужно было передавать по ссылке в php 4, а в php 5 все объекты по умолчанию будут передаваться по ссылке, поэтому можно писать array( $this, 'mce_buttons' ); без &.
Это для совместимости с версиями Wordpress младше 3.2 Gershwin, которые ещё могли работать на PHP4. Не знаю динамики, но возможно где-то ещё остались пользователи старых версий (3.2 вышла год назад).
> * Не стоит забывать о безопасности. Пользователь может ввести что-нибудь вроде: foo.com' onclick='...' в вместо URL, и ваш код подставит его XSS в вашу ссылку, даже если он не имеет право публиковать unfiltered_html. В данном случае нужно esc_url(). Подробнее: codex.wordpress.org/Data_Validation
Надо будет поставить. Хотя есть элемент свободы — плагины всё равно можно ставить только на standalone, и если блоггеру угодно ломать свой standalone через XSS — это его право :).
Plugin так или иначе поставляется в виде исходника, так что для пользователя, который искушён в XSS, не будет особой проблемой подправить исходники, чтобы убрать esc_url.
> И если вдруг плагин сломался, перестал поддерживаться автором, не совместим с WordPress версией 3.6, или же просто надоел, то все мои существующие посты будут всё равно отображаться, пусть без иконок, но всё же не придётся бегать по базе и искать все [userid].
Это тоже хорошая идея. И вполне можно бы было ограничиться JS-дополнением — от PHP требовалось бы только инциализировать кнопки.
Но опасаюсь конфликта с CSS-настройками текущей theme. Мало ли, что у них на уме.
> P.S. WordPress правильнее писать с заглавной буквы P
Это да. Впрочем, и статьи надо писать днём, а не в час ночи, как я :). Тогда и буква P будет на месте.
С git-ом оно ещё проще — можно делать коммиты локально, без синхронизации.
\
Другое дело, что когда я заканчивал код, я ещё не знал, куда его правильно заливать.
Нормальное решение, кстати. Только почти для любой livejournal-подобной блогплатформы не подходит. Livejournal, dreamwidth и Li.ru — там на favicon-ах не человечки
Дополнил статью с учётом критики (теперь там и double-lock, разумеется). Заодно ещё раз перерыл все материалы и уточнил, почему атомарная операция нужна даже если поток залочен.
Статья родилась из рабочих заметок, так что многое просто не пояснил.
Он тормозной потому, что два try/finally делает. Поэтому мне кажется, что лучше напрямую писать Monitor.Enter/Exit — будет то же самое, но без лишних обработчиков.
Ну и сам факт того, что представляет из себя lock интересен. А то находятся люди, которые его ещё раз try-ем оборачивают.
> * Класс «socialusers» и шорткод «userid» могут вызвать конфликт с другими плагианами, которые решили свои классы и шорткоды так же назвать. Берите более уникальные называния, например с префиксом: Rikki_Social_Users и [rikki_userid]. Было много примеров где знаменитые плагины были вынуждены менять свои шорткоды.
==
Это верно. Всё изучение особенностпей плагиностроения заняло 1 день, так что о стандарте я заботился по минимуму.
> * Функция add_shortcode появилась в WordPress 2.5. Если вы не собираетесь поддерживать WordPress 2.4, вам не нужно проверять её наличие с function_exists.
Это проверяется. См. строчку:
if (!function_exists ('add_shortcode') ) return;
> * Callback функции в объекте класса нужно было передавать по ссылке в php 4, а в php 5 все объекты по умолчанию будут передаваться по ссылке, поэтому можно писать array( $this, 'mce_buttons' ); без &.
Это для совместимости с версиями Wordpress младше 3.2 Gershwin, которые ещё могли работать на PHP4. Не знаю динамики, но возможно где-то ещё остались пользователи старых версий (3.2 вышла год назад).
> * Не стоит забывать о безопасности. Пользователь может ввести что-нибудь вроде: foo.com' onclick='...' в вместо URL, и ваш код подставит его XSS в вашу ссылку, даже если он не имеет право публиковать unfiltered_html. В данном случае нужно esc_url(). Подробнее: codex.wordpress.org/Data_Validation
Надо будет поставить. Хотя есть элемент свободы — плагины всё равно можно ставить только на standalone, и если блоггеру угодно ломать свой standalone через XSS — это его право :).
Plugin так или иначе поставляется в виде исходника, так что для пользователя, который искушён в XSS, не будет особой проблемой подправить исходники, чтобы убрать esc_url.
> И если вдруг плагин сломался, перестал поддерживаться автором, не совместим с WordPress версией 3.6, или же просто надоел, то все мои существующие посты будут всё равно отображаться, пусть без иконок, но всё же не придётся бегать по базе и искать все [userid].
Это тоже хорошая идея. И вполне можно бы было ограничиться JS-дополнением — от PHP требовалось бы только инциализировать кнопки.
Но опасаюсь конфликта с CSS-настройками текущей theme. Мало ли, что у них на уме.
> P.S. WordPress правильнее писать с заглавной буквы P
Это да. Впрочем, и статьи надо писать днём, а не в час ночи, как я :). Тогда и буква P будет на месте.
\
Другое дело, что когда я заканчивал код, я ещё не знал, куда его правильно заливать.
Недописанный огрызок кода в директорию wordpress-а не возьмут.
Но не очень гибкое — например, у Ли.рушечки два эккаунта, для мальчиков и для девочек.
Но не рекомендую это пробовать. Задавишь бабушку прямо в доме — и останешься без оладушек.
Такими темпами и с таким обсуждением, чую, скоро у нас здесь ещё лучшая реализация появится.
Респект и уважуха!
Это имеет отношение, разумеется, не к singletone, а к lock-у самому по себе.
Он тормозной потому, что два try/finally делает. Поэтому мне кажется, что лучше напрямую писать Monitor.Enter/Exit — будет то же самое, но без лишних обработчиков.
Ну и сам факт того, что представляет из себя lock интересен. А то находятся люди, которые его ещё раз try-ем оборачивают.