Локализация плагина: 5 мест, где чаще всего забывают переводы
Локализация в плагине — это не только файлы .po/.mo. Чаще всего перевод «ломается» в мелочах: строка выведена не через gettext, часть текста собрана вручную, а часть вообще сидит в JS.
Проверьте базу: все пользовательские строки должны идти через __(), _e(), _x(), _n() и иметь единый text domain. Если домен в одном месте отличается, переводчик его просто не увидит.
Отдельно смотрите на:
— уведомления и ошибки в админке;
— шаблоны email и тексты кнопок;
— сообщения в AJAX и REST-ответах;
— настройки в JavaScript и inline-строки;
— метки в блоках, виджетах и shortcodes.
Частая ошибка — переводить только интерфейс, но забывать про динамические фразы: «Удалено %s записей», «Осталось %d шагов». Для таких строк нужны плейсхолдеры и правильный порядок аргументов, иначе в других языках фраза развалится.
Хорошая привычка: перед сборкой плагина прогоняйте поиск по проекту на голые строки в кавычках. Если текст видит пользователь, он должен быть готов к переводу — иначе локализация останется только на бумаге.
Локализация в плагине — это не только файлы .po/.mo. Чаще всего перевод «ломается» в мелочах: строка выведена не через gettext, часть текста собрана вручную, а часть вообще сидит в JS.
Проверьте базу: все пользовательские строки должны идти через __(), _e(), _x(), _n() и иметь единый text domain. Если домен в одном месте отличается, переводчик его просто не увидит.
Отдельно смотрите на:
— уведомления и ошибки в админке;
— шаблоны email и тексты кнопок;
— сообщения в AJAX и REST-ответах;
— настройки в JavaScript и inline-строки;
— метки в блоках, виджетах и shortcodes.
Частая ошибка — переводить только интерфейс, но забывать про динамические фразы: «Удалено %s записей», «Осталось %d шагов». Для таких строк нужны плейсхолдеры и правильный порядок аргументов, иначе в других языках фраза развалится.
Хорошая привычка: перед сборкой плагина прогоняйте поиск по проекту на голые строки в кавычках. Если текст видит пользователь, он должен быть готов к переводу — иначе локализация останется только на бумаге.
База данных плагина: 6 ошибок, которые потом дорого чинить
Если плагин хранит данные в WordPress, не лепите всё в один массив “на всякий случай”. Для настроек, логов и сущностей нужны разные таблицы или хотя бы разные ключи: так проще искать, обновлять и удалять записи без мусора.
— Не используйте wp_options для всего подряд: там быстро растёт шум и тормозится админка.
— Не сохраняйте большие JSON-объекты, если потом нужен фильтр по полям.
— Не забывайте про индексы на часто запрашиваемых колонках.
— Не делайте запросы внутри цикла, если можно получить данные одним JOIN.
Ещё одна типовая проблема — отсутствие схемы удаления. Плагин отключили, а таблицы, кэши и служебные записи остались. Сразу продумайте, что удаляется при деактивации, а что — только при полном удалении плагина. Это экономит время на поддержке и убирает “призрачные” баги.
Для рабочих выборок используйте $wpdb, prepare и явные типы данных. Так вы снижаете риск SQL-инъекций и делаете код понятнее для следующего разработчика.
Хорошая база данных в плагине — это не “как сохранить”, а “как потом быстро найти, обновить и безопасно удалить”.
Если плагин хранит данные в WordPress, не лепите всё в один массив “на всякий случай”. Для настроек, логов и сущностей нужны разные таблицы или хотя бы разные ключи: так проще искать, обновлять и удалять записи без мусора.
— Не используйте wp_options для всего подряд: там быстро растёт шум и тормозится админка.
— Не сохраняйте большие JSON-объекты, если потом нужен фильтр по полям.
— Не забывайте про индексы на часто запрашиваемых колонках.
— Не делайте запросы внутри цикла, если можно получить данные одним JOIN.
Ещё одна типовая проблема — отсутствие схемы удаления. Плагин отключили, а таблицы, кэши и служебные записи остались. Сразу продумайте, что удаляется при деактивации, а что — только при полном удалении плагина. Это экономит время на поддержке и убирает “призрачные” баги.
Для рабочих выборок используйте $wpdb, prepare и явные типы данных. Так вы снижаете риск SQL-инъекций и делаете код понятнее для следующего разработчика.
Хорошая база данных в плагине — это не “как сохранить”, а “как потом быстро найти, обновить и безопасно удалить”.
Локализация плагина: 4 ошибки, из-за которых перевод ломается
Если плагин нужен не только вам, локализацию стоит продумать до первой строки интерфейса. Иначе потом приходится искать текст по шаблонам, править вручную и ловить «непереводимые» места в админке.
• Не хардкодьте строки прямо в PHP. Любой текст для пользователя должен проходить через функции перевода, а не лежать в коде как обычная строка.
• Не собирайте фразы конкатенацией без нужды: переводчик должен видеть целое предложение, а не набор обрывков.
• Не забывайте про контекст. Одно и то же слово в кнопке, подсказке и заголовке может переводиться по-разному.
• Не держите тексты только в одном месте: проверяйте экраны, письма, уведомления и ошибки.
Отдельно следите за плейсхолдерами: если в строке есть имя, число или ссылка, используйте безопасную подстановку и сохраняйте порядок аргументов. Иначе перевод становится неудобным или ломает смысл.
Хорошая локализация — это не «добавить .pot-файл», а сразу писать интерфейс так, чтобы его можно было перевести без правок логики.
Если плагин нужен не только вам, локализацию стоит продумать до первой строки интерфейса. Иначе потом приходится искать текст по шаблонам, править вручную и ловить «непереводимые» места в админке.
• Не хардкодьте строки прямо в PHP. Любой текст для пользователя должен проходить через функции перевода, а не лежать в коде как обычная строка.
• Не собирайте фразы конкатенацией без нужды: переводчик должен видеть целое предложение, а не набор обрывков.
• Не забывайте про контекст. Одно и то же слово в кнопке, подсказке и заголовке может переводиться по-разному.
• Не держите тексты только в одном месте: проверяйте экраны, письма, уведомления и ошибки.
Отдельно следите за плейсхолдерами: если в строке есть имя, число или ссылка, используйте безопасную подстановку и сохраняйте порядок аргументов. Иначе перевод становится неудобным или ломает смысл.
Хорошая локализация — это не «добавить .pot-файл», а сразу писать интерфейс так, чтобы его можно было перевести без правок логики.
База данных плагина: 5 ошибок, которые потом ломают скорость и поддержку
Если плагин хранит данные как попало, проблемы всплывают не сразу: сначала дубли, потом медленные запросы, а затем сложная миграция. База данных — не место для «потом разберёмся».
• Не создавайте таблицы без префикса WordPress — это мешает совместимости и безопасности.
• Не храните всё в одной записи options, если данные часто меняются: обновления станут тяжелее.
• Не забывайте про индексы в колонках, по которым идёт поиск или сортировка.
• Не пишите запросы через конкатенацию строк — используйте подготовленные запросы.
• Не удаляйте данные плагина при деактивации, если это ломает восстановление или перенос.
Отдельно следите за типами полей: число должно быть числом, дата — датой, текст — текстом. Когда всё складывают в длинную строку, фильтрация и выборка превращаются в боль.
Ещё одна частая ошибка — отсутствие схемы обновления. Если структура таблицы меняется, заранее продумайте миграцию: добавление колонок, перенос данных, обратную совместимость. И обязательно проверяйте, что плагин переживает пустую базу и повторную установку без ручных правок.
Хороший плагин не просто пишет в базу, а делает это предсказуемо: быстро ищет, легко обновляется и не мешает администратору через полгода.
Если плагин хранит данные как попало, проблемы всплывают не сразу: сначала дубли, потом медленные запросы, а затем сложная миграция. База данных — не место для «потом разберёмся».
• Не создавайте таблицы без префикса WordPress — это мешает совместимости и безопасности.
• Не храните всё в одной записи options, если данные часто меняются: обновления станут тяжелее.
• Не забывайте про индексы в колонках, по которым идёт поиск или сортировка.
• Не пишите запросы через конкатенацию строк — используйте подготовленные запросы.
• Не удаляйте данные плагина при деактивации, если это ломает восстановление или перенос.
Отдельно следите за типами полей: число должно быть числом, дата — датой, текст — текстом. Когда всё складывают в длинную строку, фильтрация и выборка превращаются в боль.
Ещё одна частая ошибка — отсутствие схемы обновления. Если структура таблицы меняется, заранее продумайте миграцию: добавление колонок, перенос данных, обратную совместимость. И обязательно проверяйте, что плагин переживает пустую базу и повторную установку без ручных правок.
Хороший плагин не просто пишет в базу, а делает это предсказуемо: быстро ищет, легко обновляется и не мешает администратору через полгода.
Админ-панель плагина: 5 деталей, которые сразу выдают слабую архитектуру
Если интерфейс в бэкенде неудобный, это почти всегда проблема не дизайна, а логики плагина. Админка должна помогать выполнять задачу за 2–3 действия, а не заставлять разбираться в структуре кода.
Проверьте базовые вещи:
— понятные названия пунктов меню и настроек;
— логичную группировку полей по сценариям;
— сохранение состояния формы после ошибки;
— аккуратные уведомления без лишнего шума;
— права доступа через capability, а не “для всех подряд”.
Отдельно смотрите на списки, таблицы и фильтры. Если данных много, нужен поиск, пагинация и быстрые действия. Если данных мало, не перегружайте экран вкладками и декоративными блоками. Чем меньше кликов до результата, тем легче плагин поддерживать и объяснять клиенту.
Ещё одна типовая ошибка — смешивать UI и бизнес-логику. Админ-панель должна только собирать ввод, валидировать его и передавать в обработчики. Тогда код проще тестировать, а новые поля добавляются без переписывания всего экрана.
Делайте админку так, будто ею будет пользоваться занятый менеджер: без догадок, без лишних экранов и без сюрпризов после сохранения.
—
Если понравилось — посмотри @wp_dev_deep_dive_ww
Если интерфейс в бэкенде неудобный, это почти всегда проблема не дизайна, а логики плагина. Админка должна помогать выполнять задачу за 2–3 действия, а не заставлять разбираться в структуре кода.
Проверьте базовые вещи:
— понятные названия пунктов меню и настроек;
— логичную группировку полей по сценариям;
— сохранение состояния формы после ошибки;
— аккуратные уведомления без лишнего шума;
— права доступа через capability, а не “для всех подряд”.
Отдельно смотрите на списки, таблицы и фильтры. Если данных много, нужен поиск, пагинация и быстрые действия. Если данных мало, не перегружайте экран вкладками и декоративными блоками. Чем меньше кликов до результата, тем легче плагин поддерживать и объяснять клиенту.
Ещё одна типовая ошибка — смешивать UI и бизнес-логику. Админ-панель должна только собирать ввод, валидировать его и передавать в обработчики. Тогда код проще тестировать, а новые поля добавляются без переписывания всего экрана.
Делайте админку так, будто ею будет пользоваться занятый менеджер: без догадок, без лишних экранов и без сюрпризов после сохранения.
—
Если понравилось — посмотри @wp_dev_deep_dive_ww
Forwarded from Потрачено! Клуб спящих бизнесменов!
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 aff.top — вся индустрия арбитража в одном месте
🧠 Блог про арбитраж и ИИ — как нейросети меняют залив и антифрод
🚨 База спамеров — ежедневно собираем спамеров и ведём рейтинг
🛠 70+ инструментов — от клоаки до антифрод-чека
🎬 1000+ видео — весь YouTube про трафик в одной ленте
👤 2400+ персон — байеры и фаундеры с контактами напрямую
Без регистрации, без платных «премиумов».
👇 Подписывайся на канал
🧠 Блог про арбитраж и ИИ — как нейросети меняют залив и антифрод
🚨 База спамеров — ежедневно собираем спамеров и ведём рейтинг
🛠 70+ инструментов — от клоаки до антифрод-чека
🎬 1000+ видео — весь YouTube про трафик в одной ленте
👤 2400+ персон — байеры и фаундеры с контактами напрямую
Без регистрации, без платных «премиумов».
👇 Подписывайся на канал
Безопасность кода в плагине: 7 проверок, которые спасают от типовых дыр
Когда плагин пишет один разработчик, а используют тысячи сайтов, ошибка в коде быстро становится проблемой для всех. Базовый минимум — не доверять входным данным и не полагаться на “пользователь не тронет”.
Проверьте в первую очередь:
— все данные из $_GET, $_POST, $_REQUEST проходят валидацию и очистку;
— любые действия через формы и AJAX защищены nonce;
— вывод в HTML экранируется, а не вставляется как есть;
— SQL-запросы идут через prepare, без склейки строк;
— права пользователя проверяются перед сохранением, удалением и экспортом.
Отдельно смотрите на файлы и настройки: загрузка должна ограничивать типы и размер, а критичные опции — менять только после проверки capabilities. Если плагин работает с API, не храните секреты в открытом виде и не отдавайте их в ответах.
Полезная привычка — искать в коде все места, где есть ввод, запрос к БД, вывод в шаблон и работа с файлами. Именно на этих стыках чаще всего и появляются уязвимости.
Лучший способ держать плагин в форме — делать безопасность частью ревью: если на каждом изменении вы проверяете вход, права, вывод и запросы, большинство проблем не доживёт до релиза.
Когда плагин пишет один разработчик, а используют тысячи сайтов, ошибка в коде быстро становится проблемой для всех. Базовый минимум — не доверять входным данным и не полагаться на “пользователь не тронет”.
Проверьте в первую очередь:
— все данные из $_GET, $_POST, $_REQUEST проходят валидацию и очистку;
— любые действия через формы и AJAX защищены nonce;
— вывод в HTML экранируется, а не вставляется как есть;
— SQL-запросы идут через prepare, без склейки строк;
— права пользователя проверяются перед сохранением, удалением и экспортом.
Отдельно смотрите на файлы и настройки: загрузка должна ограничивать типы и размер, а критичные опции — менять только после проверки capabilities. Если плагин работает с API, не храните секреты в открытом виде и не отдавайте их в ответах.
Полезная привычка — искать в коде все места, где есть ввод, запрос к БД, вывод в шаблон и работа с файлами. Именно на этих стыках чаще всего и появляются уязвимости.
Лучший способ держать плагин в форме — делать безопасность частью ревью: если на каждом изменении вы проверяете вход, права, вывод и запросы, большинство проблем не доживёт до релиза.
This media is not supported in your browser
VIEW IN TELEGRAM
Алиса AI будет конкурировать с Google AI Studio
Яндекс разворачивает экосистему AI-агентов на базе Алисы с доступом сначала для компаний, затем для всех. Агенты уже работают в Яндекс Такси и Лавке, скоро появятся в браузере и студии разработки. Платформа интегрирует стандартные функции — заказ такси, покупки, анализ данных. Алиса AI показывает неплохие результаты: менее известна, чем конкуренты, поэтому предлагает щедрые лимиты на видеогенерацию и работу с контентом. Яндекс планирует внедрить…
➡️ Читайте на сайте: https://aff.top/blog/alisa-ai-budet-konkurirovat-s-google-ai-studio
🧠 Ещё больше инсайтов → в канале AFF.top
Яндекс разворачивает экосистему AI-агентов на базе Алисы с доступом сначала для компаний, затем для всех. Агенты уже работают в Яндекс Такси и Лавке, скоро появятся в браузере и студии разработки. Платформа интегрирует стандартные функции — заказ такси, покупки, анализ данных. Алиса AI показывает неплохие результаты: менее известна, чем конкуренты, поэтому предлагает щедрые лимиты на видеогенерацию и работу с контентом. Яндекс планирует внедрить…
➡️ Читайте на сайте: https://aff.top/blog/alisa-ai-budet-konkurirovat-s-google-ai-studio
🧠 Ещё больше инсайтов → в канале AFF.top
This media is not supported in your browser
VIEW IN TELEGRAM
В Zennoposter добавили ИИ-помощник
Zennolab добавил в Zennoposter встроенный ИИ-кубик с доступом к четырём моделям (Gemini, DeepSeek, Claude, ChatGPT) — 50 бесплатных запросов в сутки. Есть режимы Assistant (чтение) и Agent (автоматическое создание скриптов), плюс новый GET-запрос по API. Нейросети хорошо справляются с регистрацией, постингом, фармингом аккаунтов и простым кодированием, но требуют проверки при парсинге динамических сайтов и диагностике ошибок. В связке с Zennoobr…
➡️ Читайте на сайте: https://aff.top/blog/v-zennoposter-dobavili-ii-pomoschnik
🧠 Ещё больше инсайтов → в канале AFF.top
Zennolab добавил в Zennoposter встроенный ИИ-кубик с доступом к четырём моделям (Gemini, DeepSeek, Claude, ChatGPT) — 50 бесплатных запросов в сутки. Есть режимы Assistant (чтение) и Agent (автоматическое создание скриптов), плюс новый GET-запрос по API. Нейросети хорошо справляются с регистрацией, постингом, фармингом аккаунтов и простым кодированием, но требуют проверки при парсинге динамических сайтов и диагностике ошибок. В связке с Zennoobr…
➡️ Читайте на сайте: https://aff.top/blog/v-zennoposter-dobavili-ii-pomoschnik
🧠 Ещё больше инсайтов → в канале AFF.top
Безопасность кода плагина: 7 проверок, которые экономят часы разборов
Не делайте ставку на «потом проверю». В плагинах WordPress уязвимости чаще всего прячутся в рутинных местах: формы, AJAX, REST, загрузка файлов, запросы к БД.
— Все входные данные фильтруйте через sanitize_* перед сохранением и esc_* перед выводом.
— Для действий, меняющих данные, проверяйте nonce и права текущего пользователя.
— SQL собирайте через $wpdb->prepare(), а не конкатенацией строк.
— Любой файл проверяйте по MIME, расширению и пути, а загрузку — только через разрешённые типы.
— Не отдавайте в браузер лишнее: скрывайте служебные поля, ключи и внутренние ID.
— Для AJAX и REST отдельно валидируйте параметры, даже если форма уже проверена.
— Не доверяйте пользовательскому HTML: если он нужен, пропускайте только через строгий whitelist.
Хорошая привычка — прогонять код по этому списку перед коммитом. Тогда баги ловятся на уровне привычки, а не после жалобы пользователя.
Если выбрать только одно правило, пусть это будет связка: проверка прав, очистка входа и экранирование вывода. Она закрывает большую часть типовых дыр.
Не делайте ставку на «потом проверю». В плагинах WordPress уязвимости чаще всего прячутся в рутинных местах: формы, AJAX, REST, загрузка файлов, запросы к БД.
— Все входные данные фильтруйте через sanitize_* перед сохранением и esc_* перед выводом.
— Для действий, меняющих данные, проверяйте nonce и права текущего пользователя.
— SQL собирайте через $wpdb->prepare(), а не конкатенацией строк.
— Любой файл проверяйте по MIME, расширению и пути, а загрузку — только через разрешённые типы.
— Не отдавайте в браузер лишнее: скрывайте служебные поля, ключи и внутренние ID.
— Для AJAX и REST отдельно валидируйте параметры, даже если форма уже проверена.
— Не доверяйте пользовательскому HTML: если он нужен, пропускайте только через строгий whitelist.
Хорошая привычка — прогонять код по этому списку перед коммитом. Тогда баги ловятся на уровне привычки, а не после жалобы пользователя.
Если выбрать только одно правило, пусть это будет связка: проверка прав, очистка входа и экранирование вывода. Она закрывает большую часть типовых дыр.
This media is not supported in your browser
VIEW IN TELEGRAM
Новую Google reCapcha прошли статичной картинкой
Google выпустил обновленную reCAPTCHA, требующую движений рук для прохождения, но система оказалась уязвима к обходу. Достаточно транслировать статичное изображение с нужным жестом через виртуальную камеру с помощью простого Python-скрипта, чтобы нейросеть пропустила пользователя. Это создает серьёзный риск для сайтов: защита от ботов, позиционировавшаяся как прорыв, на деле не работает. Баг остается актуальным и позволяет спамерам легко автомат…
➡️ Читайте на сайте: https://aff.top/blog/novuiu-google-recapcha-proshli-statichnoi-kartinkoi
🧠 Ещё больше инсайтов → в канале AFF.top
Google выпустил обновленную reCAPTCHA, требующую движений рук для прохождения, но система оказалась уязвима к обходу. Достаточно транслировать статичное изображение с нужным жестом через виртуальную камеру с помощью простого Python-скрипта, чтобы нейросеть пропустила пользователя. Это создает серьёзный риск для сайтов: защита от ботов, позиционировавшаяся как прорыв, на деле не работает. Баг остается актуальным и позволяет спамерам легко автомат…
➡️ Читайте на сайте: https://aff.top/blog/novuiu-google-recapcha-proshli-statichnoi-kartinkoi
🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP
This media is not supported in your browser
VIEW IN TELEGRAM
DeepSeek представит последнюю версию v4
DeepSeek выпустит v4 в середине июля с новой моделью ценообразования API: токены подорожают в 2 раза в часы пиковой нагрузки (09:00–12:00 и 14:00–18:00 по пекинскому времени). Компания планирует уведомлять пользователей по почте за 24 часа до изменения тарифов. Проблема с ошибками «server busy» останется, но обойдётся дороже — это может существенно повлиять на экономику проектов, которые активно используют API DeepSeek для автоматизации и масшта…
➡️ Читайте на сайте: https://aff.top/blog/deepseek-predstavit-posledniuiu-versiiu-v4
🧠 Ещё больше инсайтов → в канале AFF.top
DeepSeek выпустит v4 в середине июля с новой моделью ценообразования API: токены подорожают в 2 раза в часы пиковой нагрузки (09:00–12:00 и 14:00–18:00 по пекинскому времени). Компания планирует уведомлять пользователей по почте за 24 часа до изменения тарифов. Проблема с ошибками «server busy» останется, но обойдётся дороже — это может существенно повлиять на экономику проектов, которые активно используют API DeepSeek для автоматизации и масшта…
➡️ Читайте на сайте: https://aff.top/blog/deepseek-predstavit-posledniuiu-versiiu-v4
🧠 Ещё больше инсайтов → в канале AFF.top
