Будьте обережні з PHP empty при її використанні в шорткодах Wordpress

Дуже часто на веб-ресурсах по вивченню і розробці плагінів для Wordpress можна зустріти приклади, де пропонують використовувати PHP empty для перевірки атрибутів шорткодов. Але давайте розберемося, як працює ця функція і які помилки можуть виникати при неправильному її використанні.

Особливості роботи функції empty (), про які потрібно знати

Згідно мануалу на php. net, ця функція перевіряє порожня чи змінна.

Якщо змінна не існує, то empty () не видасть помилку. Наприклад, нехай змінна $ foo не встановлена:

If (empty ($ foo)) {echo “variable is empty”; } // виведе “variable is empty”

Отже потрібна додаткова перевірка функцією isset ():

$ Foo = 1; if (isset ($ foo) &&! empty ($ foo)) {echo “variable =”. $ foo; } // виведе “variable = 1”

Значення, які PHP empty () вважає порожніми, це:

  • " (Рядки - strlen ( '') == 0);
  • 0 (цілі числа - (int) 0);
  • 0.0 (числа з плаваючою точкою - (float) 0.0);
  • "0" (рядки - strlen ( "0") == 1);
  • NULL;
  • FALSE;
  • Array () (порожні масиви - count (array ()) == 0).

$ String_1 = “; echo strlen ($ string_1); // виведе 0 if (empty ($ string_1)) {echo ‘string_1 is empty’; } // виведе “string_1 is empty” $ string_2 = ‘0’; echo strlen ($ string_2); // виведе 1 if (empty ($ string_2)) {echo ‘string_2 is empty’; } // виведе “string_2 is empty”

Рядок ($ string_2) довжиною в один символ із рядковим нулем ( “0”) функція empty () теж вважає порожній.

Але рядок з одним пропуском не вважає порожній:

$ String_3 = “; echo strlen ($ string_3); // виведе 1 if (empty ($ string_3)) {echo ‘string_3 is empty’; } // нічого не виведе

Давайте розглянемо практичне застосування PHP empty і побачимо, як ця функція може привести до несподіваного результату.

Застосування функції empty () для перевірки атрибутів шорткода в плагінах Wordpress

Наприклад, ви розробляєте плагін для Wordpress, в якому за допомогою шорткодов будуть виводиться статті різних авторів. На сторінці аккаунта кожного учасника будуть показані його власні статті ( “self”) і статті інших авторів ( “another”) за останній місяць. За допомогою шорткода можна управляти кількістю виведення статей. За замовчуванням, якщо атрибути “self” та “another” не встановлені, будемо виводити, наприклад, 25 власних постів і 15 постів інших авторів.

[Author_posts]

Щоб поміняти значення, додамо інші кількості в атрибути шорткода:

[Author_posts self = “10” another = “5”]

Подивимося, що в коді плагіна:

”, ‘Another’ => “,), $ atts, ‘author_posts’); if (! empty ($ atts [ ‘self’])) {echo $ atts [ ‘self’]. “post (s)”; } Else {echo “25 self posts”; } If (! Empty ($ atts [ ‘another’])) {echo $ atts [ ‘another’]. “Post (s)”; } Else {echo “15 posts of another authors”; }} Add_shortcode ( ‘author_posts’, ‘posts_shortcode’);

Тут ми просто виводимо на друк дані, які користувач передав через шорткод. В результаті ми побачимо 10 власних постів і 5 - інших авторів.

висновок з шорткода wordpress

Якщо ми не хочемо бачити, наприклад, пости інших авторів, то напишемо в шорткод “another = 0”, і пости інших авторів відображатися не будуть. Але немає! Функція PHP empty () вважає рядковий “0” як пусте значення, і замість “0” постів інших авторів, відобразить значення за замовчуванням, тобто 15 записів замість нуля.

Іншими словами, ці два записи аналогічні:

[Author_posts another = “0”] [author_posts]

Щоб шорткод працював правильно, змінимо умову:

$ Is_null = (int) (- 1); ‘Another’ => $ is_null, if ($ atts [ ‘another’]> -1) {echo $ atts [ ‘another’]. “Post (s)”; } Else {echo “15 posts of another authors”; }

Якщо атрибут “another” не заданий, то за замовчуванням нехай він буде дорівнює (-1). Тоді в умови будемо вважати, що атрибут заданий, якщо він більше (-1).

Таким чином, цей шорткод:

[Author_posts another = “0”]

Тепер все правильно нам відображає, тобто за замовчуванням 25 статей автора (тому що атрибут “self” не вказано) і жодної статті інших авторів.

особливості php empty, які необхідно враховувати в шорткодах wordpress

Весь код:

”, ‘Another’ => $ is_null,), $ atts, ‘author_posts’); if (! empty ($ atts [ ‘self’])) {echo $ atts [ ‘self’]. “post (s)
“; } else {echo “25 self posts
“; } If ($ atts [ ‘another’]> -1) {echo $ atts [ ‘another’]. “Post (s)
“; } else {echo “15 posts of another authors
“; }} Add_shortcode ( ‘author_posts’, ‘posts_shortcode’);

Ви можете придумати свою умову, важливо, що ви побачили особливості роботи функції empty () і в подальшому не допустите помилку при її використанні. Помістіть цей файл в папку Wordpress “/ wp_content / plugins /” і активуйте плагін в панелі адміністратора, він буде працювати.

Варіанти заміни empty () на інші функції PHP

Щоб зрозуміти, чим замінити empty (), потрібно знати, що ми маємо, наприклад:

  • Якщо це масив (array ()), то краще перевіряти його функціями count або sizeof;
  • Якщо змінна може бути дорівнює false, то використовуйте if (false == $ var);
  • Якщо змінна не встановлена, то за допомогою isset або is_null ();
  • Числах підійде is_numeric ().

Багато варіантів можна знайти, щоб ваша програма працювала максимально точно, напишіть свою функцію, яка буде аналізувати дані так, як вам необхідно.

Ми з’ясували, що empty PHP - функція, яка перевіряє порожня чи змінна. Потрібно пам’ятати, які значення змінної визначаються як нульові, якщо використовуєте її в своєму коді, щоб потім не шукати, чому програма не працює належним чином.



ЩЕ ПОЧИТАТИ