PHP в WordPress. Что нужно знать? Прямо ну вообще с нуля.

Весь WordPress написан на PHP. Поэтому для того, чтобы создавать или редактировать темы, или писать плагины, вам нужно знать некоторые вещи.

На моем блоге также есть пост про использование MySQL в WordPress – о том, как правильно создавать запросы, используя предназначенный для этого класс $wpdb.

Это немного дополненный старый пост, поэтому тут уже сотня комментов 🙂

Конечно, очень наивно полагать, что возможно охватить все основы PHP в одной статье, но я очень постараюсь.

Одна простая истина. Или даже две. 


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

Вам ничего не стоит создать у себя на рабочем столе текстовый файл, назвать его file.html и начать фигачить туда HTML код страницы. И у вас всё получится, в браузере всё откроется, но вот только если там будет содержаться PHP-код, то он не выполнится! JavaScript выполнится, вы уже знаете, а вот PHP нет.

Есть такая вещь, как локальный сервер Apache… Знаете? Прекрасно – можете использовать. Но мы сейчас идём по лайту и поэтому я скажу следующее – чтобы выполнить PHP код, вам нужно 1) зарегать хостинг 2) использовать PHP-код внутри файлов с расширением .php.

Это была первая истина.

Вторая истина заключается в том, что сам код PHP должен находиться внутри <?php и ?>. Это как JavaScript находится между <script> и </script>. Вы даже можете использовать спокойно HTML внутри .php-файлов, главное, чтобы сам исполняемый код был внутри этих скобок. Это вторая истина. Пример:

<h1><?php 
 
// здесь будет какой-то PHP код
 
?></h1>

О, так я и с комментариями вас познакомил! Когда строка начинается с //, то всё, что идёт дальше этих символов на строке, кодом не воспринимается, то есть это просто пометки для самого кодера. Для вас!

Функции. Часть 1. 

Всё основывается на функциях. Функция – эта такая штуковина, в которую мы можем передать какие-то значения (но не всегда) и она порадует нас каким-то результатом (но тоже не всегда).

Начнём с невероятно простых вещей. Создайте .php-файл у вас на сервере и вставьте туда этот код:

<?php
phpinfo()
?>

После этого откройте файл в браузере, например http://вашсайт/test.php или же просто http://вашсайт, если вы назвали свой файл index.php (да, index.php – этот тот файл, который открывается в папке (директории) по умолчанию, если в URL вы обращаетесь именно к папке, а не к файлу).

В общем, функция phpinfo() просто выведет инфу о сервере. Понятную и не очень.

А что, если мы хотим продолжить в этом же файле, например в начале или в конце мы ещё выведем текущий год. Так вот, вторую функцию вы можете вставить с новой строки, а можете продолжать на этой же – главное лишь наличие точки с запятой между ними!

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

<?php
phpinfo(); // возьмите за привычку после любого действия в PHP-коде сразу ставить ";"
echo date( 'Y' ); // параметр 'Y' как раз означает вывод года. 
?>

Тут один момент – сама функция date() не выводит дату, а только возвращает (сейчас вы узнаете, что это), а phpinfo() сразу выводит. Поэтому перед функцией date() мы ещё добавили echo, что как раз означает вывод. Сейчас расскажу подробнее.

Числа, строки и…  

Да, начнём с функции echo (вы заметили, что она без скобочек? да, ей скобки не нужны). Выведем какое-то число:

echo 12345; // скобки <?php я не буду ставить в каждом коде для своего удобства :)

Всё просто, верно?

Для строк (это по сути текст) нам просто нужно обрамлять их в двойные или одинарные кавычки. Например:

echo 'Привет 123';

Тут так же хочу обратить ваше внимание, если внутри находятся ещё одни кавычки, то их нужно экранировать или использовать другие. Например, если нам нужно вывести It's a beautiful life., то можно сделать это двумя способами:

echo "It's a beautiful life.";

Или

echo 'It\'s a beautiful life.';

Используйте обратный слэш \ для того, чтобы символы не воспринимались именно как эти символы, а как обычный текст.

Переменные 

Для тех, кто совсем-совсем начинающий, что такое переменные?

Как бы это объяснить, сейчас это слово подразумевается как какая-то ну совсем очевидная вещь. Начнём с того, что переменная, это какое-то слово (или набор символов – весь латинский алфавит, цифры, знак подчеркивания и… начинаться должно с символа алфавита и…вроде всё?). В PHP перед этим словом ещё ставится знак доллара, та-дам, всеми любимый из математики $x. С единственным тем отличием, что в матеме во многих случаях нужно было найти его, и даже если его не нужно было находить, мы его всё равно не знали, тут же мы всегда примерно знаем его значение.

Теперь давайте предположим, что у нас есть какой-то кусочек контента, например кусок текста или офигенно сложное для запоминания число. И чтобы долго с ним не возиться, в один прекрасный момент мы записываем его в $x, например вот так:

$x = 1234567890;

Знак равно это очень важная в программировании вещь (да-да, именно вещь – не собираюсь загружать вас терминами), которую мы назовем словом присваивание, то есть у нас был какой-то $x (а может его и не было вовсе), затем мы взяли и присвоили ему значение 1234567890 и теперь $x равен этому значению.

Теперь мы уже можем вывести не число, а именно переменную:

$x = 1234567890;
echo $x;

И ещё один супер-пример. Предположим. Что нам нужно вывести число 7 раз! Не уверен, что такое понадобится, но предположим!

А теперь скажите, какой вариант кода вам нравится больше – первый или второй.

Это первый:

echo '1234567890';
echo '1234567890';
echo '1234567890';
echo '1234567890';
echo '1234567890';
echo '1234567890';
echo '1234567890';

Это второй:

$x = '1234567890';
echo $x;
echo $x;
echo $x;
echo $x;
echo $x;
echo $x;
echo $x;

Ну что? А если я скажу вам изменить это число, то где вы быстрее внесёте изменения – в первом куске кода или во втором?

Действия с переменными
Обычные действия: присвоение, сложение, умножение, деление, вычитание.

$privet='привет чуваки!';
$r = 1; $go = 4;
$r = $r + $go;
$r = 4 + $r / 5;
$r = 2 * ($r - $go);
$r++; // это означает $r=$r+1;
$r--; // $r=$r-1;

Не забывайте в конце каждого действия в PHP ставить точку с запятой, иначе вылезет ошибка.

Объединение переменных:

$privet = 'привет';
$znak = '!'
$result = $privet . ' чуваки' . $znak; // $result будет равно 'привет чуваки!'
$result = $privet . $znak; // теперь $result будет равно 'привет!'

… и массивы 


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

Смотрите, переменная может содержать число, может содержать строку (какой-то текст или символы), а может содержать массив, который является последовательностью из разных чисел, текста и чего угодно в общем-то, даже других массивов и более страшных вещей!

Например 1, 2, 'текст', 98 – это массив из четырех элементов, при этом отсчет начинается с нуля – нулевой элемент равен единице, первый – двойке, третий – строке текста и т.д.

Давайте зададим этот нехитрый массив в переменную:

$massivchik = array( 1, 2, 'текст', 98);

Что с ним делать-то теперь? На самом деле много чего, в документации PHP вы можете посмотреть функции, которые могут удалять элементы массива, сортировать их и т д, а мы же выведем из него второй элемент – двойку.

echo $massivchik[1]; // выведет 2
// если же хотите вывести абсолютно весь массив, то print_r( $massivchik );

Давайте добавим ему пятый элемент:

$massivchik[] = 'ну массив'; // array( 1, 2, 'текст', 98, 'ну массив');

Вы обратили внимание, что у каждого элемента массива есть свой числовой индекс? Запомните этот важный момент.

А теперь представляю вам ассоциативные массивы! Это когда помимо числового индекса, у элементов есть ещё и строковый индекс, ключ. Зададим массив.

$supermassive = array( 'chislo' => 1, 'text' => 'Privet', 'text2' => 19303 );

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

echo $supermassive['chislo'];
// а может мы просто хотим присвоить элемент массива в отдельную переменную, тогда $y = $supermassive['chislo'];

А ещё мы можем изменить значение элемента:

$supermassive['chislo'] = 5; // точно так же кстати можно добавить и новый элемент

Ну всё, говорю же, старался покороче 🙂 Если есть вопросы – скидывайте в комментарии к посту.

Функции. Часть 2. 

Как вы уже возможно поняли, функции в PHP выглядят следующим образом:

название_функции(параметры_через_запятую);

В PHP и в WordPress уже существует набор готовых функций, которые удобно использовать при создании блога. Также вы можете задавать и свои функции:

function название_функции( параметры_в_виде_переменных ){
	выполняющийся код;
}

Примеры:

Функция echo выводит на экран то, что указано в ней, иногда пишется со скобками, но я пишу без. Да, знаю, что уже упоминал её, но практики лишней не будет.

$privet = 'привет'; // для удобства зададим переменную
echo 'привет'; // выведет привет
echo $privet; // привет
echo $privet . ' чуваки'; // привет чуваки
echo '$privet чуваки'; // $privet чуваки
echo "$privet чуваки"; // привет чуваки
// видите разницу между двойными и одинарными кавычками? В одинарных кавычках переменные воспринимаются как текст, а в двойных как переменные.

Вот так всё это можно засунуть в HTML-код:

<h1><?php echo $privet ?></h1>

Зададим собственную функцию:

function privet(){
echo 'привет';
}

После того, как функция задана (в WordPress они все обычно задаются в файле functions.php в темах – для начала задавайте там, а потом разберетесь), её можно использовать в любой части сайта сколько угодно раз:

<h1><?php privet(); ?></h1><span><?php privet(); ?></span>

Теперь создадим функцию с параметрами:

function hello( $m, $n = 'значение по умолчанию' ){ // у переменных можно указать значения по умолчанию, тогда параметр становится необязателным
	echo $m . ' ' . $n; // кавычки здесь нужны, чтобы вывести пробел между словами
}
// пример выполнения
$privet = 'привет';
$dude = 'чуваки!';
hello( $privet, $dude ); // после того, как начинает действовать функция, эти переменные превращаются в $m и $n в том же порядке, в котором указаны

Параметры $m, $n существуют только внутри функции, то есть под конец они уничтожаются, поэтому перед тем, как функция закончится, их надо либо вывести, либо сохранить их значения в других переменных. Для этого существует функция return

function hello( $m, $n ){
	$m = $m . ' ' . $n; // как видите, так тоже можно изменять значение переменной
	return $m;
}

Пример выполнения 1.

$privet = 'привет';
$dude = 'чуваки!';
$result = hello( $privet, $dude ); // $result будет присвоено значение $m
echo $result;

Пример выполнения 2, результат будет одинаковый.

$privet = 'привет';
$dude = 'чуваки!';
echo hello( $privet, $dude );

Также существуют такие вещи как return true и return false – это логическое ДА и логическое НЕТ – они в основном нужны для условий, о них уже в следующей главе.

Условия: 

if (условие) { // если действие только ОДНО, то { } скобки не обязательны
	действие; 
} elseif (условие) { // второе условие, в случае, если первое не выполняется
	действие;
} else { // в случае если ни одно из условий выше не выполняется
	действие;
}

Примеры:

if($x == 2) echo $x; // если $x равен 2
if($x != 2) echo $x; // если $x не равен 2
if($x < 2) echo $x;
if($x > 2) echo $x;
if($x <= 2) echo $x; // если $x меньше или равно 2
if($x >= 2) echo $x; // если $x больше или равно 2
if($x) echo $x; // если $x существует и не равен нулю
if(isset($x)) echo $x; // если $x существует и возможно равен нулю
if(!$x) echo $x; // если $x не существует, но возможно равен нулю
if(!isset($x)) echo $x; // если $x не существует и не равен нулю

Несколько условий:

if($x==2 && $y < $x) echo $y; // если $x равен двум И (должны выполняться одновременно оба условия) $y меньше $x
if($x==2 || $y < $x) echo $y; // если ИЛИ $x равен двум ИЛИ (получается должно выполняться хотя бы одно условие) $y меньше $x

Пример посложнее:

if(isset($result)) {
	if($result<5) {
		echo '$result = '.$result.'<br />';
		echo 'значение переменной меньше 5';
	} elseif ($result>5) {
		echo '$result = '.$result.'<br />';
		echo 'значение переменной больше 5';
	} else echo 'значение переменной равно 5'; 
} else echo '$result не существует';

Циклы 

Есть несколько видов циклов, но нам пока будет достаточно самого распространённого:

while(условие){ // до тех пор пока условие выполняется, действие будет повторяться
	действие;
}

Пример:

$result=0;
while($result<5) {
	echo $result; $result++;
} // в результате этот код выведет цифру 01234

Также добавлю, что когда у нас имеется какой-то массив и нам нужно прокрутить его через цикл, например вывести все его элементы, то это очень удобно сделать через цикл foreach().

$numbers = array( 1, 4, 7, 9 );
foreach ( $numbers as $number ) { // для каждого элемента массива
	// тут $number уже - конкретный элемент массива для конкретного итерации массива (повторения)
	echo $number;
} // должно получиться просто 1479

Альтернативные записи условий и циклов

В WordPress всё это часто записывается в другом виде, но смысл остаётся тем же:

if(условия) :
	действия;
elseif(условия) :
	действия;
else :
	действия;
endif; // конец условия
while(условия) :
	действия;
endwhile; // конец цикла

Примеры на этот пункт вы найдёте практически в любой теме для WordPress.

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также