7 смертных грехов разработки под WordPress

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

1. Загрузка своей собственной копии jQuery.

Отлично, поехали грузить… Вы серьезно желаете сделать это?! Загрузка своей собственной копии jQuery – идеальный способ начисто все разрушить.

picard_gen

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

<?php
 if( !is_admin()){
wp_deregister_script('jquery');
wp_register_script('jquery', ("http://cdn.jquerytools.org/1.1.2/jquery.tools.min.js"), false, '1.3.2');
//wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"), false, '1.7.2');
wp_enqueue_script('jquery');
}
?>

Отключение поставляемой с WordPress копии jQuery и загрузка своей копии библиотеки вполне может нарушить функционирование всех javascript-скриптов в других темах и плагинах.

Решение: не делайте так! Просто используйте копию jQuery, поставляемую с WP.

2. Некорректная загрузка JS/CSS-файлов.

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

Решение: используйте wp_register_script/wp_enqueue_script.

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

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

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

Ниже представлен довольно простой пример того, как сделать это:

add_action( 'wp_print_scripts', 'deregister_cf7_javascript', 15 );
function deregister_cf7_javascript() {
    if ( !is_page(15) ) {
        wp_deregister_script( 'contact-form-7' );
    }
}
add_action( 'wp_print_styles', 'deregister_cf7_styles', 15 );
function deregister_cf7_styles() {
    if ( !is_page(15) ) {
        wp_deregister_style( 'contact-form-7' );
    }
}

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

3. Отсутствие экранирования пользовательского ввода в SQL, а также кодирования пользовательского ввода на выходе.

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

hacker-448x539

Решение: Убедитесь в том, что вы санитизировали пользовательский ввод, чтобы защититься от SQL-инъекций, и закодировали его при выводе на экран, чтобы предотвратить XSS-уязвимости. В кодексе есть неплохая статья, посвященная валидации данных.

4. Обращение к многочисленным сторонним сервисам.

social

Использовать стороннюю регистрацию или плагины для входа на сайт полезно лишь в том случае, если вы имеете значительное количество пользователей, активных в определенной социальной сети. Вход через социальные сети или сервисы заключает в себе определенное удобство для пользователей, помогает привлечь более количество людей. Однако если вы предлагаете возможность регистрации и входа на сайт через Twitter, FB, G+ и другие социальные сервисы только для того, чтобы расширить базу пользователей, то в таком случае вы поступаете неправильно. Это не является необходимым шагом и может привести к медленному съезжанию вниз в поисковой выдаче, поскольку ваш сайт будет долгое время подгружать все эти сторонние сервисы.

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

5. Ожидание слишком многого от виртуального хостинга.

buffet-448x300

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

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

6. Использование «admin» в качестве имени пользователя и небезопасного пароля.

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

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

7. Безмерное добавление разной функциональности в functions.php.

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

stormtroopers-700x393

Помимо всего прочего, изучение различных конфликтов и проблем, возникших после обновлений, станет настоящим кошмаром для разработчиков. Допустим, к примеру, что вы добавили массу разной функциональности в файл functions.php  вашей темы. В таком случае вы попросту не можете постепенно один за другим отключать лишний функционал, чтобы выявить «виновника» возникших проблем. Если бы вся функциональность была бы разбита по плагинам, то в таком случае вы бы легко определили ошибку и нашли бы ту часть кода, которую нужно обновить или удалить.

Решение: создавайте функциональный плагин каждый раз, когда вы хотите вставить что-либо в файл functions.php. Это займет чуть больше времени, однако поможет оградить вас от потенциальных проблем в будущем.

Источник: wpmu.org

Блог про WordPress
Комментарии: 19
  1. Александр

    Я совсем не знаю js, подскажите пожалуйста.

    Мне в тему для WP пришлось загрузить JQ библиотеку специально для скрипта слайдер шоу (прям в одну папку со скриптами), так как иначе работать он отказывался,

    как сделать, что бы скрипты работали со встроенной в WP библиотекой?

    1. Дмитрий (автор)
  2. glowingsword

    Всё верно… Хорошо, что вы описали данные проблемы в одном месте. Я настолько увлёкся расширением functions.php, что не сразу заметил, что пора выносить основную часть функционала в модули. Тем более, что только часть функционала касалась собственно функционала темы. Остальной код создавал типы контента с произвольной таксономией, и никак не касался работы темы.

  3. Вадим

    Что за чушь написали про хостинг…
    Как это мне. лучше не доверять «виртуальному хостингу» и поискать «хостинг»? Вообще виртуальный хостинг — это вид хостинга. А вы советуете не понятно что. Может имеется ввиду, что лучше сразу VDS?))

    1. glowingsword

      Думаю, автор имел в виду ненадёжность вирутуального хостинга. Так, как на сервере может крутится мало сайтов, и он будет работать с приемлемой скоростью, а потом на этот же сервер воткнут столько сайтов, что ваш сайт будет еле ворочаться на этом сервере… Такова специфика shared-хостинга, когда на одном сервере может крутится много хостов.

      1. Дмитрий (автор)

        Да, именно это и имелось в виду.

  4. Александр

    4. Пункт. Давно уже есть немало различных «агрегаторов» авторизации через сторонние сервисы. Таких как Loginza и прочие. Которые авторизируют во всем, причем по необходимости. А если говорить про так называемые «Виджеты сообществ» то можно программно задать отображение виджета(как раздела сайдбар) с ними через раз + показ сообщества в той или иной сети. То есть случайный выбор из Facebook Vkontakte G+ Twitter и т.д. Для корректного индексирования, вывод сети можно разместить в iframe. Если размещение виджета сети в таковом не противоречит правилам безопасности js дополнения.

  5. Дмитрий (автор)

    Полагаться на агрегаторы тоже опасно. Та же Loginza — достаточно глючный сервис. Некоторые пользователи просто не могут через него войти, либо приходится долго ждать, пока вход будет произведен. А представьте, что будет, если он выйдет из строя из-за каких-нибудь атак. Здесь тоже далеко не все так радужно.

  6. Роман

    Подскажите, куда нужно добавить код, касающийся CF7?

    1. Дмитрий (автор)

      Не совсем понял, о чем вы. Если вы интересуетесь, как добавить форму в контент записи, то вот вам руководство (на инглише):

      http://contactform7.com/faq/#How_can_I_add_a_contact_form_into_my_post_content

  7. Роман

    В п 2. «Некорректная загрузка JS/CSS-файлов» приведен код с условием подгрузки скрипта формы на странице с конкретным ID, а не на каждой странице. Куда этот кусок вставить, в functions.php? Сам плагин деактивировать?

    1. Дмитрий (автор)

      Да, в functions.php темы. Плагин лучше деактивировать, но это, я думаю, не обязательно.

  8. Роман

    Спасибо

  9. Елена

    Здравствуйте! Как реализовать загрузку jquery на определенных страницах?

    1. anton

      Елена, jquery необходим, поэтому он грузится на всех страницах, но если вам нужно просто знать как это сделать? то вот так:

  10. Сергей

    Насчёт соцсетей согласен полностью — тормозят, а вот если картинки, допустим, подгружать с trueimages. Стоит попробовать?

    1. Дмитрий (автор)

      Тут двоякие мнения. Можно, конечно, брать изображения с сервера. Есть вариант загрузки изображений с облака, помогает освободить место.

  11. Весёлый

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

    1. Дмитрий (автор)

      Да, лучше сразу подстраховаться, чем потом кусать локти.

Добавить комментарий для Елена Отменить ответ

Получать новые комментарии по электронной почте.