Пользовательское руководство по добавлению 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/