php-mvc-engine-creating-users-role-system

Как вставлять сниппеты из интернета на ваш сайт WordPress

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

Внимание, файл темы functions.php находится в папке /wp-content/themes/yourthemename/. Это не тот файл, который находится в папке /wp-includes/.

Чтобы понимать, как правильно вставлять код, нужно понимать основы синтаксиса PHP.

//Это открывающий PHP тег
<?php

//Это закрывающий PHP тег
?>

Первая причина почему вам надо это понимать, это потому что более 95% проблем пользователей это код, вставленный в неправильное место. Потому понимание основ PHP будет крайне полезным. Перечислим основные ошибки, которые мы видели.

1-ая наиболее популярная ошибка

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

<?php
add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'https://coma.lv';
}
?>

Пример кода файла темы functions.php (Вообще-то обычно файл темы functions.php имеет куда больше кода, но идея остаётся такой же):

<?php
//Здесь находится PHP код, который уже здесь был

//Пользователь может вставить сюда такой сниппет с интернета:

<?php
add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'https://coma.lv';
}
?>
?>

Это определённо поломает WordPress, так как у вас есть открытый тег PHP и нету закрывающего тега. Есть два способа решить эту проблему. Первый метод — вставить элемент в правильное место:

<?php
//Здесь находится PHP код, который уже здесь был

//Здесь мы сначала закрыли PHP тег
?>
//Теперь может открывать PHP тег
<?php
add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'https://coma.lv';
}
?>

Заметьте, мы корректно вставили PHP код после того, как предыдущий был закрыт.

Следующий метод — просто вырезать открывающие и закрывающие теги из функции WordPress. Вот пример:

<?php
//Здесь находится PHP код, который уже здесь был	

// Новый код можно вставить здесь (мы убрали открывающий и закрывающий тег PHP из нового кода)

add_filter( 'login_headerurl', 'custom_loginlogo_url' );
function custom_loginlogo_url($url) {
	return 'https://coma.lv';
}
?>

2-ая наиболее популярная ошибка

Каждый автор статьи имеет свой стиль написания. Некоторые обрамляют сниппеты в 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 тег
?>

3-я наиболее популярная ошибка

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

Обычно функция выглядит примерно так:

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. Контакты для бесплатной консультации — [email protected], +371 29394520


5 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий