Как ограничить совместимость WordPress и зачем это делать.

Перевод статьи:  How to limit WordPress’ compatibility, and why you should.
Автор:  Joe Nyaggah .

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

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

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

Вы как профессионал своего дела всегда цените свое время и чем больше его уходит у вас на разработку, тем меньше ваш доход — это простое уравнение. Объем платформы WordPress подразумевает, что вы с легкостью можете потратить 80% своего времени на удовлетворение 20% маркетинговых потребностей. Было бы намного лучше затрачивать 80% времени для достижения 80% задач в области маркетинга. С точки зрения качества продукта и баланса вашего банкового счета, это самое верное решение.

В своей статье "14 ключевых WordPress функций для ускоренного освоения навыков разработки тем" мы рассмотрели некоторые функции, которые я в обязательном порядке включил в свой файл function.php стартовой темы начинающего разработчика. В рамках этой статьи мы затронем другую важнейшую функцию, которая тоже должна занять место в вашем списке ключевых WordPress функций. Она поможет вам избежать как головной, так и сердечной боли в ходе вашей деятельности.

В WordPres уже предусмотрено ограничение обратной совместимости.

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

Если после проверки выяснится, что сайт клиента по-прежнему функционирует на более ранней версии WordPress, чем текущая стабильная версия, отвлекитесь на несколько секунд и шлепните себя по лицу — сначала по правой щеке, затем по левой. Ведь ваш шаблон не должен вести себя таким образом.

Если вы следите за событиями, то должны были заметить, что примерно с версии 3.6 WordPress в верхней части дефолтного файла functions.php темы появилась функция, которая ограничивала использование дефолтной темы на более новых версиях платформы, чем 3.6. К статьи это вторая по счету функция, определенная в functions.php шаблона Twenty Fourteen.

Она выглядит примерно таким образом:

/**
* Twenty Fourteen работает только на WordPress 3.6 или ниже.
*/
if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) { require get_template_directory() . '/inc/back-compat.php'; }

Нас интересует содержание этого back-compat.php файла. Определенные в нем функции мы собираемся использовать в наших собственных шаблонах.

Не оставляйте места для старых версий WordPess.

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

Определение функции.

Для достижения поставленной цели мы используем PHP функцию version_compare(), с помощью которой сравниваем версию установленного WordPress с последней доступной версией платформы и убеждаемся в том, что последняя установленная пользователем версия не ниже 3.6. То, какой именно версией ограничивать использования своей темы — ваш личный выбор. Используемая здесь версия 3.6 не является рекомендацией, а приведена лишь в качестве примера. Эта функция имеет примерно такой вид:

if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) { // выполняются (или не выполняются) какие-либо действия function butter_never_get_old() { switch_theme( WP_DEFAULT_THEME, WP_DEFAULT_THEME ); unset( $_GET['activated'] ); add_action( 'admin_notices', 'butter_step_your_game_up' ); // здесь мы включаем определенные административные уведомления для пользователя (эта функция еще не определена) } add_action( 'after_switch_theme', 'butter_never_get_old' ); }

То, что делает эта функция, так это определяет функцию поведения butter_never_get_old(), которая выполняется только при вызове функции ядра платформы after_switch_theme(). Итак, помещенная внутри оператора проверки версии системы функция butter_never_get_old() выполняет следующие действия:

  1. Проверяет какая на данный момент установлена версия WordPress.
  2. Убеждается в том, что эта версия выше чем 3.6.
  3. Далее действует в соответствии с важнейшим результатом проверки да/нет:
  4. Если да: активирует тему.
  5. Если нет: тема не активируется. Вместо этого перезапускается или запускается дефолтная тема и из вежливости выводится небольшое миленькое сообщение, в котором пользователь информируется о том, что необходимо обновить его давно устаревшую инсталляцию. Давай, старичок, пошевеливайся!

Ну же, давай! Обнови свою s#%* версию.

Далее нам необходимо определить функцию butter_step_your_game_up(), выводящую на экран административное уведомление, когда что-нибудь пойдет наперекосяк, в смысле если версия платформы ниже нужной.

function butter_step_your_game_up() {
$update_message = sprintf( __( 'Для этой темы требуется WordPress версии не ниже 3.6. В данный момент вы используете версию %s. Обновитесь, пожалуйста.', 'butter' ), $GLOBALS['wp_version'] );
printf( '<div class="error"><p>%s</p></div>', $update_message );
}

В представленной выше функции butter_step_your_game_up() устанавливается корректируемое сообщение об ошибке определенного формата (для этой темы требуется… и т.д.), хранящееся в переменной $update_message, которое впоследствии печатается и выводится на экран пользователя (в рамках ранее определенной функции butter_never_get_old()). А на визуальном уровне это сообщение помещается внутри элемента div с классом error. Впоследствии это позволит вам применить к этому элементу необходимые стили.

Итак, после всего вышесказанного, можно допустить, что наша функция должна иметь следующий вид:

if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) {
// Если версия WP не выше 3.6, то данная функция отключает активируемую новую тему.
// Затем активируется/реактивируется дефолтная тема.
function butter_never_get_old() {
switch_theme( WP_DEFAULT_THEME, WP_DEFAULT_THEME );
unset( $_GET['activated'] );
add_action( 'admin_notices', 'butter_step_your_game_up' );
}
add_action( 'after_switch_theme', 'butter_never_get_old' );
// Эта функция, которая вызывается внутри определенной выше функции,
// выводит соответствующее сообщение и заставляет обладателя
// данной темы обновиться
function butter_step_your_game_up() {
$update_message = sprintf( __( 'Для этой темы требуется WordPress версии не ниже 3.6. В данный момент вы используете версию %s. Обновитесь, пожалуйста.', 'butter' ), $GLOBALS['wp_version'] );
printf( '<div class="error"><p>%s</p></div>', $update_message );
}
}

Сделав все описанное выше, вы тем самым гарантируете, что ваш шаблон не будет активирован на WordPress платформах, версия которых ниже чем 3.6.

Соблюдайте чистоту кода.

Вам следует стремиться к максимально чистой структуре файла function.php. Здесь под чистотой подразумевается то, что в любой момент вы должны без особых усилий проанализировать содержащийся в файле код и при этом мгновенно устанавливать, что каждая из функций делает. Для достижения этой цели мы могли бы поместить нашу функцию в каталог includes.

Если вы еще этого не сделали, в директории вашей темы создайте каталог и назовите его inc. Во вновь созданном каталоге создайте php файл back-compat.php. Скопируйте и вставьте в него код только что созданной нами функции, оставив лишь вызов функции version_compare() в файле functions.php:

if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) { require get_template_directory() . '/inc/back-compat.php'; }

В файл /inc/back-compat.php вставьте определенную нами ранее функцию:

function butter_never_get_old() {
switch_theme( WP_DEFAULT_THEME, WP_DEFAULT_THEME );
unset( $_GET['activated'] );
add_action( 'admin_notices', 'butter_step_your_game_up' );
}
add_action( 'after_switch_theme', 'butter_never_get_old' );
function butter_step_your_game_up() {
$update_message = sprintf( __( 'This theme requires WordPress version 3.6 or newer. You are currently using version %s. Please upgrade!', 'butter' ), $GLOBALS['wp_version'] );
printf( '<div class="error"><p>%s</p></div>', $update_message );
}

Заключение.

Хорошего разработчика всегда очень трудно убедить в том, что нужно ограничивать совместимость создаваемого им кода. Однако сам размер кодовой базы WordPress делает ограничение объема вашего шаблона реальной необходимостью, особенно если речь идет об обратной совместимости. Команда WordPress сама поступает таким образом и это подчеркивает важность такого подхода.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *