Куда поместить мой код: плагин или functions.php?

Есть ли понятная схема , чтобы решить, какой тип кода принадлежит плагину или тему functions.php?

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

Он должен объяснить, как обращаться с этими точками (и, возможно, больше):

  • пользовательские типы сообщений и таксономии
  • контактные формы
  • шорткоды
  • пользовательские виджеты
  • add_theme_support ('автоматические фиды-ссылки');
  • Функции SEO, такие как пользовательские элементы meta
  • переключатель темы

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

См. также соответствующий вопрос Чипа Беннета на нашем мета-сайте: Вопросы, специально требующие решения« без плагина »

Связанный: Где я могу поместить фрагменты кода, которые я нашел здесь или где-то еще в Интернете?

78 голосов | спросил fuxia 18 72012vEurope/Moscow11bEurope/MoscowSun, 18 Nov 2012 14:51:04 +0400 2012, 14:51:04

6 ответов


66

Я бы начал с этого вопроса: Является ли функциональность связанной с презентацией содержимого или с поколением /управлением контента или сайта, или идентификатора пользователя?

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

  • Изменение основных фильтров WP (wp_head), таких как канонические ссылки, генератор и другие метаданные HTML и т. д.
  • Сайт Favicon
  • Штрих-коды после содержимого
  • Опубликовать ссылки для связи
  • Скрипты нижнего колонтитула Google Analytics (и аналогичные)
  • Инструменты и средства SEO.
  • и др.

Если функциональность связана с презентацией контента , то это кандидат для включения в тему. На этом этапе я вернусь к критерию Тема-переключателя Raf912 : вы пропустили бы функциональность, когда вы переключаете темы? Если ответ на этот вопрос нет , то функциональность принадлежит теме. Некоторые примеры:

  • Удаление /переопределение основной базы WP Галерея CSS
  • Фильтрация длины выдержки отклика, текст «читать больше» и т. д.
  • Все, что реализовано через add_theme_support () (I предположим, что это должно быть очевидно)
  • Пользовательский CSS

Обычно эти два вопроса обеспечат достаточно четкую линию дифференциации; однако есть исключения.

Пользовательские типы сообщений

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

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

Ссылки в социальных сетях

Точно так же я бы сказал, что ссылки на социальные профили в социальных сетях, все это повсеместно распространено в текущих темах, являются территорией плагина, потому что они не имеют никакого отношения к presentation контента. Лучшим решением для этих профилей будет определение где-то в ядре; однако в настоящее время нет стандартных /консенсусных средств для определения этих ссылок. Являются ли они наилучшим образом определены на уровне установки сайта или для каждого пользователя? Если для каждого пользователя, какая мета-информация пользователя отображается в шаблоне? и др.

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

ответил Chip Bennett 19 12012vEurope/Moscow11bEurope/MoscowMon, 19 Nov 2012 16:53:58 +0400 2012, 16:53:58
45

Легкий тест, в котором лучше всего подходит код:

  • напишите код в функции functions.php
  • тема переключения
  • Вы пропускаете функциональность, не работает ли блог неправильной работы или фрагменты старой темы (например, короткие коды)?

    • yes: поместите его в плагин

    • no: оставьте это в functions.php

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

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

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

ответил Ralf912 18 72012vEurope/Moscow11bEurope/MoscowSun, 18 Nov 2012 16:26:06 +0400 2012, 16:26:06
16

Я не думаю, что есть простой ответ на этот вопрос, но я уверен, что мы сможем сделать блок-схему, чтобы помочь в решении. Вот приблизительная схема такой блок-схемы, которая может и должна быть расширена. Комментарий с предложениями!

  • Этот код будет размещаться на одностраничной установке WordPress?
    • Да. Изменена ли тема сайта только с крупными редизайнами и изменениями функциональности?
      • Да - соответствует ли данный код данному текущему дизайну ?
        • Да: functions.php
        • Нет: плагин
      • Нет (он часто меняется или по прихоти) - Плагин
    • Нет (Multoxite). Вы принимаете многопользовательскую установку. Или это многопользовательское решение, которое позволяет подключаемые модули?
      • Да. Является ли рассматриваемая функциональность конкретной для этого сайта или может /должна использоваться другими сайтами в сети?
        • Конкретно для этого сайта: functions.php
        • Совместно с несколькими сайтами - вы хотите принудительно на каждом сайте?
          • Да: плагин, хранящийся в каталоге mu-plugins или активированный в сети.
          • Нет. Является ли это сетью несвязанных сайтов ? (например, разные клиенты)
            • Да: было бы плохо или непрофессионально, если бы клиент A увидел или активировал плагин, который вы написали для клиентов B, C и D? (например, возможно, это сломает сайт или вызовет нежелательную функциональность)
              • Да: functions.php
              • Нет: плагин
            • Нет: возможно плагин
      • Нет (поддерживается службой, такой как VIP, которая не позволяет плагинам): use functions.php
Некоторые другие мысли, которые я не знал, как вписаться сюда:
  • Родительские темы - иногда с общей функциональностью было бы лучше создать родительскую тему и поместить ее в файл functions.php родительской темы.
  • Каталоги плагинов больших многосайтовых установок могут быстро стать неуправляемыми, поэтому иногда совместная функциональность, используемая низким процентом сайтов (например, <1%), лучше всего дублировать в файлах functions.php.
ответил Matthew Boynes 8 SatEurope/Moscow2012-12-08T21:23:54+04:00Europe/Moscow12bEurope/MoscowSat, 08 Dec 2012 21:23:54 +0400 2012, 21:23:54
5

Отсюда Темы VS-плагинов

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

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

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

function modify_contact_methods ($ profile_fields) {

//Добавить новые поля
$ profile_fields ['twitter'] = 'Twitter Username';
$ profile_fields ['facebook'] = 'URL-адрес Facebook;
$ profile_fields ['gplus'] = 'URL-адрес Google+;

return $ profile_fields;
}
add_filter ('user_contactmethods', 'modify_contact_methods');

http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods

  1. Добавить новый настраиваемый тип сообщения - Код
  2. Добавить новые поля для пользователей - код выше
  3. Добавить новые виджеты - Код
  4. Добавить пользовательские постоянные ссылки - Параметры постоянной ссылки WordPress
ответил Brad Dalton 5 FebruaryEurope/MoscowbWed, 05 Feb 2014 01:00:39 +0400000000amWed, 05 Feb 2014 01:00:39 +040014 2014, 01:00:39
3

Я знаю, что это мертвая лошадь, и что Чип в значительной степени ее покрыл, но хотел добавить несколько мыслей.

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

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

При этом , если вы работаете над wordpress на полу регулярной основе, вам следует серьезно подумать о следующем: :


  1. Создайте скелет плагинов

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

Если вы потратите время на это, вы найдете:

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

Теперь вы можете правильно строить вещи и быстрее выполнять будущие проекты.


  1. Создайте скелет темы

Это должно обрабатывать все, что обычно необходимо в теме:

  • Основная таблица стилей, содержащая стили, которые вы обычно используете (сбрасывает и т. д.).
  • Правильный файл index.php, обрабатывающий все, что вам нужно для любого шаблона
  • Файл functions.php - вы не будете использовать его почти так же, но он все равно будет полезен.

Как только вы это сделаете, создайте скелет дочерней темы, в котором используется ваша основная тема.

  • Добавьте таблицу стилей, ссылаясь на родительскую тему.
  • Добавить файл functions.php

После выполнения этих двух действий создание новых сайтов для людей становится намного быстрее.


Если вы сделаете это, вы можете работать над следующим:

  • Потратьте свое новое свободное время на знакомство с PHP, WordPress, JavaScript, CSS и /или mySQL ... чем больше вы узнаете об этом, тем быстрее вы это сделаете.
  • Обновите свои скелеты с плагином, темой и дочерней тематикой, поскольку вы найдете то, что вам нужно улучшить. Независимо от того, насколько вы хороши, если вы продолжаете учиться, вы найдете улучшения.

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

ответил Privateer 28 Jam1000000amWed, 28 Jan 2015 04:17:24 +030015 2015, 04:17:24
2

Простой ответ таков:

Является ли код зависимым от любой функции, встроенной в определенную тему? Если да, то введите тему.

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

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

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

ответил CO4 Computing 26 +03002015-10-26T08:28:49+03:00312015bEurope/MoscowMon, 26 Oct 2015 08:28:49 +0300 2015, 08:28:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132