Неозвученная проблема шорткодов

Написано

в

The-Unspoken-Problem-of-Shortcodes

Шорткоды — одна из вершин WordPress. Шорткоды служат мостом между разработчиками и создателями сайтов, позволяя размещать сложные элементы контента практически в любом месте. Создатели плагинов любят шорткоды, так как они дают больше гибкости в том, как и где пользователи отображают свой контент.

Если вы не знаете, что такое шорткоды и как они выглядят, то это архаичные похожие на код текстовые фрагменты, заключенные в квадратные скобки. Выглядят они примерно так:

Этот конкретный шорткод называется embed и встроен в WordPress по умолчанию. Он встраивает видео по URL-адресу прямо в ваш контент. Просто скопируйте и вставьте приведенный выше шорткод на свой сайт, если хотите попробовать его в деле.

За кулисами происходит следующее: когда WordPress обнаруживает шорткод в вашем контенте, он обрабатывается и преобразуется во что-то другое. В нашем примере выше, каждый раз, когда обнаруживается шорткод

WordPress берет URL-адрес из шорткода и сверяет его со списком поддерживаемых поставщиков контента. Найдя совпадение, он получает соответствующий код для вставки iframe и отображает его вместо шорткода.

В чем же тогда проблема? Звучит достаточно просто: вы просто вводите короткий текст со скобками, и готово.

Но тут появляется Shortcode API…

Изобилие шорткодов

Shortcode API открывает разработчикам возможность создания шорткодов. Благодаря этому разработчики могут добавлять собственные шорткоды в свои плагины.

Это здорово: теперь с помощью короткого фрагмента, похожего на код (отсюда и название «шорткод»), как новички, так и продвинутые пользователи могут размещать практически любой контент в любом месте.

По умолчанию в WordPress доступно лишь несколько шорткодов. Их легко набрать по памяти, потому что их совсем немного. Но стоит установить несколько плагинов, как количество шорткодов быстро возрастает до дюжины и более, а в некоторых случаях превышает сотню. У каждого шорткода есть свой набор атрибутов и инструкций по использованию. В каждом плагине, скорее всего, есть какая-то документация о том, как работают все его шорткоды, со списком всех доступных параметров. Но вы сойдете с ума, если попытаетесь запомнить все шорткоды и их атрибуты.

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

Попытки решить проблему

Некоторые плагины пытаются решить эту проблему, предлагая все свои шорткоды в удобном выпадающем списке. Клик по пункту выводит шорткод со всеми возможными атрибутами. Больше нет необходимости запоминать их, и это плюс.

Screen-Shot-2016-06-22-at-11.27.09-AM

Некоторые идут еще дальше и добавляют всплывающую форму настроек с чекбоксами и палитрами выбора цветов для заполнения атрибутов шорткода.

Screen-Shot-2016-06-22-at-11.28.54-AM

Такое решение вроде бы работает. Однако каждый плагин перечисляет только свои собственные шорткоды. Поэтому, если каждый плагин создает свою форму выбора шорткодов, вы неизбежно столкнетесь с ситуацией, когда на экране окажется сразу несколько таких селекторов (со мной такое уже случалось).

Screen-Shot-2016-06-22-at-11.22.41-AM

Иными словами, каждый плагин действует сам по себе и реализует собственное решение для своих шорткодов. Некоторые плагины добавляют новую кнопку рядом с кнопкой «Добавить медиафайл» или внутри TinyMCE.

Вы можете подумать: «Почему бы просто не собрать шорткоды других плагинов и не включить их в свой выпадающий список или селектор шорткодов?» Что ж, именно об этом я и подумал. Но сказать проще, чем сделать. Чуть позже я объясню почему, но сначала давайте посмотрим, как выглядело бы идеальное решение.

Идеальное решение

Идеальным планом было бы создать плагин, который собирает все доступные шорткоды на вашем сайте, выводит их список, а также помогает заполнить все атрибуты. И каждый раз при установке нового плагина все новые шорткоды также автоматически отображались бы перед вами.

Представьте себе централизованное место, где все ваши шорткоды собраны для быстрого доступа. Для каждого шорткода указано, что он делает и к какому плагину относится. А для каждого доступного атрибута предусмотрены подпись, удобный способ выбора значения и описание. Перед вами выпадающие списки, палитры цветов, радиокнопки, переключатели и прочее.

Нечто подобное значительно облегчило бы жизнь создателям сайтов и авторам контента. Больше не пришлось бы проверять документацию или блуждать по разным разделам админки лишь для того, чтобы скопировать сгенерированный шорткод нужного слайдера.

Подводные камни

К сожалению, сейчас сделать что-то подобное весьма непросто. Нет надежного способа узнать все подробности о шорткоде. Можно получить список всех шорткодов, но только их непосредственные теги/имена: получить дополнительную информацию, такую как список атрибутов, их назначение и типы (строка, цвет или число), невозможно. Как нельзя получить хотя бы подобие описания для каждого атрибута.

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

Shortcode API не предоставляет никаких средств для добавления описаний шорткодов, приведения типов атрибутов или описаний самих атрибутов. И пока сам WordPress не добавит единую область для доступа к шорткодам, вряд ли такой инструмент появится.

Заключение

На данный момент задача организации шорткодов лежит на плечах каждого отдельного разработчика. Пока в самом WordPress не появится централизованный метод, приготовьтесь и дальше наблюдать множество кнопок «Добавить шорткод» в панели управления. Стоит ли добавлять нечто подобное в ядро WordPress или нет — это отдельная большая тема для обсуждения.

Альтернатива

Существуют плагины конструкторов страниц, которые подходят к этому иначе. Вместо программного обнаружения шорткодов в них есть сопоставители шорткодов (shortcode mappers), где пользователи могут вручную ввести все данные шорткода. После этого он становится доступен внутри конструктора страниц. Хотя  это работает, такие решения доступны только на вашем собственном сайте.

Мы в Page Builder Sandwich создаем то, что, надеемся, решит эту головоломку с шорткодами. Подпишитесь на нашу рассылку ниже, чтобы следить за нашими успехами.