Пользовательское руководство по добавлению PHP-сниппетов в WordPress

Время от времени на нашем сайте появляются различные руководства, предусматривающие ручное добавление кода в файл functions.php. Несмотря на то что этот процесс довольно прост, особенно для людей, знакомых с PHP, многие начинающие пользователи постоянно сталкиваются с разными барьерами. Зачастую новички желают добиться результатов, описанных в руководстве, но их знаний в PHP не хватает на то, чтобы это сделать. Они боятся нарушить функционирование сайта в результате собственных неправильных действий. В такой предосторожности и боязни нет ничего осудительного. Даже если вы сломали сайт своими неправильными действиями, могу вас заверить: вы не единственный человек, кто столкнулся с этим. Все мы допускаем ошибки и все мы думаем, как их исправить. В этой статье мы расскажем вам, как избежать наиболее популярных ошибок, связанных с добавлением PHP-кода в файл functions.php вашей темы.

Примечание: файл темы functions.php находится в папке /wp-content/themes/your_theme_name/. Он отличается от основного файла functions.php, расположенного в папке /wp-includes/.

Для того чтобы понять, как правильно вставить PHP-код, вы должны разобраться в основной семантике языка PHP.

//This is the opening tag of a PHP Code
<?php

//This is the closing tag of a PHP Code
?>

Более 95% всех ошибок, происходящих во время вставки кода, связаны именно с тем, что пользователи выбирают для сниппета неверное расположение. Именно поэтому знание семантики PHP очень полезно. Ниже мы посмотрим на самые популярные ошибки, допускаемые начинающими пользователями.

Первая распространенная ошибка

Пользователь копирует PHP-код, находящийся на сайте, и вставляет его в неправильный участок файла functions.php своей темы.

<?php
add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'http://www.wpbeginner.com';
}
?>

Пример файла functions.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-тег из своей функции. Пример:

<?php

//php-код
// Мы убрали открывающий и закрывающий теги для новой функции

add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'http://www.wpbeginner.com';
}
?>

Вторая распространенная ошибка

Каждый создатель учебных руководств обладает собственным стилем написания 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. Более того, многие авторы предполагают, что вы знаете и о необходимости размещения этого кода в самом низу файла functions.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');

Приведенные выше ошибки являются самой распространенной причиной выхода из строя сайта после добавления PHP-фрагмента в functions.php.

Другие подсказки

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

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

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

http://www.wpbeginner.com/beginners-guide/beginners-guide-to-pasting-snippets-from-the-web-into-wordpress/

Блог про WordPress
Комментарии: 1
  1. HotIce

    Видел, как долго бились с кодом два человека, который добавлял один из них в function. Потом все разрешилось. Ошибка была в том, что тот который вставлял, вставлял код еще код HTML.

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

    Я это к чему. Если уж собирать все возможные косяки в одном месте, то пусть и этот будет. Только надо чтоб кто-то подтвердил, на всякий случай. ;) Где-то встречал, что в function один открывающий php-тег, и один закрывающий. Но это на документацию не тянуло.

Добавить комментарий для HotIce Отменить ответ

Получать новые комментарии по электронной почте.