Ошибка HTTP 413 Request Entity Too Large появляется, когда пользователь пытается загрузить на сервер слишком большой файл. Размер определяется относительно лимита, который установлен в конфигурации. Изменить его может только администратор сервера.
Что делать, если вы пользователь
Если вы видите ошибку 413, когда пытаетесь загрузить файл на чужом сайте, то вам нужно уменьшить размер передаваемых данных. Вот несколько ситуаций.
- Если вы пытались загрузить одновременно несколько файлов (форма позволяет так делать), попробуйте загружать их по одному.
- Если не загружается изображение, уменьшите его размер перед загрузкой на сервер. Можно сделать это с помощью онлайн-сервисов — например, Tiny PNG.
- Если не загружается видео, попробуйте сохранить его в другом формате и уменьшить размер. Можно сделать это с помощью онлайн-сервисов — я использую Video Converter.
- Если не загружается PDF-документ, уменьшите его размер. Можно сделать это с помощью онлайн-сервисов — я обычно использую PDF.io.
Универсальный вариант — архивация файла со сжатием. Ошибка сервера 413 появляется только в том случае, если вы пытаетесь одновременно загрузить слишком большой объем данных. Поэтому и выход во всех ситуациях один — уменьшить размер файлов.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Исправление ошибки сервера 413 владельцем сайта
Если вы владелец сайта, который при загрузке файлов выдает ошибку 413, то необходимо изменить конфигурацию сервера. Порядок действий зависит от используемых технологий.
Чтобы понять, что стало причиной ошибки, нужно посмотреть логи. Это поможет сэкономить время. Вот подробная инструкция, которая рассказывает, как посмотреть логи в панели управления Timeweb. В зависимости от того, какая информация будет в логах, вы поймете, как исправлять ошибку 413.
Увеличение разрешенного размера для загрузки файлов на Nginx и Apache
На Nginx максимально допустимый размер файла задан в параметре client_max_body_size. По умолчанию он равен 1 МБ. Если запрос превышает установленное значение, пользователь видит ошибку 413 Request Entity Too Large.
Параметр client_max_body_size находится в файле nginx.conf. Для его изменения нужен текстовый редактор — например, vi.
Подключитесь к серверу через SSH и выполните в консоли следующую команду:
Во встроенном редакторе vi откроется файл nginx.conf. В разделе http добавьте или измените следующую строку:
client_max_body_size 20M;
Сохраните и закройте файл. Затем проверьте конфигурацию файла:
Перезагрузите сервер следующей командой:
После перезагрузки будет действовать новая конфигурация с увеличенным лимитом на размер загружаемого файла.
На Apache опция, устанавливающая максимально допустимый размер загружаемого файла, называется LimitRequestBody. По умолчанию лимит не установлен (равен 0).
На CentOS главный конфиг располагается по адресу /etc/httpd/conf/httpd.conf. На Debian/Ubuntu — по адресу /etc/apache2/apache2.conf.
Значение задается в байтах:
LimitRequestBody 33554432
Эта запись выставляет максимально допустимый размер 32 МБ.
Изменить конфиги можно также через панель управления. Я пользуюсь ISPmanager, поэтому покажу на ее примере.
- Раскройте раздел «Домены» и перейдите на вкладку «WWW-домены».
- Выберите домен, на котором появляется ошибка, и нажмите на кнопку «Конфиг».
Появится вкладка с конфигами Apache и Nginx. Вы можете редактировать их вручную, устанавливая лимит на размер загружаемого файла.
Исправление ошибки на WordPress
На WordPress ошибку можно исправить двумя способами.
Способ первый — изменение разрешенного размера в файле functions.php. Этот файл отвечает за добавление функций и возможностей — например, меню навигации.
- Откройте файловый менеджер.
- Перейдите в папку public.html.
- Откройте директорию wp-content/themes.
- Выберите тему, которая используется на сайте с WordPress.
- Скачайте файл functions.php и откройте его через любой текстовый редактор.
В панели управления на Timeweb можно также воспользоваться встроенным редактором или IDE — путь будет такой же, как указан выше: public.html/wp-content/themes/ваша тема/functions.php.
В конце файла functions.php добавьте следующий код:
@ini_set( 'upload_max_size' , '256M' ); @ini_set( 'post_max_size', '256M'); @ini_set( 'max_execution_time', '300' );
Сохраните изменения и загрузите модифицированный файл обратно на сервер. Проверьте, появляется ли ошибка 413.
Второй способ — изменение файла .htaccess. Это элемент конфигурации, который способен переопределять конфигурацию сервера в плане авторизации, кэширования и даже оптимизации. Найти его можно через файловый менеджер в папке public.html.
Скачайте файл на компьютер, на всякий случай сделайте резервную копию. Затем откройте .htaccess в текстовом редакторе и после строчки #END WORDPRESS вставьте следующий код:
php_value upload_max_filesize 999M php_value post_max_size 999M php_value max_execution_time 1600 php_value max_input_time 1600
Сохраните файл и загрузите его обратно на сервер с заменой исходного файла. То же самое можно сделать через встроенный редактор или IDE в панели управления Timeweb.
Исправление ошибки при использовании PHP-скрипта
Если файлы загружаются с помощью PHP-скрипта, то для исправления ошибки 413 нужно отредактировать файл php.ini. В нем нас интересуют три директивы.:
- upload_max_filesize — в ней указан максимально допустимый размер загружаемого файла (значение в мегабайтах);
- post_max_size — максимально допустимый размер данных, отправляемых методом POST (значение в мегабайтах);
- max_execution_time — максимально допустимое время выполнения скрипта (значение в секундах).
Например, если я хочу, чтобы пользователи могли загружать файлы размером до 20 МБ, то я делаю так:
max_execution_time = 90 post_max_size = 20M upload_max_filesize = 20M
Если все значения указаны верно, то файлы с допустимым размером будут загружаться на сервер без ошибок.
То же самое можно сделать через панель управления. Например, в ISPmanager порядок будет такой:
- Авторизуйтесь с root-правами.
- В левом меню раскройте раздел «Настройки web-сервера» и перейдите на вкладку «PHP».
- Выберите используемую версию и нажмите на кнопку «Изменить».
На экране появится список параметров. Они отсортированы по алфавиту. Установите необходимые значения для параметров max_execution_time, post_max_size и upload_max_filesize. Изменения применяются автоматически.
Всем доброго времени суток! Бывают такие ситуации когда при добавление кода в файл «Функции темы» (functions.php) WordPress сайт перестает работать. Что делать в такой ситуации? Немного расскажу про себя, как я выходил из такого положения. Ещё ни чего почти не умея, захотел немного добавить каких то функций в тему блога. Как мы обычно делаем, вбиваем в поиск нужную нам фразу и переходим по ссылке на страницу с инструкцией. Автор пишет добавьте этот код сюда, этот туда и будет вам счастье. Таких уроков из серии без плагинов много в сети.
Хотя мне кажется, кто пишет уроки для пользователей платформы ВордПресс, должны предупреждать своих читателей о последствиях которые могут возникнуть при неправильном внесении изменений в файл и как это исправить. Чтобы потом не отвечать в комментариях испуганным посетителям на вопрос — Сайт перестал работать, что делать? Помогите!
Если вы редактируете тему файл (functions.php), используемую в настоящий момент, подумайте о возможном нарушении работоспособности сайта.
При обновлении темы сделанные вами изменения будут перезаписаны.
Чтобы избежать этого, можно создать дочернюю тему. Или использовать специальные плагины для безопасного добавления PHP кода в файл functions.php.
Добавил как то я (по инструкции на каком то блоге) код в функцию темы, обновляю файл и передо мной возник белый экран. Ужас. Блог / сайт WordPress перестал работать. Пришлось переустанавливать ( вот дурак был) все заново — движок; шаблон и пару своих статей. А надо было всего то, зайти на свой хостинг, открыть файл functions.php в теме блога:
и удалить вставленный код. Сохранить файл и блог опять работает. Если Вы например не помните какой код нужно удалить, найдите свой шаблон блога на вашем компьютере (скачанную тему) и замените на хостинге файл functions.php файлом из папки с темой. Если, это вам не помогло, тогда попробуйте следующий вариант (подойдёт для тех, у кого есть тема в запасе).
Зайдите на свой хостинг и удалите проблемную тему. WordPress активирует тему по умолчанию (Twenty Fifteen, Twenty Eleven, Twenty Twelve или другие) и ошибка исчезнут. Потом можете вставить старую версию файла, исправить проблемы в теме и включить его позже. Настоятельно рекомендую держать в каталоге одну из тем, которая идет по умолчанию при установке WordPress. Даже если не собираетесь использовать.
Если у вас нету запасной темы на хостинге, тогда следующий вариант.
Попробовать закачать папку с вашей рабочей темой на сервер.
То есть, вам нужно взять первоначальную версию темы и залить её на хостинг, предварительно скачав на всякий случай старую папку с измененным шаблоном на компьютер.
- Заходите на хостинг в раздел шаблонов /wp-content/themes/ваша_тема.
- Скачиваете тему на компьютер.
- Закачиваете первоначальный вариант темы на сервер.
- Пробуете войти в админку.
Важно: Перед тем как внести изменения в «Функции темы» (functions.php) сделайте копию файла. Тогда, Вы без всяких проблем восстановите работоспособность вашего любимого сайта.
А у меня на сегодня всё. Всего доброго. До встречи на страницах блога WordPress mania.
Получил такой файл:
<?php
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
if ( ! defined( '_S_VERSION' ) ) {
define( '_S_VERSION', '1.0.0' );
}
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'm1-style', get_stylesheet_uri(), [], _S_VERSION );
wp_style_add_data( 'm1-style', 'rtl', 'replace' );
//Adding css libs
wp_enqueue_style( 'css-lib-magnific-popup', get_template_directory_uri() . '/assets/libs/magnific-popup/magnific-popup.min.css' );
wp_enqueue_style( 'css-lib-swiper', get_template_directory_uri() . '/assets/libs/swiper/swiper-bundle.min.css' );
//Adding main theme styles
wp_enqueue_style( 'm1-styles', get_template_directory_uri() . '/assets/css/styles.css' );
//Adding js libs
wp_enqueue_script( 'js-lib-magnific-popup', get_template_directory_uri() . '/assets/libs/magnific-popup/jquery.magnific-popup.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-swiper', get_template_directory_uri() . '/assets/libs/swiper/swiper-bundle.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-2id', get_template_directory_uri() . '/assets/libs/2id/jquery.malihu.PageScroll2id.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-maskedinput', get_template_directory_uri() . '/assets/libs/maskedinput/jquery.maskedinput.min.js', [ 'jquery' ], _S_VERSION, true );
//Adding main theme scripts
wp_enqueue_script( 'm1-scripts', get_template_directory_uri() . '/assets/js/dist/scripts.min.js', [ 'jquery' ], _S_VERSION, true );
wp_localize_script( 'm1-scripts', 'Vars', [
'ajaxurl' => admin_url( 'admin-ajax.php' ),
] );
} );
add_action( 'after_setup_theme', 'theme_register_nav_menu' );
function theme_register_nav_menu() {
register_nav_menu( 'primary', 'Primary Menu' );
register_nav_menu( 'menu-footer', 'Footer Menu' );
}
include 'inc/MenuWalker.php';
if( function_exists('acf_add_options_page') ) {
acf_add_options_page(array(
'page_title' => 'Theme General Settings',
'menu_title' => 'Theme Settings',
'menu_slug' => 'theme-general-settings',
'capability' => 'edit_posts',
'redirect' => false
));
}
add_theme_support( 'post-thumbnails' );
add_action( 'wp_ajax_m1_bitrix_add_lead', 'm1_bitrix_add_lead' );
add_action( 'wp_ajax_nopriv_m1_bitrix_add_lead', 'm1_bitrix_add_lead' );
function m1_bitrix_add_lead() {
$queryUrl = 'https://klininggru.bitrix24.ru/rest/414/fc5ip5mk55p307dt/crm.lead.add.json';
$queryData = http_build_query( array(
'fields' => array(
'TITLE' => 'Оставить заявку',
'NAME' => $_POST["name"],
'PHONE' => array(array("VALUE"=>$_POST["phone"], "VALUE_TYPE"=>"WORK" )),
'EMAIL' => array(array("VALUE"=>$_POST["email"], "VALUE_TYPE"=>"WORK" )),
'COMMENTS' => $_POST["comment"],
),
'params' => array( "REGISTER_SONET_EVENT" => "Y" )
) );
$curl = curl_init();
curl_setopt_array( $curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
) );
$result = curl_exec( $curl );
curl_close( $curl );
echo $result;
}
Соответственно постоянно выводилась ошибка из-за того что почему-то html код был в php файле в таком виде, может у кого есть догадки как до такого дошло.
Я первым делом решил убрать html код. И теперь выходит ошибка не syntax error, unexpected ‘>’, а syntax error, unexpected ‘;’ , хотя в первой строке нет ; , я убрал только html и комментарии.
В общем я вообще без понятия что происходило, поэтому нуждаюсь в помощи.
Код после того как убрал html код и комментарии
<?php
if ( ! defined( '_S_VERSION' ) ) {
define( '_S_VERSION', '1.0.0' );
}
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'm1-style', get_stylesheet_uri(), [], _S_VERSION );
wp_style_add_data( 'm1-style', 'rtl', 'replace' );
//Adding css libs
wp_enqueue_style( 'css-lib-magnific-popup', get_template_directory_uri() . '/assets/libs/magnific-popup/magnific-popup.min.css' );
wp_enqueue_style( 'css-lib-swiper', get_template_directory_uri() . '/assets/libs/swiper/swiper-bundle.min.css' );
//Adding main theme styles
wp_enqueue_style( 'm1-styles', get_template_directory_uri() . '/assets/css/styles.css' );
//Adding js libs
wp_enqueue_script( 'js-lib-magnific-popup', get_template_directory_uri() . '/assets/libs/magnific-popup/jquery.magnific-popup.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-swiper', get_template_directory_uri() . '/assets/libs/swiper/swiper-bundle.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-2id', get_template_directory_uri() . '/assets/libs/2id/jquery.malihu.PageScroll2id.min.js', [ 'jquery' ], _S_VERSION, true );
wp_enqueue_script( 'js-lib-maskedinput', get_template_directory_uri() . '/assets/libs/maskedinput/jquery.maskedinput.min.js', [ 'jquery' ], _S_VERSION, true );
//Adding main theme scripts
wp_enqueue_script( 'm1-scripts', get_template_directory_uri() . '/assets/js/dist/scripts.min.js', [ 'jquery' ], _S_VERSION, true );
wp_localize_script( 'm1-scripts', 'Vars', [
'ajaxurl' => admin_url( 'admin-ajax.php' ),
] );
} );
add_action( 'after_setup_theme', 'theme_register_nav_menu' );
function theme_register_nav_menu() {
register_nav_menu( 'primary', 'Primary Menu' );
register_nav_menu( 'menu-footer', 'Footer Menu' );
}
include 'inc/MenuWalker.php';
if( function_exists('acf_add_options_page') ) {
acf_add_options_page(array(
'page_title' => 'Theme General Settings',
'menu_title' => 'Theme Settings',
'menu_slug' => 'theme-general-settings',
'capability' => 'edit_posts',
'redirect' => false
));
}
add_theme_support( 'post-thumbnails' );
add_action( 'wp_ajax_m1_bitrix_add_lead', 'm1_bitrix_add_lead' );
add_action( 'wp_ajax_nopriv_m1_bitrix_add_lead', 'm1_bitrix_add_lead' );
function m1_bitrix_add_lead() {
$queryUrl = 'https://klininggru.bitrix24.ru/rest/414/fc5ip5mk55p307dt/crm.lead.add.json';
$queryData = http_build_query( array(
'fields' => array(
'TITLE' => 'Оставить заявку',
'NAME' => $_POST["name"],
'PHONE' => array(array("VALUE"=>$_POST["phone"], "VALUE_TYPE"=>"WORK" )),
'EMAIL' => array(array("VALUE"=>$_POST["email"], "VALUE_TYPE"=>"WORK" )),
'COMMENTS' => $_POST["comment"],
),
'params' => array( "REGISTER_SONET_EVENT" => "Y" )
) );
$curl = curl_init();
curl_setopt_array( $curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
) );
$result = curl_exec( $curl );
curl_close( $curl );
echo $result;
}
этот код выдает ошибку unexpected ‘;’ in functions.php on line 1.
Добавление стороннего кода в файл functions.php WordPress темы — достаточно распространённое явление. В то время как этот процесс является достаточно простым для тех, кто знает как функционирует PHP, для новых пользователей он является немного трудоёмким. Очень часто новички хотят достигнуть финального результата урока, но у них не хватает знаний в области PHP, чтобы понять как правильно вставить код, не сломав при этом весь сайт. В этом нет ничего плохого, и если вы читаете эту статью из-за того, что сломали свой сайт, то мы хотим вас заверить, что вы такие не одни. Все мы с этого начинали и все мы делали эту ошибку. В этой статье мы расскажем вам как избежать самые распространённые ошибки при вставке PHP-кода из уроков в файл functions.php вашей WordPress темы.
Обратите внимание: Файл functions.php находится в папке /wp-content/themes/yourthemename/. Это НЕ тот же самый файл ядра functions.php, который находится в папке /wp-includes/.
Чтобы понимать как правильно вставлять код, вам необходимо понимать базовую семантику PHP.
//Это открывающий тэг PHP кода <?php //Это закрывающий тэг PHP кода ?> |
Причина, по которой вам нужно разобраться с этим, заключается в том, что больше 95% проблем, возникающих у пользователей, связаны с неправильной вставкой кода. Так что знание семантики PHP может пригодиться. Ниже описаны некоторые самые часто встречающиеся ошибки.
Первая самая распространённая ошибка
Пользователь находит код на вебсайте, который обёрнут в PHP, как показано ниже, и они вставляют его не туда, куда надо.
<?php add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ ); function custom_loginlogo_url($url) { return ‘http://www.wpbeginner.com’; } ?> |
Пример кода из файла темы functions.php (обратите внимание, что обычно файл functions.php содержат гораздо больше кода, но суть примерно такая же):
<?php //Тонны всякого разного PHP кода, который уже есть в вашем PHP файле //Пользователь скопирует и вставит сниппет, который они нашли в сети таким образом: <?php add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ ); function custom_loginlogo_url($url) { return ‘http://www.wpbeginner.com’; } ?> ?> |
Очевидно, что это приведёт WordPress в недоумение, так как у вас открывающийся тэг PHP внутри другого, незакрытого, тэга PHP. Есть два способа решить эту проблему. Первый метод заключается в том, что мы вставляем код в нужное место:
<?php //Тонны всякого разного PHP кода, который уже есть в вашем PHP файле //Обратите внимание как мы закрыли первый открытый PHP тэг ?> //Теперь можно открыть PHP тэг <?php add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ ); function custom_loginlogo_url($url) { return ‘http://www.wpbeginner.com’; } ?> |
Заметьте, что мы сделали всё правильно и вставили PHP код после того, как был закрыт предыдущий.
Второй способ заключается в том, чтобы просто убрать открывающий и закрывающий тэги из вашей новой функции WordPress. Вот так примерно это будет выглядеть на практике:
<?php //Тонны всякого разного PHP кода, который уже есть в вашем PHP файле //Новый код будет здесь (Обратите внимание, что мы убрали открывающий и закрывающий PHP тэги из нового кода) add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ ); function custom_loginlogo_url($url) { return ‘http://www.wpbeginner.com’; } ?> |
Вторая самая распространённая ошибка
Каждый автор уроков обладает своим собственным стилем письма. Некоторые оборачивают свои сниппеты в тэги PHP, как вы видели в примере выше. Другие авторы не оборачивают сниппеты в тэги PHP. Это приводит нас ко второй проблеме. Если вы видите такой вот код:
function custom_loginlogo() { echo ‘<style type=»text/css»> h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; } </style>‘; } add_action(‘login_head’, ‘custom_loginlogo’); |
То автор подразумевает, что вы знаете о том, что этот код должен быть размещён внутри PHP тэгов. Некоторые даже рекомендуют вставлять их код внизу файла functions.php вашей темы. Пример ошибки новичка:
<?php //Тонны всякого разного PHP кода, который уже есть в вашем PHP файле ?> //Сюда пользователь вставляет новый код (Обратите внимание, что PHP тэги уже были закрыты выше): function custom_loginlogo() { echo ‘<style type=»text/css»> h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; } </style>‘; } add_action(‘login_head’, ‘custom_loginlogo’); |
Как вы могли заметить, пользователь вставил код вне тэгов PHP. WordPress понятия не имеет, что это за код, потому и ломается. Вот так будет выглядеть правильно вставленный код:
<?php //Тонны всякого разного кода, который уже существует в вашем PHP файле //Здесь новый код function custom_loginlogo() { echo ‘<style type=»text/css»> h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).‘/images/login_logo.png) !important; } </style>’; } add_action(‘login_head’, ‘custom_loginlogo’); //Закрывающий тэг PHP ?> |
Третья самая распространённая ошибка
Теперь, когда мы рассмотрели проблему с открытием и закрытием PHP тэгов, рассмотрим последнюю самую распространённую проблему, с которой сталкиваются пользователи, — вставка нового кода внутри существующей функции.
Структура функции выглядит примерно так:
function custom_function_name() { //Начало функции //здесь идёт характерный для функции код } //Конец функции |
Если вы вставите другую функцию внутри функции, то это приведёт к поломке вашего сайта. Пример такой ошибки будет выглядеть так:
function custom_function_name() { //Начало функции //здесь идёт характерный для функции код function custom_loginlogo() { echo ‘<style type=»text/css»> h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; } </style>‘; } add_action(‘login_head’, ‘custom_loginlogo’); } //Конец функции |
Нельзя так. Каждая функция является обособленной и независимой, так что нельзя просто так взять и разместить их вместе. Правильный способ вставки будет выглядеть так:
function custom_function_name() { //Начало первой функции //здесь идёт характерный для функции код } //Конец первой функции function custom_loginlogo() { //Начало второй функции echo ‘<style type=»text/css»> h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).‘/images/login_logo.png) !important; } </style>’; } //Конец второй функции add_action(‘login_head’, ‘custom_loginlogo’); |
Описанные выше ошибки скорее всего являются причиной поломки вашей темы, когда вы скопировали и вставили сниппет из сети в файл functions.php вашей WordPress темы.
Другие полезные советы
Бывают ситуации, когда проблемы связаны с тем, что вставленный код содержит ошибки. Некоторые ошибки достаточно небрежные, например разработчик забыл поставить ; или закрыть кавычки. Другие ошибки, в свою очередь, либо носят чисто функциональный характер и связаны с самим кодом, либо возникают из-за того, что пользователь не чётко следует инструкциям.
Крайне важно, чтобы вы активировали плагин, если таковой используется в уроке. Некоторые авторы уроков просто вызывают функцию плагина напрямую в своём сниппете, не имея при этом условную конструкцию для проверки существования плагина. Можно винить как пользователя, так и автора за это. Автору следовало разместить условную конструкцию, а пользователю следовало более внимательно читать статью и установить требуемый плагин.
Бывают случаи, когда вы натыкаетесь на длинные сниппеты, которые вы очень хотите скопировать. У авторов есть тенденция объяснять код своим пользователям (что очень даже хорошо), но это так же приводит к ошибкам в коде. Так что всё, что мы делаем, это прокручиваем вниз или вверх, чтобы получить итоговый сниппет, вместо того, чтобы самим собрать его по кусочкам.
Вы когда-нибудь сталкивались с подобными ошибками? Как вы с ними справлялись? Сталкивались ли вы с проблемами, которые мы не описали? Обязательно поделитесь с нами в комментариях.
Если вам интересно то, о чем пишем, то подписывайтесь на наш блог и вступайте в нашу группу Вконтакте
Файл functions.php для WordPress неоднократно упоминался в данном блоге при решении тех или иных задач. Однако при этом я говорил о нем вскользь, подразумевая, что вы хорошо знакомы с его работой. Сегодня же наоборот, решил детально рассмотреть все нюансы, которые касаются файла функций functions.php: зачем он вообще нужен, как правильно и безошибочно с ним работать и т.п. Инструмент на самом деле весьма актуальный как при работе с админкой, так и в процессе редактирования темы. Пусть информация и немного теоретическая, почитать будет полезно (особенно новичкам).
Статья имеет 3 подраздела:
- Особенности и задачи functions.php;
- Редактирование файла функций;
- Типовые ошибки и примеры использования.
Что такое файл functions.php и зачем он нужен?
Как правило, в данном файле задаются дополнительные функции для шаблона, позволяющие менять внешний вид вашего сайта. Однако на самом деле его возможности значительно шире, поскольку functions.php в WordPress автоматически загружается при инициализации системы. То есть при вызове любой страницы, как фронтенда (сайта), так и бэкенда (админки), соответствующие функции из данного файла будут выполнены.
Следовательно, с помощью файла functions.php вы можете решить целый спектр абсолютно разных задач:
- Наиболее простой вариант — изменение внешнего вида темы. Вспоминаются сразу хаки для ссылки читать далее где можно влиять на вид линка «read more» и формат анонса.
- Определение своих функций дабы позже вызывать их в других файлах шаблона, что экономит время на внедрение изменений на сайте (да, и вообще является нормальным принципом в программировании). Например, функция отображение первой картинки поста, которую после определения можно использовать в файлах темы для категорий, тегов, архивов.
- Настройка админки под себя — скрытие определенных пунктов из меню, изменение разных параметров отображения для других пользователей и т.п. Сразу вспоминается статья про скрытие custom fields для не админов. Также с помощью functions.php в WordPress можно создать специальную страницу настроек темы.
- Переопределение каких-то параметров системы — изменение размеров миниатюр для шаблона, а также разного рода хаки и фильтры. Например, с помощью данного файла можно подправить отображение комментариев в wp_list_comments.
Вообще файл functions.php в WordPress по логике и скорости работы напоминает плагины. Хотя при этом у них есть принципиальные отличия. Модули используются, как правило, для решения каких-то конкретных задач и применяются к любой теме вашего сайта. Плюс для работы их нужно активировать. Что касается файла шаблона functions.php, то он может содержать много разных функций и выполняется только для той темы, в которой определен. То есть при смене шаблона, все ваши текущие наработки будут отключены, а система начнет считывать информацию из другого файла функций (об этом следует помнить).
Где находится functions.php и как его редактировать?
Файл функций расположен в корневой директории темы (вместе с index.php, single.php и другими). То есть вы заходите в папку wp-content/themes/название_темы/, и он будет там. Это не то же самое что одноименный файл ядра, который находится в системной директории /wp-includes/, нужный нам объект — в папке шаблона.
Сейчас в WordPress файл шаблона functions.php можно найти в 99% популярных тем, но раньше он был не везде. Если в вашей теме нет functions.php, то вы спокойно можете его создать.
Есть два способа редактирования файла функций:
- через WP админку;
- с помощью текстового редактора.
Первый вариант достаточно простой и наглядный. Вы заходите в меню «Внешний вид» — «Редактор» и выбираете соответствующий файл для правки.
После внесения изменений нажмите кнопку «Обновить файл» в самом низу. Преимущество данного метода в том, что вам не нужно использовать какие-то дополнительные программы для работы, все происходит внутри панели администрирования. Однако не всегда это возможно сделать.
Если файл functions.php закрыт для записи, то воспользоваться встроенным редактором WordPress у вас не получится. В таком случае запускаете FTP клиент, например, Mozilla и скачиваете файл функций на локальный компьютер.
Для работы с php файлом советую использовать специальные бесплатные редакторы — Notepad++ или Sublime Text. При этом важно чтобы кодировка редактируемого файла была UTF-8 без BOM. Вот как можно ее выбрать в Notepad++:
Если этого не сделать, то из-за BOM может возникнуть глюк в WordPress. Для Sublime Text 2 в меню «File» есть опция «Reopen With Encoding», позволяющая открыть файл в нужной кодировке. Однако при запуске functions.php автоматически срабатывает UTF-8 (т.к. файл сохранен именно в ней), поэтому ничего дополнительно делать не нужно.
После внесения изменений в файл, загружаете его обратно на FTP в ту же самую корневую папку активного шаблона. Второй метод, как видите, чуть более сложный, но иногда без него не обойтись. Если вдруг, редактируя functions.php в WordPress админке вы допустили ошибку, то весь сайт может перестать работать (увидите белый экран). В таком случае исправить код можно будет лишь, скачав файл функций на локальный компьютер и отредактировав его в текстовом редакторе.
Вставка сниппетов (примеры кода и типичные ошибки)
Дабы у вас не возникало ошибок при работе с functions.php в WordPress, давайте рассмотрим основные правила вставки кода и возможные ошибки. Первым делом обратите внимание на глобальную структуру любого PHP файла:
<?php // .... разный PHP код и функции .... ?>
Здесь в начале идет специальный открывающий тег и в конце закрывающий. Важно чтобы не было никаких пробелов перед открывающимся и после закрывающегося тегов! Хотя в некоторых случаях вы можете встретить запись, когда последнего тега нет (для PHP это нормально). Давайте рассмотрим парочку примеров.
Ситуация 1
Допустим, вы нашли в интернете готовый сниппет для решения определенной задачи. И в описании сказано, что нужно вставить этот код в файл функций functions.php. В качестве примера выберем код удаления WP версии из wp_head:
<?php remove_action('wp_head','wp_generator'); ?>
Так размещать неправильно:
<?php // .... разный PHP код и функции .... <?php remove_action('wp_head','wp_generator'); ?> ?>
Возникает ошибка, поскольку система встречает тег открытия <?php нового PHP блока без закрытия предыдущего. Логичнее просто опустить <?php … ?> из найденного сниппета (так правильно):
<?php // .... разный PHP код и функции .... remove_action('wp_head','wp_generator'); ?>
Следующий вариант также будет работать (между PHP блоками не должно быть пробелов):
<?php // .... разный PHP код и функции .... ?><?php remove_action('wp_head','wp_generator'); ?>
Ситуация 2
Допустим вы хотите обновить jQuery в WordPress для чего нашли соответствующий код:
function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery);
Неправильный вариант использования:
<?php // .... разный PHP код и функции .... ?> function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery);
Нельзя размещать код после закрывающего PHP тега. Вам нужно поставить всю функцию внутрь конструкции:
<?php // .... разный PHP код и функции .... function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); ?>
Кстати, если в functions.php закрывающего тега ?> нет (что допускается), то добавляете нужный сниппет просто в конец файла.
Ситуация 3
Нельзя вставлять сниппет внутрь другой функции. Допустим, в файле шаблона functions.php у вас имеется следующий код:
<?php // .... разный PHP код .... function some_name() { // Открывающий тег функции // разный код внутри функции } // Закрывающий тег ?>
Неправильный вариант вставки:
<?php // .... разный PHP код .... function some_name() { // разный код внутри функции function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); } // Закрывающий тег ?>
Добавить код можно только после закрывающего тега «}» первой функции. Вот так будет правильно:
<?php // .... разный PHP код .... function some_name() { // разный код внутри функции } // Закрывающий тег function my_update_jquery () { wp_deregister_script('jquery'); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, false, true); wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', my_update_jquery); ?>
Ситуация 4
Рассмотрим для ознакомления еще один вариант, когда внутри функции вы можете встретить конструкцию <?php … ?>, которая не будет нарушать общий порядок работы самого файла.
<?php // .... разный PHP код .... function oxygen_metabox() { $oxygen_post_location = get_post_meta( $post->ID, '_oxygen_post_location', true ); ?> <p><?php echo __( 'Featured', 'oxygen' ) ?></label></p> <span class="description"><?php _e( 'Post location on the home page', 'oxygen' ); ?> <?php } // .... разный PHP код .... ?>
Тут нужно учитывать 2 нюанса. Во-первых, не должно быть ошибок в последовательности открывающих и закрывающих PHP тегов — каждый открытый блок должен быть закрыт. Во-вторых, внутри функции {…} пробелы и переносы строк между тегами <?php и ?> не критичны. В любом случае нужно быть очень внимательным в процессе редактирования. Плюс редакторов Notepad++ и Sublime Text в том, что они подсвечивают теги/функции, и так проще ориентироваться в коде.
Итого. Надеюсь, данное руководство по WordPress файлу functions.php вам пригодится. Данный инструмент в веб-разработке под WP весьма и весьма полезен. Нужно только внимательно с ним работать, так как ошибки могут привести к проблемам в работе сайта. Дабы ничего не нарушить я предпочитаю редактировать файл через текстовые редакторы, предварительно сохранив оригинальный вариант на всякий случай.
Если у вас остались вопросы по работе с functions.php в вордпресс, пишите их в комментариях.
P.S. Постовой. Продвижение и оптимизация сайта — важные знания для вебмастеров.
А вы знаете самые популярные сайты? — ТОП10 сайтов в мире (по посещаемости).