Шрифт
Почему не стоит редактировать functions.php и чем его заменить
Play

Почему не стоит редактировать functions.php и чем его заменить

Практически каждый, кто ведет блог на WordPress и самостоятельно занимается его обслуживанием, знает о существовании волшебного файла functions.php. Часто его применяют абсолютно не по назначению, что может привести к существенным проблемам. Давайте вместе более детально разберемся с этим вопросом.

Уверяю, прочитав эту статью, Вы измените свое отношение к плагинам и перестанете пополнять ваш functions.php очередным сниппетом кода.

Плагины и functions.php

Многие владельцы сайтов на WordPress твердо убеждены, что плагины непременно будут нагружать и тормозить блог. А если просто добавить код в functions.php, то это никак не повлияет на нагрузку. Увы, это не совсем так…

Дело в том, что нагрузку вызывает не конкретно плагин, а его неверно написанный код, который, легко может попасть и в functions.php из очередного руководства.

Давайте посмотрим в чем главные отличия плагина и functions.php.

  • фильтры WordPress (например, wp_head для добавления/удаления meta тегов в <head> )
  • шоткоды add_shortcode()
  • социальные кнопки
  • код Метрики, Analytisc и других подобных
  • SEO инструменты
  • пользовательские записи и таксономии ( register_post_type() и register_taxonomy() )
  • настройки темы (меню registern_nav_menus() , сайдбары register_sidebar() , виджеты и пр.)
  • настройка длины анонса, текста ссылки «Читать далее» и т.п.
  • любые объявления с помощью add_theme_support()
  • пользовательский CSS

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

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

Если все еще остались сомнения — сделайте чашечку кофе и обязательно прочтите статью Константина Ковшенина на WP Magazine — «Вся правда о functions.php». В первой части просто и доступно рассказывается почему не стоит верить в мифы о functions.php.

Плагин как альтернатива файлу functions.php

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

Давайте создадим свой плагин — альтернативу файлу functions.php. Не стоит пугаться, он будет выглядеть один в один как любимый functions.php 🙂 . Все, что потребуется — просто добавить пустой плагин на свой сайт. И затем в него можно вставлять необходимый код, как раньше делали это c functions.php.

Прежде всего нам нужно создать на компьютере файл с названием functionsphp.php и добавить в него следующий код:

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

Вторая часть — это функция, выводящая html-комментарий <!-- Плагин Functions.PHP активен --> и хук-событие, запускающее выполнение нашей функции в секции <head> сайта.

Плагин можно установить, загрузив созданный файл на сайт через FTP в директорию /wp-content/plugins/ . А для установки через админпанель, нужно запаковать этот файл в .zip архив или просто скачать уже подготовленный к установке архив с плагином Functions.PHP:

Материал доступен только подписчикам! Как установить плагин

Для установки плагина через админ панель, заходим в Консоли в меню Плагины -> Добавить новый и нажимаем кнопку Загрузить плагин.

В окне загрузки указываем путь к zip-архиву плагина, нажав кнопку Выбрать файл и затем начинаем установку кнопкой Установить.

По завершению загрузки и установки плагина, нам предложат активировать его или перейти на страницу плагинов. Я активировала плагин.

Попадаем на страницу со списком всех плагинов и видим, что установка и активация прошли успешно.

Для демонстрации работы плагин добавляет html комментарий в секцию <head> сайта. Можно проверить наличие этого комментария. Для этого переходим на сайт, нажимаем правой кнопкой мыши и выбираем меню Посмотреть исходный код. В этом окне нажимаем Crtl + F, чтобы активировать окно поиска на странице, и вводим название плагина «Functions.PHP». Если плагин работает, то мы найдем вот такую строку в коде:

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

Как редактировать плагин

На время редактирования плагинов, их лучше деактивировать. Если редактировать активный плагин, то при обнаружении конфликта или ошибки WordPress автоматически отключит его. А это — еще один огромный плюс в пользу плагина вместо functions.php, так как в случае последнего получим неработающий сайт и необходимость заходить и исправлять ошибку через FTP.

Чтобы отредактировать плагин:

  • WordPress до версии 4.9:заходим в Консоли в меню Плагины -> Установленные и справа названием нашего плагина нажимаем ссылку Редактировать.
  • WordPress 4.9 и выше:заходим в Консоли в меню Плагины -> Редактор (при первом входе сразу появляется уведомление, что это не безопасно — выберите Я понимаю), затем в выпадающем списке (справа сверху) выберите название плагина FunctionsPHP и нажмите кнопку Выбрать

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

Что точно стоит добавить в свой плагин Functions.PHP

Далее я приведу несколько примеров, которые помогут добавить код в <head> или перед тегом </body> , а также просто дополнительный функционал на сайт.

Добавление кода в тег <head> вроде Google Analytics

Чтобы подключить скрипт или вывести информацию внутри тега <head> , добавьте этот код с примером подключения аналитики Google. Все, что написано между символами <<<EOT и EOT — строка и она будет выведена на сайте, используйте html.

Добавления кода перед закрывающим тегом </body>

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

Собственные шоткоды

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

В примере ниже добавляется shortcode info , текст внутри которого оборачивается в тег div с классом info .

Теперь всегда используем свой плагин Functions.PHP

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

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

Все что нужно — установить плагин и разместить в нем свой код. И дальше любые куски кода с пометкой «вставить в functions.php» добавляем в наш волшебный плагин.

Александра Вовк

Веб дизайнер, фронт-энд разработчик. Все статьи автора

Получайте новые статьи прямо на свою почту! Комментарии всего: 189

Александра, то есть, можно будет добавить коды в плагин, а не в файл functions. А как это влияет на скорость загрузки с плагином и без него? У меня в файле functions есть коды для удаления старой микроразметки, для микроразметки изображений, топ комментаторов, удаление replytocom в комментариях, шорткод для рекламы в Google Adsense.

Да, именно — в плагин сможете добавить код, который раньше размещали в файле function.php. На скорость загрузки это не повлияет никак, и это самое главное. Во-первых, как я и писала в статье — один и тот-же код будет выполняться с одинаковой скоростью не зависимо места размещения (в плагине или в function.php). Во-вторых, список всех активных плагинов WordPress загружает получением одной настройки (т.е. не важно сколько их активно, запрос один во время получения всех опций сайта). Относительно списка — удаление replytocom и шоткод — будут работать независимо от активной темы. А вот микроразметка — с активной темой скорее всего будут работать, а с другими — зависит от корректности реализации самой функции. Что касается топ комментаторов — функцию определения и подготовки html кода к выводу нужно вынести в плагин, а вот ее вызов (там, где собственно будет выводиться топ) нужно будет добавлять в каждой теме.

Александра, у меня Google Analitics находится в файле header. Код начинается со стрелками Google Analitics, и заканчивается со стрелками End Google Analytics. Вот эти строчки вообще нужно удалить, или их можно вставить в плагин (правильная валидация кода)? Код счетчика нужно вставить между <<<EOT и EOT, а остальной код оставить как у вас в статье? У меня на сайте это файл header, а не functions. Для каждого кода нужно делать свою конструкцию? Я имею ввиду, верхний и нижний код, который обрамляет вставляемый код, как у вас на примерах. А счетчики с подвала, тоже можно будет вставить в этот плагин?

Строчки со стрелками <-- и --> — это HTML-комментарий, удалять его не обязательно, можно перенести в плагин. Все верно — нужно вставить код аналитики между <<<EOT и EOT , а остальной код оставить как в примере в статье. Если нужно еще какой-то код добавить в тег </head> — его можно вставлять в эту-же конструкцию, до или после кода аналитики.

Счетчики с подвала можно вставить в этот плагин (уже вот этой функцией), но при этом нужно обратить внимание, что выведутся они там, где в footer.php указана строчка с текстом <?php wp_footer(); ?> (чаще всего после всей разметки блога, поэтому могут вывестись ниже подвала с копирайтами). Со счетчиками можно проделать другой финт. В плагин добавить свою функцию с кодами всех счетчиков:

А затем в нужном месте footer.php вызвать ее, добавив такую конструкцию:

Попробовал на тестовом сайте. Работают такие коды: удаление разметки hatom, микроразметка изображений, фильтр для плагина AIOSP, удаление replytocom в комментариях. Счетчик GA не проверял, так как он стоит на основном сайте, и проверить его работу на поддомене не представляется возможным. Топ комментаторов проверить не смог, так как он почему-то вообще не работает на тестовом сайте, даже в файле functions. Темы одинаковые, копировал код с основного сайта, я пока в тупике. Счетчики из подвала сначала вставлял в код из статьи. Они отображались в верхнем левом углу сайта, вместо нижнего правого угла. Потом попробовал код из вашего комментария, счетчики вообще не отображались. Наверное, удалять файлы с подвала в плагин необязательно? Желательно разгрузить файл functions. А на скорость загрузки сайта, на количество запросов, эти манипуляции с кодами как-то влияют? Еще вставлял скрип для открытия ссылок с комментаторов в новом окне (он находится в заголовке), но код не заработал ссылки на сайты комментаторов открывались в этом же окне. Я вставлял скрипт в код вместо счетчика GA.

Василий, спасибо за детальный отчет по результатам! Со счетчиком гугл — все будет работать, здесь можно не сомневаться. Нам главное вывести его в блоке <head>, что и делает плагин (с помощью фильтра wp_head).

С топом комментаторов на тестовом может быть такая ситуация: топ строится за последние 30 дней или за текущий месяц (с 1-ого по 30/31 числа), а комментариев за эти даты просто нету.

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

Василий, удалять файлы вообще никакие не нужно. Если речь о коде в подвале — то, естественно, это не обязательная мера, скорее рекомендация. Можно счетчики оставить там-же.

Если говорить о скорости загрузки и количестве запросов — абсолютно никакой разницы нет, где находится код — в function.php или в плагине. Важно только качество кода.

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

С топ комментаторов, да, у меня стояли на стройки на «месяц», исправил на «все время». Все равно он не отображается ни так, ни так. Мистика какая-то. В футер вставлял код, все равно счетчики не отображаются. Сейчас, даже после удаления этого кода из футера, счетчики перестали появляться даже сверху. Это вообще непонятно, почему так стало. А вот еще код подключения библиотеки jquery, его можно поставить в плагин? Гугловский Page Speed рекомендует убрать такие коды из шапки.

Василий, по комментаторам — странно, конечно. Но тут уже без детального осмотра кода не обойтись. Со счетчиками — попробую на своем другом блоге и отпишусь, должны отображаться. А вот подключение jQuery лучше оставить для шаблона. И в шапке желательно оставить только подключение этой библиотеки, потому как при наличии скриптов с асинхронной загрузкой и подключением jQuery в подвале можно нарваться на ошибки, когда какой-то скрипт уже должен выполняться, а библиотека еще не загрузилась. Page Speed — это все-таки только рекомендации, и нужно действовать по ситуации. Существуют и другие способы подключения библиотеки, более быстрые. Но я пока пользуюсь таким вариантом (jquery в head, остальные — в подвале после всей структуры сайта)

Я пробовал методом тыка вставлять коды по разному. Времени потерял, конечно много, но получил некоторый опыт, а это полезно. 🙂 Есть у меня код для сокрытия ссылок с комментаторов. Там нужно вставить три кода. jquery остается на месте, а два скрипта нужно вставить в шапку и подвал. После многочисленных попыток, мне кажется, что для этих скриптов нужно некое обрамление, чтобы можно было вставлять скрипты перед head и body (с подвала может даже убирать не нужно?). При вставке этих скриптов в файлы темы, имя комментатора ничем не отличается от того, что было раньше, ссылки открываются в новом окне. При добавлении в плагин этих скриптов, имя комментатора становится неактивным, перехода на сайт не будет.

Код для замены ссылок комментаторов у Вас весьма непрост 🙂 . Заменяет только ссылку в имени автора или и в самом комментарии? Если только в имени — попробуйте наш вариант, работает на PHP (при создании страницы WordPress-ом). Сниппеты (куски кода), которые я привела в статье, подходят для вставки любого html-кода или скриптов в блоке head или перед закрывающим body. Т.е. в одну функцию можно вставить не только, например, код аналитики, но и скрипт для сокрытия ссылок комментаторов.

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

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

Александра, мой код скрытия сайтов комментаторов заработал. Схема работы такая: подключается библиотека jquery в шапке, в подвале устанавливается код для обработки запроса, а в плагин functions вставляется функция для скрытия ссылок. Таким образом, из файла functions убирается код, что и требовалось. Из того, что есть у меня в файле functions, что-то непонятное пока происходит с топ комментаторов, и еще я не могу проверить работу шорт-кода AdSense. С шапки еще бы убрать Google Analitics, не знаю, будет работать или нет, то тогда, все коды будут убраны. Останется подвал, но он загружается в последнюю очередь, поэтому там коды останутся.

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

Шоткод AdSense обязательно нужно выносить. И Google Analitycs также

Классное решение. Как раз собираюсь менять шаблон. Только вот как подумаю сколько заново делать, так в дрожь бросает. А с вашим решением смена должна пройти гладко. Обязательно опробую. Спасибо.

Да, настоящая проблема смена шаблона на блоге, на котором все счетчики и пр. добавлялись очень давно — надо еще вспомнить что и где 🙂

Вот и я про то же, нужно всё вспомнит, где что дорабатывал. Сегодня уже кое что перенес в плагин. Работает. Класс!

Александра, один вопрос. В примере есть открытие PHP, но нет его закрытия. Возможно пропустили. Или так задумано? 😉

Максим, это сделано намеренно. PHP допускает отсутствие закрывающего тега в конце файла. А вот если вдруг после закрытого тега появится пробел или закрытая строчка — быть беде 😉

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

Спасибо, пробежалась, буду позже разбираться!

Здравствуйте! Потрясающая статья! У меня вот только возник вопрос. Сначала надо скачать файл с function.php с вашего блога, потом установить его на блог, а затем можно будет просто вырезать все коды, которые были добавлены в сам function.php и вставить их в одноименный плагин. И всё будет работать. Так? А что за пометка: «вставить в function.php», для чего она нужна? Объясните пожалуйста

Никита, да — нужно скачать плагин , ссылка на который есть в статье, и установить его на блог. А затем код, который добавляете обычно в function.php темы, можно перенести в плагин. Говоря о пометке «вставить в function.php», я имела ввиду разные уроки в сети, где предлагают добавить код в файл с функциями темы (function.php)

Аааа! Теперь понял! Это такая крутая статья! офигеть! А коды, которые уже установлены в function.php, если перенести. то всё равно будут работать? Или нет?

Никита, да, конечно будут (которые вы сами добавляли, а не настройки темы)

Обалденно! Спасибо вам огромное! Сейчас же приступлю к выполнению! Замечательная статья! Т.е. с лёгкостью можно переносить все коды, которые я сам туда вносил независимо от того в начале или в конце они стояли? Извините за глупые вопросы.

Никита, да. Переносить можно независимо от места расположения. Единственное, что посоветую во избежание проблем — переносите по частям (одну функцию или часть кода, которую вставляли для определенных целей). И каждый раз проверяйте работоспособность. Потому что, если код относится к настройкам темы — может не сработать.

Всё понял! Спасибо вам огромное! очень признателен за ответы!

Спасибо большое! Ваша карта сайта понравилась, ваша идея с плагином понравилась еще больше! Очень рада, что подписана на вас.

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

С праздниками вас! Пусть все задуманное сбывается!

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

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

Александра, спасибо! Вас тоже с праздниками, счастья, успехов и творческого вдохновения! Относительно css-спрайтов — самостоятельно решить этот вопрос будет не легко, необходимо хоть немного разбираться в CSS-верстке. Скрипты и стили, подгружаемые плагинами — отдельный и весьма обширный вопрос. Здесь можно предлагать варианты решения исключительно по конкретному плагину, вроде Contact Form 7 или WP PageNavi, потому как универсального решения нету.

Александра, Вы просто гений! Я сам никакого кода написать не смогу, но понимаю о чем идет речь. Ведь все эти счетчики, фавиконки и прочие технические настройки, которые появляются постепенно в виде доп. строчек в function теперь я могу как-бы «взять с собой» и поставить где угодно! Да и безопасность повышается. Супер!

Дима, да — все именно так. В принципе, для этого и созданы плагины 😉 Взять те-же шоткоды — их место именно в плагинах.

Привет! Интересная затея!

Раньше часто приходилось все восстанавливать: смена шаблона или просто неудачная вставка кода.

А теперь когда стоит микроразметка (и не только), за которую я отдал деньги, то и желание химичить пропало… Да и опыта уже побольше!

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

Иногда и проверенный функционал может дать сбой на оригинале!

Да и так химичу, просто уже более менее знаю что и как! =)

Спасибо,Александра, конечно, еще придется по разбираться, но в основном все понятно изложено.

Лидия, будут вопросы — задавайте, с радостью поможем

Александра, спасибо за ответы. Я вам тут надоедаю вопросами потому что думаю обновить свою тему. Автор убрал там старую микроразметку, а самое главное, в установленной на моем сайте теме есть какие глюки. Перестал работать один плагин, который я запускал время от времени. Другой плагин кэширования, когда я его установил на сайт по совету хостинга, проработал неделю и выдал белый экран. Не работают похожие записи (на поддомене все работает). Это проделки плагина W3 Total Super Cashe. Я решил его попробовать, но улучшения не увидел, вернулся на старый плагин, а в шаблоне начались эти проблемы. И хочется обновиться и боязно в тоже время, вдруг что-то не заработает. P.S. Ваш плагин карты сайта работает отлично, спасибо.

Василий, абсолютно не надоедаете, а наоборот есть интересное продолжение статьи — дополнительные нюансы и решения в комментариях всегда самые сладкие 🙂 С плагинами кеширования надо быть осторожнее. Я отдаю предпочтение WP Super Cache или Hyper Cache, а безусловный фаворит — MaxCache, выдерживает весьма значительную посещаемость. С обновлением темы, конечно, стоит быть весьма осторожным. Лучше всего сделать полный бэкап (и файлов и баз данных), чтобы при необходимости можно было восстановиться полностью или частично. А по плагину тотал супер кеш — его желательно полностью удалить и только потом ставить новый плагин кеширования

Отличная статья! Спасибо за полезности =)

Александра и Владимир, поделюсь итогами своих экспериментов. Я начал экспериментировать на поддомене, а завершил уже на своем рабочем сайте. Мне удалось добавить в плагин все коды из файла functions. Сейчас в файлах functions и header нет постороннего кода. В header только добавлена одна строчка для jquery. Коды в плагин я добавлял, просто вставляя их в файл плагина, только код Гугл Аналитикс добавил через приведенную в статье конструкцию. Я добавил туда такие коды: удаление разметки hatom, фильтр для плагина AIOSP, код для микроразметки изображений, удаление replytocom в комментариях, скрытие ссылок комментаторов, шорткод для рекламы в Google Adsense, топ комментаторов, код Гугл Аналитикс. Все хорошо работает на основном сайте. При проверке скорости загрузки сайта разницы не заметил. Единственное, что плагин functions стал одним из самых «тяжелых» на моем сайте (после добавления кода топ комментаторов). Теперь можно было обновить тему, но почему-то топ комментаторов не работает на уже обновленной теме на поддомене. Это пока меня останавливает от обновления.

Василий, спасибо за подробный отчет. Как видите, по скорости загрузки действительно нету никакой разницы. И не должно быть. Также и по нагрузке — она идентична, код ведь один и тот-же (в P3 думаю сможете отследить перемены по скорости загрузки темы и плагинов до и после использования нашего специального плагина). Василий, а каким кодом топ-комментаторов Вы пользуетесь? Уж очень смущает, что он так и не заработал у Вас на тестовом даже после смены настроек. Бросьте ссылку откуда брали код ,возможно подскажу что-нибудь

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

А в плагине так и не «запустили» или не пробовали?

Топ комментаторов в плагине и работает. Все получилось.

Василий, отлично! Спасибо, что написали

Блииииииин! Почему-то никак не получается запустить плагни. Выдаёт ошибки. Всё сделал по инструкции вроде бы. Пишет: Fatal error: Cannot redeclare redirect_after_first_comment() (previously declared in /home/httpd/vhosts/snow-motion.ru/httpdocs/wp-content/themes/xmarkup/functions.php:531) in /home/httpd/vhosts/snow-motion.ru/httpdocs/wp-content/plugins/function.php on line 26

Никита, прежде чем запускать плагин с перемещенными функциями, эти же функции нужно удалить из function.php темы. А сейчас плагин не активируется, потому что делает попытку объявить функцию redirect_after_first_comment(), которая уже имеется в function.php темы. Еще один безопасный способ добавления функций — проверка на ее существование. Делается вот так:

Копировал все функции в новый плагин, сохранил старый function.php, опять та же беда.

Fatal error: Cannot redeclare my_meta_noindex() (previously declared in /home/httpd/vhosts/snow-motion.ru/httpdocs/wp-content/themes/xmarkup/functions.php:11) in /home/httpd/vhosts/snow-motion.ru/httpdocs/wp-content/plugins/functionphp/functionphp.php on line 18

Никак не пойму, в чём проблема.

Никита, проблема у Вас снова та-же. Только уже с другой функцией, на этот раз виновник — my_meta_noindex(). Ищите ее в файле function.php темы — она все еще там

Всё сделал! Спасибо вам большое.

Александра, очень приятно осознавать, что среди красивых девушек бывают умные! Так держать! )

Юрий, спасибо за комплимент 😉

Приветствую! Тоже задавался вопросом подобным, как не используя файл functuon вставлять подобные коды. Даже хотел написать плагин, но потом подумал, что не один я такой умный и полез в репозиторий. В итоге нашел отличный плагин My Custom Functions. Что-то наподобие вашего, но в фалы плагина лезть не надо, плагин создает отдельное окно для вставки кода. Причем, что хорошо, есть проверка на ошибки т если в коде присутствуют синтаксические ошибки, то плагин код просто не запустит, но сайт при этом будет работать а не вываливаться в белый экран

Артем, достойная альтернатива. Правда для меня сомнительна проверка на ошибки именно плагином — лишняя работа. Ведь сам WordPress при обнаружении синтаксической ошибки в файле активного плагина просто отключит его и уведомит, что произошел сбой и плагин был деактивирован. Поэтому — безопасно. Ну а лезть в код — да, немного необычно для новичков. Но ведь то же самое все делают с function.php без лишних колебаний ))) А редактировать даже активный плагин куда безопаснее, чем файл темы — белый экран не появится точно.

А ну да, согласен, если в плагине ошибки то Вп просто не запускает его, чегойто я подзабыл))) Я особо с этим плгинов не ковырялся, видомо он использует стандартный функционал ВП, просто сообщения выводит другие и без указания конкретной ошибки, что не всегда удобно

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

Конечно видел, Василий, потому и за интересовался таким способом)))

Александра, мне все-таки удалось вставить код счетчиков и остального из файла footer.php в плагин. Для одного скрипта и ссылки использовал конструкцию из статьи, а для счетчиков коды из вашего комментария. Теперь в подвале есть только код для вызова функции кода счетчиков. Раньше у меня ничего не получалось, потому что в коде для вызова функции есть лишний пробел (первая строка, после functionphp_footercounters). Если пробел убрать, то все начинает работать.

Василий, да, с пробелом была ошибка, действительно. В комментарии исправила. Отлично что все получилось!

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

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

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

Cheshir, спасибо! Да, по скорости загрузки планируем еще материал публиковать, так как тема важная.

Да, эта тема очень важная. Будем ждать новых статей.

Добрый день Александра. Очень понравилось Ваше решение с созданием плагина вместо редактирования файла function.php Я создал плагин, установил, он активен все ок. Я делаю интернет магазин на Woocommerce. В шаблоне все супер, но вот когда например название (title) у товара длиннее чем у других, то он сползает, т.е. когда товары стоят в сетку выделяется жутко. Суть задачи у меня состоит в том чтобы обрезать длину отображаемого title товара до определенного количества символов и если вдруг title длиннее, ставить «…»

Нашел в интернете такое решение

Сначала в файл functions.php вашего шаблона вставьте следующую функцию:

Затем в шаблоне поменяйте код, который выводит название поста — — на такой:

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

Кстати у меня тег находится в single.php

Есть ли необходимость в создании плагина для single.php

Затем в шаблоне поменяйте код, который выводит название поста — — на такой:

У меня все сработало. Помог такой код

Где $limit = 18; это максимальное число символов И где ‘…’ в коде $title = mb_substr($title, 0, $limit). '. '; это символы после сокращения

СПАСИБО ВАМ ОГРОМЕДНОЕ ЗА ПЛАГИН

Правда нашел недостаток этого способа Он сокращает отображение title везде и в админ части и в самой карточке товара фронт-офиса Нужно решение )))

Как сделать так чтобы обрезалось отображение title только во фронт офисе в витрине товаров?

Нашел такое решение

Оно не трогает Титл в админ панели Но обрезает его не только на витрине, но и когда заходишь в товар во фронт офисе

Ренат, хоть и с опозданием, но отвечаю на Ваш вопрос. Самое первое решение — тоже должно работать с плагином, там скорее всего при ставке в single.php была допущена ошибка. Второй вариант с использованием фильтров — более правильный.

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

Ренат, этот вопрос весьма узко-направлен и далек от темы статьи. Фактически, Вам нужно проверять не только в цикле вывод заглавия, а и еще на какой странице. Например, функция is_single() проверят отображается ли сейчас отдельная запись или другая страница. Она должна сработать в Вашем случае, пробуйте так:

Нашел решение на форуме WordPress. Цифра 15 это то, на сколько символов обрезать заголовок, вторая на сколько символов вернуть при входе в товар. Благодаря Вашему плагину эксперементы прошли безболезненно, в случае ошибки он просто деактивируется. Александра еще раз спасибо за идею. Ниже приведу решение возможно кому-то кто владеет интернет магазином оно пригодится.

Ренат, в данном контексте цифра 15 — это проверка длины заголовка (т.е. если в заголовке больше 15 символов, то обрезаем), а в строке ниже 50 — это и есть длина, до которой нужно обрезать заголовок.

Наконец, то попробовала данный плагин на одном из блогов, здорово! Все работает. В ближайшие дни и на других блогах перенесу в плагин коды

Александра, во-первых — большое человеческое спасибо, объясняете грамотно и доступно. Нашла на вашем блоге ответы на спорные вопросы. Еще один вопрос. Мне очень понравилась фишка «как отблагодарить авторов». Отблагодарить пока нет возможности, извините:-) Подскажите в двух словах, как это можно реализовать. На моем сайте с 3 статьями для людей авторы комментов настоятельно рекомендуют установить копилку. Заранее спасибо. С уважением, Алена

Алена, если ну совсем в двух словах, то самый простой способ — установить форму пожертвований от Яндекс Денег. Просто настраиваете все в конструкторе и добавляете код себе на сайт в любое место.

Спасибо за ответ, Александра

Хорошая статья. Чего уж там, сейчас есть даже целые блоги — типа «WordPress без плагинов». Делятся советами ценными из разряда — как превратить сайт на WP не пойми во что. Спасибо вам за ваши плагины — установил оба. Оба нравятся. Давайте больше хороших плагинов ))

Dmitry, спасибо! Есть идеи доработки старых и создания новых плагинов, так что обязательно будут новинки.

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

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

Александра, здравствуйте. Подскажите, можно ли в этот плагин вставить сторонний скрипт, типа <script type="…. который должен находиться между тегами

Ольга, да — это можно сделать по аналогии с аналитикой гугла

Спасибо, Александра. Единственное, правильно ли я понимаю, что мне надо будет заменить в этой конструкции

googleanalytic на название своего скрипта в начале и в конце кода.

Если у Вас будет две таких конструкции — одна с кодом аналитики (как у меня в примере), а вторая — с Вашим скриптом, то нужно будет название functionsphp_googleanalytic заменить на что-то вроде functionsphp_myscript в первой и последней строчке. Или же можно использовать один блок, а скрипты разместить друг под другом между символов <<<EOT и EOT; . Если такой блок с кодом будет один — менять не обязательно, это лишь название.

Спасибо, Александра. Всё понятно.

Как я рад, что набрёл в инете на ваш сайт! Большое спасибо за ваши статьи, особенно за эту. Сразу же начал экспериментировать с собственными плагинами для function.php и shortcodes.pfp, чтобы без болезненно редактировать исходный шаблон. Всё, как вы сказали сделал и установил. Всё работает! Смущает только, что при установке моих плагинов для function.php и shortcodes.php в обоих случаях вывелось сообщение: Плагин произвёл при активации 3 символов неожиданного вывода. Если вы заметите ошибку «header already sent», проблемы с RSS-лентами или другие неполадки, попробуйте деактивировать или удалить этот плагин. Что это за предупреждение? Что-то неправильно перенёс?

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

Попробуйте переносить функции по одной и каждый раз активировать плагин — тогда сможете определить, какая часть кода вызывает такое предупреждение. Вот его можно мне в комментарий прислать — попробуем посмотреть причины. Также проверьте, чтобы в конце файла не было закрывающего php-тега ?>

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

Причина оказалась в кодировке файла. Сохраняйте файлы в кодировке UTF-8 without BOM

Ну вот и у нас хорошая новость. Потратили вечер по теме статьи и не жалеем. Сразу советую всем подписываться, так как подписчикам открывается в статье интересная информация. Для такого уровня «программеров» как я, лучше скачать готовое и установить. Спасибо! С помощью плагина Functions.PHP нам с мужем удалось наконец-то поставить на блоге скрипт от копирования. Скрипт был, но вставлять самостоятельно не решались. Плагин действительно отключается, когда что-то сделано неверно. Просто СПАСИБО за подробнейшую информацию.

Подскажите пожалуйста где поменять код счетчика на wordpress ? Установлен плагин

Руслан, нужно найти где именно у Вас добавлен код счетчика. Скорее всего, он находится в файлах темы (Внешний вид -> Редактор) header.php или footer.php. Также (в зависимости от темы), код счетчика может быть добавлен через специальные опции (тогда будет страница настроек темы). Установка и активация данного плагина FunctionsPHP только позволит Вам добавлять в него свой код, выполняющий определенные действия. По-умолчанию, он пустой.

Спасибо за ответ. Извините я написал не в том посте. Меня интересует отображение ип адресов в яндекс метрики. У меня установлен плагин на сайте, но я не могу найти код счетчика. Ни в Хеадере ни в футоре, нигде его нет. Мне кажется что плагин откуда то удаленно берет код Вот данный пост.

Руслан, напишите в комментарияъ к той теме название плагина — возможно, смогу подсказать

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

Добрый день! Очень ваша помощь. Похоже, что проблема у меня такая же как и у Никиты (выше) Нужно всего-то вставить Код с yaParams для отображения в Метрике IP адресов <?php echo'var yaParams =

📎📎📎📎📎📎📎📎📎📎