7 смертных грехов разработчиков тем WordPress
Поскольку наша компания активно занимается и созданием и поддержкой сайтов на WordPress, через наши руки проходит довольно много разработок, сделанных с разной степенью качества и кривизны. Однако ряд ошибок разработчиков мистическим образом кочует от одного сайта к другому, от одного разработчика к другому. Поэтому я решил свести самые распространенные ошибки в некий список и объяснить каждую из таких ошибок. Конечно же, список далеко неполный и, возможно, мы его будем пополнять, но вот семь самых распространенных ошибок разработчиков WordPress:
- Контент сайта в шаблонах
- Вставка кода счетчиков в шаблоны темы
- Неиспользование функций локализации
- Отсутствие настроек темы
- Регистрация в теме своих CPT
- Изобретение велосипеда с формами, заказами, каталогом товаров
- Логика сайта или бизнес-процессов, запрограммированная в теме
Рассмотрим их подробнее.
1. Контент сайта в шаблонах WordPress
Пожалуй, это самая распространенная ошибка! Суть ошибки заключается в прямом включении любого контента (строк текста, изображений, ссылок) непосредственно в шаблоны сайта.
“Ну и что?” — возразите вы, — “Шаблоны для этого и нужны!” .
Нет, не так! Шаблоны отвечают за вёрстку, компоновку отдельных элементов сайта, а не его информационное наполнение! Смысл очень прост: пользователь должен имеет возможность поменять любой элемент сайта (читай, любую строку на любой странице) из админки. А если этот элемент “зашит” в шаблон, то его изменение невозможно. (Править шаблоны из админки — ужас какой плохой тон!)
Правильное решение проблемы:
- Если вам необходимо вывести список каких либо ссылок, например, меню, список социальных сетей и т.п. — используйте меню! Регистрируйте место под меню и вводите его с помощью wp_nav_menu(). Если нужно выводить всякие иконки, описания к ссылкам и прочее — расширяйте функции меню, а не изобретайте велосипед!
- Если вам необходимо вывести в шаблоне просто строку текста (например, копирайт в подвале) или изображение (например, логотип в шапке) — используйте кастомайзер! Просто создавайте настройки темы и сайта и выводите их в шаблоне.
- Если вам необходимо вывести какой-то настраиваемый или специфичный для конкретного сайта блок HTML (например, формы обратной связи, карты и т.п.) в шаблоне — используйте виджеты и выводите их через dynamic_sidebar()! Регистрируйте новую область и настраивайте ее виджетами.
2. Вставка кода счетчиков в шаблоны темы WordPress
Тоже очень частая ошибка, причем присущая даже премиальным темам, когда те предлагают “простые функции” разместить Google Analytics или другие счетчики в шапке/подвале сайта. Но это совершенно не нужно! Вы всё равно не можете предусмотреть все случаи размещения счетчиков — кому-то нужно очень примитивно просто поставить Метрику, но чаще всего сегодня используется Google Tag Manager, и вся настройка счетчиков ведётся там.
Поэтому не парьтесь — отдайте эту функцию плагинам, которые существуют в великом множестве, и пусть пользователь имеет возможность самому настроить что и как использовать в качестве счетчиков! Вообще не программируйте эту функцию в своих темах!
3. Неиспользование функций локализации
Напомним, что по кодексу WordPress интернализация (локализация) всех своих наработок обязательна! Никто не призывает вас прямо сейчас делать десяток переводов на основные языки мира, но использовать функции локализации обязательно! Иначе вы сами начнете чертыхаться, когда завтра ваш пользователь просто поставит какой нибудь плагин мультиязычности (Polylang или WPML) и вам заново придется переписывать свою же тему!
Поэтому, как минимум, запоминаем аксиому!
Вот так неправильно:
Вот так правильно:
Ну а если вы пишите вот так:
то мне кажется, что вам вообще не следует заниматься разработкой WordPress. Есть масса CMS-систем, основанных на говно-коде, например — Битрикс, лучше вам пойти туда. Такой стиль — не новаторство и не изящество, это — дебилизм!
4. Отсутствие настроек темы WordPress
Речь идет о тех функциях сайта, которые могут и должны быть настроены через кастомайзер или админку:
- Иконка сайта
- TITLE и DESCRIPTION всех страниц
- Меню
- Хлебные крошки
Их НЕ НАДО ПРОГРАММИРОВАТЬ и не надо выводить в шаблонах!!! Просто включите в functions.php эти возможности и всё!
Вот типовой код в functions.php (кстати, а вы знаете что add_theme_support() можно и нужно вызывать напрямую в functions.php, не оборачивая его функцией с вызовом по хуку?):
add_theme_support( 'title-tag' ); // Вывод title add_theme_support( 'html5' ); // Вывод комментариев, поиска и т.п. в HTML5 add_theme_support( 'custom-logo' ); // Кстати, стандартный способ добавить управлением логотипа add_theme_support( 'post-thumbnails' ); // Изображения (миниатюры) в записях add_theme_support( 'yoast-seo-breadcrumbs' ); // Хлебные крошки Yoast SEO |
Всё! Вот готовая и правильная настройка favicon уже работает на сайте:
Кроме того, многие плагины могут добавлять свои возможности, например, см. последнюю строку в коде выше — это функции управления хлебными крошками плагина Yoast SEO. Не изобретайте велосипед, делайте именно так!
5. Регистрация в теме своих CPT (Custom Post Type)
Custom Post Type (CPT) — очень мощная и активно используемая возможность WordPress, которая позволяет организовывать, систематизировать, выводить любой контент на сайте — отзывы, путешествия, товары — всё что угодно! Достаточно зарегистрировать свой тип данных и, возможно, таксономии для него, и получите новый раздел сайта, новую функцию и т.п. Поэтому в темах часто добавляют эти разделы, функции и т.п. как CPT.
Но несмотря на то, что так делают буквально все — это неверно! Причина проста, точнее их несколько:
- Вы перегружаете кодом свою тему и делаете ее монстроподобной;
- Если завтра пользователь (да или вы сами) просто смените тему, то все ваши новые типы (контент вашего сайта!) улетят в тартарары!
- Если пользователю нужно добавить новый тип данных (например, добавить на сайт раздел “Наши путешествия” со своими свойствами) или убрать существующий (об этом будет одна из следующих статей), вам придется менять свою тему.
Поэтому НЕ ДЕЛАЙТЕ ТАК! Не регистрируйте никакие CPT в своей теме!
6. Изобретение велосипеда с формами, заказами, каталогом товаров в теме WordPress
Просто ужасная ошибка! И тем не менее мы часто с ней сталкиваемся. Суть этой ошибки заключается в том, что разработчик реализует какую либо функцию в теме, несмотря на то, что она давно реализована плагином. Верх идиотизма, который нам приходится время от времени видеть — это отправка своей собственной формы (намертво зашитой в шаблон, естественно) на почту через свой же собственный mailer.php.
Скорее всего эти ошибки происходят из-за махрового невежества программиста, который не знает, что сейчас существует 55 512 плагинов (на момент написания этой статьи), которые решают 99,9% всех задач сайта. И решают их хорошо. Поэтому вместо очередного изобретения велосипеда, намного правильнее просто потратить 5 – 10 минут в Google, формулируя свою задачу или вопрос и добавляя слово “wordpress”, например, “one click order wordpress” — попробуйте прямо сейчас!
Скорее всего, вы получите сразу с десяток готовых решений, платных и бесплатных, вам останется только их оттестировать. Старайтесь отдавать предпочтение плагинам с максимальным числом установок и ближайшим временем последнего обновления. Это — лидеры, а поскольку это лидеры, с ними давно интегрированы другие плагины и решения, что позволяет решать не только текущие задачи, но и задачи, которые возникнут завтра. Например, установив в качестве форм CF7 вы завтра с удивлением обнаружите, что с ним хорошо интегрируется GTM, а значит чтобы сделать конверсионную цель для Google Analytics или Яндекс.Метрика на любой форме вашего сайта, вам не нужно делать ничего!
Вот типовые задачи и плагины их решающие:
- Формы на сайте — Contact Form 7.
- Почтовые рассылки и формы подписки на них — MailChimp for WordPress.
- Google Tag Manager (а это все счетчики, Google Analytics, Яндекс.Метрика, всякие JivoSite, пиксели ремаркетинга, пиксели соц.сетей и прочие маркетинговые инструменты) — DuracellTomi’s Google Tag Manager for WordPress.
- Все SEO инструменты (управление TITLE, мета-тегами, каноническими ссылками, хлебными крошками, инструменты вебмастера Яндекс, Google Search Console, robots.txt, карты сайта и пр.) — Yoast SEO.
- Кросспостинг в соц.сети, кнопки социальных сетей, мониторинг сайта и многое-многое другое — Jetpack от WordPress.com.
- Каталог товаров, услуг, цены, заказы и оплаты на сайте, личный кабинет с историей заказов — WooCommerce однозначно.
Конечно же, список далеко неполный, но важно отметить, что в отличие от самописных решений, все эти плагины давно оттестированы на десятках и сотнях тысяч сайтов, как правило, активно развиваются и по возможностям несоизмеримо превосходят любые самопальные пукалки. Именно поэтому мы смеемся, когда нас просят сравнить WordPress, например, с Битриксом или Insales. Они просто несоизмеримы по масштабам и возможностям!
7. Логика сайта или бизнес-процессов, запрограммированная в теме WordPress
По моему глубокому убеждению, тема должна отвечать только за верстку и отображение сайта, и всё! Все функции, логика сайта, типы данных должны реализоваться плагинами. При этом у разработчика есть два пути — сделать один большой плагин-комбайн, который реализует все функции и логику сайта, или сделать несколько маленьких плагинов, каждый из которых реализует одну функцию, например, плагин “Наши путешествия”, плагин “Наши сотрудники” и т.п.
Я сторонник второго подхода, который мы у себя в компании называем Unix-Way — каждый плагин реализует одну функцию, но реализует ее хорошо. Это позволяет эти плагины потом повторно как угодно использовать на других сайтах. Делайте так.
В заключение можно отметить, что разработка сайтов и тем на WordPress — не такая уж и сложная задача, просто важно следовать правилам игры WordPress, которые хорошо описаны и в Кодексе и на профильных сайтах. Поэтому оставайтесь с нами, следите за нашими публикациями, тема разработки у нас будет подниматься теперь очень и очень часто.
Говорить о говнокоде и вордпрессе в одном лице, это как-то странно что ли, ведь вордпресс и есть одно мессиво из лапшекода.
Правда?