Intereting Posts
Подтверждение электронной почты комментатору о размещенном комментарии как показывать сообщения, в которых отсутствует meta_value Риск внедрения sql для пользовательской формы поиска Последние / Последние сообщения Ошибка «Попытка получить свойство не-объекта» с помощью Custom Walker для wp_nav_menu Я пытаюсь получить все приложения для медиа-запросов через ajax в wordpress Выбор всех сообщений от детей определенной таксономии родителей Как переключиться в формат структуры каталога год / месяц из одной папки wp_list_pages shortcode перескакивает над предыдущим контентом Как добавить атрибут к выводу с помощью wp_video_shortcode add_filter Какие области для тестирования модуля при построении плагина? Можно ли открыть страницу с другой темой? Совместное использование динамических боковых панелей в многосайтовых блогах Использование 'posts_where' в запросе с настраиваемым полем Почему сервер предотвращает стили администрирования? (Был: Где хранятся сеансы WordPress?)

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

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

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

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

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

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

См. Также связанный с этим вопрос Чип Беннетт на нашем мета-сайте: вопросы, в которых конкретно задается вопрос «без плагина»,

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

Solutions Collecting From Web of "Куда поместить мой код: плагин или functions.php?"

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

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

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

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

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

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

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

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

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

Социальные медиа-ссылки

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

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

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

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

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

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

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

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

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

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

  • Является ли этот код размещенным на одностраничной установке WordPress?
    • Да. Изменяется ли тема сайта только с крупными редизайнами и сменой функциональности?
      • Да. Является ли конкретный код конкретным для этого текущего проекта ?
        • Да: functions.php
        • Нет: плагин
      • Нет (он меняется часто или по прихоти) – Плагин
    • Нет (Multosite). Вы принимаете многопользовательскую установку. Или это многопользовательское решение, которое позволяет подключаемые модули?
      • Да. Является ли рассматриваемая функциональность конкретным для данного сайта или может / должна использоваться другими сайтами в сети?
        • Конкретно для этого сайта: functions.php
        • Совместно с несколькими сайтами – вы хотите заставить их на каждом сайте?
          • Да: плагин, хранящийся в каталоге mu-plugins или активированный сетью
          • Нет. Является ли это сетью несвязанных сайтов? (например, разные клиенты)
            • Да. Было бы плохо или непрофессионально, если бы клиент A увидел или активировал плагин, который вы написали для клиентов B, C и D? (например, возможно, это сломает сайт или вызовет нежелательную функциональность)
              • Да: functions.php
              • Нет: плагин
            • Нет: возможно, плагин
      • Нет (поддерживается службой, такой как VIP, которая не позволяет плагинам): use functions.php

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

  • Родительские темы – иногда с общей функциональностью было бы лучше создать родительскую тему и поместить ее в файл functions.php родительской темы.
  • Плагинные каталоги больших многосайтовых установок могут быстро стать непослушными, поэтому иногда совместная функциональность, используемая низким процентом сайтов (например, <1%), лучше всего дублировать в файлах functions.php.

Отсюда Темы VS Плагины

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

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

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

  function modify_contact_methods($profile_fields) { // Add new fields $profile_fields['twitter'] = 'Twitter Username'; $profile_fields['facebook'] = 'Facebook URL'; $profile_fields['gplus'] = 'Google+ URL'; return $profile_fields; } add_filter('user_contactmethods', 'modify_contact_methods'); 

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

  1. Добавить новый настраиваемый тип сообщения – Код
  2. Добавить новые поля для пользователей – код выше
  3. Добавить новые виджеты – Код
  4. Добавить пользовательские постоянные ссылки – Настройки Permalink WordPress

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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