Есть ли глобальный файл functions.php, который работает для любой темы?


11

Существует ли какой-нибудь глобальный вид файла functions.php, который подходит для любой темы?

Проблема здесь:

Когда я изменяю файл functions.php в любой теме, мне нужно позаботиться о двух изменениях: во-первых, мне нужно позаботиться об обновлениях этой темы. Во-вторых, мне нужно позаботиться об изменении темы сайта.

Таким образом, вместо внесения изменений в functions.php темы, возможно ли внести изменения в некоторые файлы functions.php, которые не зависят от какой-либо темы?


4
Действительно ли щедрость необходима? На вопрос уже есть хорошие ответы
onetrickpony

Поскольку @Mohit Bumb был тем, кто давал а) награду и б) первым, кто предложил использовать плагин, я бы сказал, что он должен получить очки репутации (назад). ИМО щедрот не было необходимости (и я предполагаю , что он не знал , что он на самом деле отдать его прочь ).
Кайзер

Ответы:


15

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

Существует множество мест, откуда загружается код, которые не являются частью ядра WordPress:

  • wp-config.php Файл конфигурации
  • активная тема (и ее родительская тема для дочерних тем)
  • активные плагины
  • должны использовать плагины
  • вставки (они несколько продвинуты и служат очень конкретным целям)

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


+1 и вам, и @kaiser. Я считаю, что правильный ответ: 1) создать дочернюю тему для размещения пользовательских функций functions.phpили 2) создать собственный плагин для размещения этой функции, чтобы он был переносимым среди различных тем.
Чип Беннетт

@Chip, поскольку вопрос задает вопрос о сохранении кода при переключении тем. Я не считаю дочернюю тему подходящей. Что если вы хотите переключиться на тему, которая является дочерней темой? Плагин наиболее подходит для данных требований.
первое

Вот почему я проголосовал за вас обоих. :) Но вы все равно можете использовать дочернюю тему при переключении тем; просто измените Template:тег в теме ребенка style.css.
Чип Беннетт

@ Чип, ты не понял мою точку зрения. Что если я хочу использовать дочернюю тему? Я создаю дочернюю тему для Twenty Eleven с моим кодом. Затем я хочу переключиться на тему, которая также является дочерней темой Twenty Eleven (или другого родителя). У меня нет пути, кроме как вручную объединить две дочерние темы. Затем, в следующий раз, не меняя тему, я меняю тему. Это беспорядок.
первое

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

6

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

добавьте эту функцию на новую страницу, а не functions.php, и дайте ей уникальное имя, например, yousitename + timestamp или как вам угодно, но уникальную папку для создания с тем же именем заархивировали и загрузите как плагин, так что она наверняка будет работать, пока вы не отключите ее ,

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

/*
Plugin Name: XYZ
*/

3

Как дополнение к @MBTheDeveloper ответ.

Другие варианты будут:

  1. Создайте дочернюю тему для вашей текущей темы и используйте файл functions.php из этой (это «наилучшая практика»).
  2. Используйте includeв своей теме файл php функции и загрузите файл custom-function.php, который содержит ваш собственный код.

2

Не вносите изменения, специфичные для вашего сайта, в файл functions.php темы.

Вместо этого создайте плагин для конкретного сайта. Мне нравится использовать доменное имя сайта, например, «ottopress.com». Затем вставьте свои фрагменты в этот плагин и оставьте его активным только на этом сайте.

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


2

Некоторое объяснение

Для начала вам необходимо понять назначение функции functions.php в теме. Functions.php - это просто файл плагина с любым именем, которое, если оно есть, автоматически загружается Wordpress. Wordpress загружает файл function.php вашей текущей темы для интерфейсных страниц WordPress, а также для фоновых (admin) страниц.

Между плагином и functions.php нет никаких отличий, за исключением того, что плагины имеют имя и могут быть активированы / деактивированы независимо от других плагинов и тем. Файл funtions.php прилагается к вашей текущей теме, и если вы переключаетесь на другую тему, Wordpress использует файл functions.php новой темы, а не ваш старый файл functions.php с пользовательскими изменениями.

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

Обычно тип кода, который должен идти в functions.php:

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

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

Решение

Единственное решение, рекомендованное @Otto, - создать файл плагина. Подход, который вы можете использовать для создания плагина для своего сайта, заключается в том, чтобы создать папку с именем вашего сайта в 'wp-content / plugins' и создать в нем файлы плагинов.

Почему плагины? а не один файл плагина.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.