Как написать плагин для WordPress. Как написать плагин для WordPress Плагины для PHP в виджетах

Здравствуйте, уважаемые читатели блога сайт. Сегодняшнюю публикацию я решил посвятить вопросу написания статей в HTML редакторе WordPress ().

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

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

Использование только HTML редактора в WordPress

Но дело было даже не в HTML, а в удобстве выполнения повседневных и часто встречающихся действий. Да, редактор WordPress, используемый по умолчанию, позволяет одной кнопкой выделять жирным (тег STRONG) и курсивом (EM), вставлять ссылки, цитаты, картинки, нумерованные и маркированные списки, выделять различный код и .

Но мне этого было недостаточно, т.к. в тексте статей я активно использовал внутренние заголовки различных уровней (от H2 до H5), выделял код (PHP, CSS и т.п.) специальными тегами и делал многое другое.

Так вот все, что не входило в стандартный набор инструментов базового редактора Вордпресса, приходилось вводить ручками с клавиатуры, а это вовсе не облегчало труд по созданию постов и сильно доставало.

Но эта проблема успешно разрешилась благодаря замечательному WP плагину Post Editor Buttons, с помощью которого можно добавить сколько угодно много дополнительных кнопок на панель инструментов HTML редактора, запрограммировав их на определенные действия.

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

Т.е эта публикация будет представлять собой развернутое приложение к статье (это не оригинальное название, а взятое из ретвитта одного из читателей , но оно, по-моему, даже более удачное, чем мое оригинальное название).

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

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

Для тех у кого пока нет своего WP блога, но желание стать блогером имеется, или же для тех, кто хочет переехать с другого блогового движка или бесплатной платформы на WordPress, я приведу ссылки на материалы по его установке и первоначальной настройке :

Приступаем к написанию статьи в HTML редакторе WordPress

Итак, для написания новой статьи вам нужно будет зайти в админку (http://sait.ru/wp-admin/) и выбрать из левого меню (если у вас используется стандартное оформление админки WP) пункт «Добавить новую» в области «Записи».

В результате откроется стандартная страница добавления статьи (поста), в которой будет присутствовать поле для ввода ее заголовка и большое поле для ввода текста поста.

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

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

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

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

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

Хотя нет, не совсем так. Не название поста, а заголовок страницы TITLE является важнейшим критерием для поисковиков при определении позиции по тому или иному поисковому запросу ( смотрите во всех подробностях).

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

Обращаю ваше внимание на различие между HTML тегом логического выделения «STRONG» и еще одним тегом выделения жирным «B», а так же между «EM» и «I». Первые из этих тегов (STRONG и EM ) следует использовать не только для привлечения внимания читателей к важным моментам текста.

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

Выбор оптимальной структуры заголовков уровня H1-H6

Теперь что касается тегов заголовков H1-H6, которые тоже могут использоваться в статьях блога для расставления акцентов на нужных словах и фразах.

В этих внутренних подзаголовках, так же как и TITLE, должны содержаться ключевые слова и словосочетания, по которым вы хотите продвинуться в поисковых системах. Поиск будет их учитывать с бОльшим весом, чем обычные. Но опять же, не в коем случае нельзя спамить ключами, ибо за это можно пострадать в современных условиях продвижения.

Кроме того, что внутренние подзаголовки (обычно начиная с уровня H2, H3 и далее) предоставляют дополнительную возможность структурирование текста, что улучшает их восприятие читателями.
Но есть еще один вопрос внутренней оптимизации сайтов, который связан с уровнями заголовков (от H1 до H6), используемыми на страницах WordPress блога.

Основной способ распределения уровней заголовков по вебстранице гласит, что заголовок всей статьи должен быть заключен в тег H1 (самый высокий уровень) и он должен быть один на странице , ну а все внутренние подзаголовки в тексте должны начинаться с H2.

Кстати, хочу посоветовать вам очень удобный способ, позволяющий наглядно увидеть в WordPress, где и какого уровня заголовки используются на том или ином сайте. Это плагин для FireFox () под названием .

Так вот, если вы выберите из меню этого плагина (его меню добавляется в верхнюю часть браузера) пункты «Контуры» — «Контуры заголовков», то все найденные на открытой в данный момент в браузере вебстранице будут обведены разноцветными прямоугольниками, рядом с которыми будет подписан их уровень H1 -H6.

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

Этот Маул в какой-то из своих статей упомянул, что заголовок уровня H1 должен быть на сайте одинаков для всех вебстраниц, но правда свою идею он никак не аргументировал. Тем не менее, я использую именно его схему. Для внутренних подзаголовков использую теги H3 и H4 (иногда и H5).

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

Теперь еще надо немного рассказать о том, как можно в WordPress поменять урони HTML тегов заголовков, например, для статей, или добавить, как это сделал я, один общий для всех уровня H1.

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

/wp-content/themes/Название темы/

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

Давайте посмотрим, где можно изменить уровень основных названий статей, расположенных на главной (за ее вид отвечает файл INDEX) и на страницах с полными версиями статьями (файл SINGLE).

Откроем сначала на редактирование INDEX. У меня в нем названия статей WordPress заключены в HTML тег H2 (второго уровня) и кроме этого они являются ссылками, ибо заключены в тег ссылки A:

" rel="bookmark" title="Постоянная ссылка ">

В постах же (за их внешний вид отвечает файл SINGLE) основные заголовки уже не будут являться ссылками, хотя тоже имеют уровень H2:

Если вас не устроит второй уровень, то просто поменяйте в этих файлах (INDEX и SINGLE) теги H2 на теги H1 и сохраните произведенные изменения (хотя, для главной этого делать нельзя, ибо будет больше одного H1 на странице, что не есть хорошо).

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

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

Обратите внимание, что кнопки с надписями «b» и «i» на самом деле служат для вставки тегов STRONG и EM.

Но все эти дополнительные кнопки можно будет добавить отдельно в WordPress с помощью замечательного плагина Post Editor Buttons , об установке и работе с которым я расскажу уже во второй статье этой серии. Поэтому оставайтесь на связи, подписываетесь на ленту новостей и не пропустите самое интересное.

Удачи вам! До скорых встреч на страницах блога сайт

Вам может быть интересно

Пропало левое меню в админке WordPress после обновления Пустая страница при просмотре больших постов (статей) в WordPress Где скачать WordPress - только с официального сайта wordpress.org Как автоматически добавить атрибут Alt в теги Img вашего блога на WordPress (там, где их нет) Как отключить комментарии в WordPress для отдельных статей или всего блога, а так же убрать или наоборот подключить их в шаблоне Как создать список статических страниц в WordPress с помощью wp_list_pages (улучшаем заработок на вечных ссылках и статьях)
Установка WordPress в деталях и картинках, вход в админку WP и смена пароля Смайлики в WordPress - какие коды смайлов вставлять, а так же плагин Qip Smiles (красивые смайлики для комментариев)
Снижение потребляемой в WordPress памяти при создании страниц - плагин WPLANG Lite для подмены файла локализации
Как войти в админку WordPress, а так же поменять логин и пароль администратора выданные вам при установке движка
Настройки блога на WordPress, которые вы должны сделать сразу после его установки

WordPress – это одна из самых популярных CMS. Изначально WordPress создавался как блоговый движок, но из-за популярности данной системы управления сайтом разработано множество дополнений и плагинов, что позволяет создавать различные виды сайтов. Конечно, как и в других движках в WP, много разных подводных камней, о которых нужно знать вебмастеру.

Основные функции движка WordPress

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

Заголовок H1 в WordPress

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

Создание виджетов WordPress

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

Как очистить head в WordPress от ненужного кода?

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

Бесконфликтное подключение скриптов и стилей в WordPress

Бесконфликтный метод необходим по нескольким причинам: предотвращает конфликт при подключении одного скрипта разными плагинами. При таком подключении метод позволяет объединить несколько js файлов в один и отдавать в сжатом виде браузеру для оптимизации...

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

#button { font-weight: bold; border: 2px solid #fff; }

Чтобы получить результат, аналогичный приведенному выше фрагменту, заключите свой код в эти теги:

Ваш код

Параметр «language» определяет язык и правила подсветки синтаксиса. Поддерживаются следующие значения:

  • actionscript3
  • coldfusion
  • csharp
  • delphi
  • erlang
  • fsharp
  • groovy
  • javascript
  • javafx
  • matlab
  • powershell
  • python
  • scala

Если значение параметра «language» не задано, используется значение «text» (без подсветки синтаксиса).
Код между тегами «code» будет автоматически закодирован для отображения, поэтому вам не стоит беспокоиться об элементах HTML или о чем-либо подобном.

Параметры конфигурации

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

  • autolinks (true/false) — Каждый URL в коде отображается как гиперссылка. Значение по умолчанию: true.
  • collapse (true/false) — Если задано значение true, при загрузке страницы область кода будет свернута. Для того, чтобы развернуть ее, нужно будет кликнуть по ней. Это полезно для больших фрагментов кода. По умолчанию задано значение false.
  • firstline (номер) — Определяет, с какого числа начинается нумерация строк. Значение по умолчанию: 1.
  • gutter (true/false) — Если задано значение false, номера строк будут скрыты. Значение по умолчанию: true.
  • highlight (номера, разделенные запятыми) — Номера строк, которые будут выделены, например, «4,7,19».
  • hmtlscript (true/false) — Если задано значение true, выполняется подсветка HTML/XML-кода. Это полезно при публикации смешанного кода, например, PHP внутри HTML. Работает только с некоторыми языками. Значение по умолчанию: false.
  • light (true/false) — Если задано значение true, номера строк и панель инструментов будут скрыты. Это полезно при размещении фрагмента кода из одной-двух строк. Значение по умолчанию: false.
  • padlinenumbers (true/false/целое число) — Позволяет контролировать дополнение номеров строк нулями. Значение true задает автодополнение, значение false отключает дополнение, число задает фиксированное количество знаков для номеров строк.
  • toolbar (true/false) — Если задано значение false, при наведении на код не будет появляться панель инструментов с кнопками. Значение по умолчанию: true.
  • wraplines (true/false) — Если задано значение false, будет отключен перенос строк. При наличии длинных строк появится горизонтальная полоса прокрутки.
  • title (строка) – заголовок для кода. Может быть полезным в сочетании с параметром collapse .

Примеры использования вышеописанных параметров:

Эта строка не выделена. Эта строка выделена. Эта строка выделена. Эта строка не выделена. Это короткий фрагмент кода с дополнением номеров строк нулями до 4 знаков. //В этом примере отключен перенос строк. Чтобы прочитать текст полностью, вам придется воспользоваться полосой прокрутки. Кроме того, в данном примере отключена нумерация строк и спрятана панель инструментов.

А это фрагмент кода побольше. Здесь выбран язык PHP и выделена строка номер 12.

WordPress.com Code Example

WordPress.com Code Example

Эта строка выделена. Очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень длинная строка.
This is an example of smart tabs.
WordPress.com

Благодарности
Для реализации данной возможности используется проект SyntaxHighlighter (автор Alex Gorbatchev) . Пользователи могут установить соответствующий

Читабельность кода - это очень больная тема, и ей нужно уделять должное внимание. В этой статье вы узнаете о 16 приёмах, которые помогут вам продвинуться в этой теме.

1. Комментарии и Документация

IDE становятся всё более популярны в мире разработчиков, т.к. они предоставляют удобные инструменты для комментирования и документирования кода.

Вот пример:

Вот ещё пример вызова собственного метода:

В этом примере стиль комментирования основан на PHPDoc , а IDE, которой я пользуюсь, - Aptana .

2. Отступы

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

Function foo() { if ($maybe) { do_it_now(); again(); } else { abort_mission(); } finalize(); }

Function foo() { if ($maybe) { do_it_now(); again(); } else { abort_mission(); } finalize(); }

Function foo() { if ($maybe) { do_it_now(); again(); } else { abort_mission(); } finalize(); }

Лично я чаще всего использую стиль номер #2, но иногда перехожу и на #1. Но это всё конечно же дело вкуса. Скорее всего не существует самого “лучшего” стиля, который подошёл бы абсолютно всем. Этим правилам, в первую очередь, нужно следовать тем, кто работает в команде или участвует в написании открытых проектов.

Также существуют стили, которые объединяют некоторые характеристики. К примеру, стандарты написания кода PEAR , где фигурная скобка "{" в условных операторах остаётся на той же строке, а в функциях переносится.

Стиль PEAR:

Function foo() { // на новой строке if ($maybe) { // на той же строке do_it_now(); again(); } else { abort_mission(); } finalize(); }

Также следует отметить, что в этом стиле вместо табов используются 4 пробела.

Вы сможете узнать больше о различных стилях.

3. Избегайте лишних комментариев

Да, комментирование кода - это хорошо; однако тут не нужно перебарщивать. Вот пример:

// получаем код страны $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); // если страна US if ($country_code == "US") { // отобразить форму echo form_input_state(); }

Если работа кода очевидна, то скорее всего не следует писать лишние комментарии.

Если уж не имётся, то можно их немного сократить:

// отобразить форму, если страна US $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); if ($country_code == "US") { echo form_input_state(); }

4. Группирование кода

Чаще всего некоторые задачи требуют написания нескольких строк кода. Поэтому лучше всего объединять такие задачи в отдельные блоки, разделённые пробелами.

Вот простой пример:

// получить список форумов $forums = array(); $r = mysql_query("SELECT id, name, description FROM forums"); while ($d = mysql_fetch_assoc($r)) { $forums = $d; } // загрузить шаблон load_template("header"); load_template("forum_list",$forums); load_template("footer");

Если вы добавите комментарий перед началом каждого блока, то это ещё больше улучшит читабельность вашего кода.

5. Схема именования

Иногда даже в языке PHP можно найти противоречия именования функций. И вот многочисленные примеры:

  • strpos() против str_split()
  • imagetypes() против image_type_to_extension()

Существует несколько популярных стилей:

  • camelCase: первая буква каждого нового слова заглавная.
  • underscores: Подчёркивание между словами: mysql_real_escape_string().

Если смешивать эти техники, то рано или поздно можно попасть в неловкую ситуацию. Если вы работаете над проектом, в котором применяется одна из этих техник, то вам надо следовать их примеру. Всё ещё может зависеть от языка программирования. К примеру, большинство Java разработчиков используют camelCase а PHP разработчики предпочитают underscores.

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

Class Foo_Bar { public function someDummyMethod() { } } function procedural_function_name() { }

Ещё раз скажу, что лучшего стиля не бывает. Просто нужно чего-то придерживаться.

6. Принцип DRY

DRY (Don’t Repeat Yourself) - не повторяйся. Так же известно как DIE: Дублирование - это зло.

Главная задача любой системы, будь то веб приложение или что-то ещё, - автоматизировать повторяющиеся задачи. Этому принципу нужно следовать всегда и везде, особенно если ты разработчик. Один и тот же кусок кода не должен повторяться снова и снова.

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

$this->load->view("includes/header"); $this->load->view($main_content); $this->load->view("includes/footer");

7. Избегайте глубокой вложенности

Читабельность кода резко уменьшается, если у вас глубокая вложенность.

Function do_stuff() { // ... if (is_writable($folder)) { if ($fp = fopen($file_path,"w")) { if ($stuff = get_some_stuff()) { if (fwrite($fp,$stuff)) { // ... } else { return false; } } else { return false; } } else { return false; } } else { return false; } }

Для того чтобы исправить ситуацию, вам следует пересмотреть принцип работы вашего кода и оптимизировать его:

Function do_stuff() { // ... if (!is_writable($folder)) { return false; } if (!$fp = fopen($file_path,"w")) { return false; } if (!$stuff = get_some_stuff()) { return false; } if (fwrite($fp,$stuff)) { // ... } else { return false; } }

8. Лимит длины строки

Всем известно, что процесс чтения становится куда приятней, когда текст разбит на колонки. Это главная причина, по которой наши газеты выглядят именно так:

Подобную технику можно применить и к нашему коду:

// плохо $my_email->set_from("[email protected]")->add_to("[email protected]")->set_subject("Methods Chained")->set_body("Some long message")->send(); // хорошо $my_email ->set_from("[email protected]") ->add_to("[email protected]") ->set_subject("Methods Chained") ->set_body("Some long message") ->send(); // плохо $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = "123""; // плохо $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = "123"";

Большинство разработчиков придерживаются лимита в 80 и 120 символов.

9. Организация Файлов и Папок

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

Помню свои первые проекты, в которых я присоединял файлы. Однако организация у меня сильно хромала. Я создавал папку “inc”, в которой располагал несколько файлов: db.php и functions.php. В процессе написания приложения эта папка пухла и пухла и в конечном итоге было трудно понять что где.

Чтобы решить эту проблему лучше пользоваться различного рода фрэймворками или хотя бы придерживаться их структуры. Вот так выглядит проект на CodeIgniter:

10. Названия переменных

Вообще имена переменных должны быть полностью осмысленными - это в идеальном случае. Для временных переменных можно сделать исключение.

Давайте рассмотрим несколько примеров:

// $i для циклов for ($i = 0; $i < 100; $i++) { // $j для вложенных циклов for ($j = 0; $j < 100; $j++) { } } // $ret для возвращаемых переменных function foo() { $ret["bar"] = get_bar(); $ret["stuff"] = get_stuff(); return $ret; } // $k и $v для foreach foreach ($some_array as $k => $v) { } // $q, $r и $d для mysql $q = "SELECT * FROM table"; $r = mysql_query($q); while ($d = mysql_fetch_assocr($r)) { } // $fp для работы с файлами $fp = fopen("file.txt","w");

11 - Пишите ключевые слова в SQL заглавными буквами

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

12. Разделяйте код и данные

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

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

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

Популяреные PHP Фрэймворки:

Системы Шаблонов:

Популярные CMS

13. Специальный синтаксис для шаблонов

Если вы не хотите использовать систему шаблонов, то вам скорее всего придётся выработать свой собственный стиль внедрения PHP кода в HTML.

А вот и пример:

Hello, username; ?>
|

My Message Board

title; ?>

Forums as $forum): ?>

id, $forum->title) ?> (Threads->count(); ?> threads)

description; ?>

Такая техника позволит вам избежать лишних скобок. Также такой код удачно вписывается в HTML контекст.

14. Процедуральный и объектно ориентированный подходы

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

Объекты прекрасно подходят для представления данных. Пример:

Class User { public $username; public $first_name; public $last_name; public $email; public function __construct() { // ... } public function create() { // ... } public function save() { // ... } public function delete() { // ... } }

Процедуральные методы имеют свою специфическую пользу.

Function capitalize($string) { $ret = strtoupper($string); $ret .= strtolower(substr($string,1)); return $ret; }

15. Читайте Open Source Код

Обычно проекты Open Source пишутся большим количеством разработчиков. С этой точки зрения, изучение написанного кода в подобных проектах может помочь вам набраться опыта. Так что не жалейте на это времени.

16. Рефакторинг

Рефакторинг - это изменение кода без потери функциональности. Его также можно применять для улучшения читабельности.Тут нет места исправлению багов или добавлению функциональности. Вы просто немного меняете структуру вашего кода.

Надеюсь, эта статья была вам полезна! Я что-то упустил? Поделитесь вашим опытом!

Чтобы код WordPress везде был оформлен в одном стиле и удобно читался в ядре, плагинах и темах, рекомендуется соблюдать стандарты написания кода, которые приняты разработчиками WordPress. Эти стандарты очень похожи на стандарт PEAR , однако есть и кардинальные отличия. Рекомендую ознакомится с ними и при создании плагинов или тем, по возможности, их соблюдать.

Кроме стандартов к написанию самого кода PHP, также есть стандарты документирования кода - это комментарии к функциям и хукам: PHP Documentation Standards (англ.)

Одинарные и двойные кавычки

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

Echo "Link name"; echo "$linkname";

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

Отступы

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

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

If (условие) { $foo = "somevalue"; $foo2 = "somevalue2"; $foo_bar = "somevalue3"; $foo5 = "somevalue4"; }

А так код выглядит, если показать невидимые символы табуляции и пробела:

If (условие) { ---$foo.....= "somevalue"; ---$foo2....= "somevalue2"; ---$foo_bar.= "somevalue3"; ---$foo5....= "somevalue4"; }

Для ассоциативных массивов, значения должны начинаться с новой строки. Рекомендуется ставить «последнюю» запятую при перечислении элементов массива - так удобнее добавлять новые элементы...

$my_array = array(---"foo"...=> "somevalue", ---"foo2"..=> "somevalue2", ---"foo3"..=> "somevalue3", ---"foo34".=> "somevalue3",);

Стиль фигурных скобок

Фигурные скобки должны использоваться для всех блоков в стиле, как показано ниже:

If (условие) { action1(); action2(); } elseif (условие2 && условие3) { action3(); action4(); } else { defaultaction(); }

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

Следует комментировать любой код, который интуитивно не понятен.

Используйте фигурные скобки всегда, даже если они не требуются.

If (условие) { action0(); } if (условие) { action1(); } elseif (условие2) { action2a(); action2b(); } foreach ($items as $item) { process_item($item); }

Обратите внимание, что требование использовать фигурные скобки всегда означает, что одиночные конструкции в стиле одной строки - запрещены.

$var = "dangerous""; // необработанные данные, которые могут быть экранированы или не экранированы $id = some_foo_number(); // данные ожидаются как число, но мы не уверены $wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id));

%s используется для строк и %d для целых чисел. Обратите внимание, что они не "в кавычках" ! $wpdb->prepare() сам экранирует строки и добавляет кавычки, если надо. Преимущество prepare() в том, что не нужно помнить о ручном использовании esc_sql() , а также, что строка запроса с плейсхолдерами более наглядна, чем если бы там использовались переменные обернутые в esc_sql() .

Запросы базы данных

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

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

Имена классов, функций, файлов, констант, переменных

Имена функций, переменных, хуков

Используйте строчные буквы a-z в переменных, хуках и названиях функций и никогда CamelCase . Разделяйте отдельные слова нижним подчеркиванием _ . Не сокращайте имена переменных без необходимости; пусть код будет однозначным и само-документированным.

Function some_name($some_variable) { [...] }

Имена классов

Нужно использовать слова с Заглавных_Букв, разделенные подчеркиванием. Любые сокращения (акронимы, аббревиатуры) должны быть ПРОПИСНЫМИ.

Class Walker_Category extends Walker { [...] } class WP_HTTP { [...] }

Константы должны быть словами в ВЕРХНЕМ_РЕГИСТРЕ, разделенные нижним подчеркиванием:

Define("DOING_AJAX", true);

Названия файлов

Должны быть понятные и должны также содержать только строчные буквы, а слова должны разделяться дефисом - .

My-plugin-name.php

Названия файлов классов

Должны быть основаны на имени класса с приставкой class- , подчеркивания в имени класса заменены дефисом, например WP_Error становится:

Class-wp-error.php

Этот стандарт именования файлов справедлив для всех существующих и новых файлов с классами. Однако существуют файлы исключения: class.wp-dependencies.php , class.wp-scripts.php , class.wp-styles.php . Эти файлы имеют префикс class. , точка после слова class вместо дефиса.

Понятные значения переменных в параметрах функций

Булевам, предпочтительны строковые значения. Т.е. вместо true/false при вызове функций лучше использовать какую-то объясняющую значение параметра строку.

Плохой код:

Function eat($what, $slowly = true) { ... } eat("mushrooms"); eat("mushrooms", true); // что означает true? eat("dogfood", false); // что означает false, противоположность true?

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

Хороший код:

Function eat($what, $speed = "slowly") { ... } eat("mushrooms"); eat("mushrooms", "slowly"); eat("dogfood", "quickly");

Когда нужно больше параметров функции, используйте массив $args . Он даже лучше!

Очень хороший код:

Function eat($what, $args) { ... } eat("noodles", array("speed" => "moderate"));

Интерполяция для имен динамических хуков

Для удобства чтения и обнаружения, хуки с переменными в названии должны быть интерполирован (заключен в фигурные скобки { и }), и не должны конкатенироваться:

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

// правильно do_action("{$new_status}_{$post->post_type}", $post->ID, $post); // неправильно do_action($new_status ."_". $post->post_type, $post->ID, $post);

Там, где это возможно, динамические значения в именах тегов также должны быть максимально краткими и точными. $user_id гораздо понятнее чем, скажем, $this->id .

Тернарный оператор

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

Как нужно проверять:

// (если условие выполняется = true) ? (то делаем это) : (иначе это); $music_type = ("jazz" == $music) ? "cool" : "blah"; // (если значение не пустое - ! empty) ? (то делаем это) : (иначе это);

Как не следует писать:

// (если условие не выполняется!= true) ? (то делаем это) : (иначе это); $music_type = ("jazz" != $music) ? "blah" : "cool";

Условия Магистра Йоды

При выполнении логических сравнений, всегда ставьте константы или литералы - слева, а переменную - справа.

If (true == $the_force) { $victorious = you_will($be); }

Если пропустить второй знак = в приведенном примере (признаться, это происходит даже с самыми опытными из нас), то мы получим ошибку PHP и сразу её увидим, потому что код не будет работать. А вот если бы конструкция была обратной - $the_force = true , то условие всегда будет выполняться и никакой ошибки мы не увидим, и можем пропустить такой серьезный баг, который к тому же иногда сложно отловить!

К такому «перевернутому» написанию просто нужно привыкнуть.

Это относится и к == , != , === и!== . «Условия Йоды» для < , > , <= или >= значительно труднее читать и тут их лучше не использовать.

Умный код

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

Isset($var) || $var = some_function(); // или! isset($var) && $var = some_function();

Да - это крутая запись, видно что сделал её опытный программист. Но любому другому разработчику, а зачастую даже и автору, для того чтобы разобраться в такой записи нужно немного вникать и потратить лишние секунды или минуты. Это не очевидная и не понятная запись и её нужно избегать, и лучше её записать длиннее, но понятнее:

If (! isset($var)) { $var = some_function(); }

Оператор подавления ошибок @

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

В то время как этот оператор существует в ядре, он часто используется потому что лень нормально обработать переменную. Его использование настоятельно не рекомендуется , так как даже PHP документация заявляет:

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