✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Використання спеціальних фільтрів із короткими кодами

17

Коли ви зрозумієте Shortcode API і принципи роботи фільтрів, їх легко застосувати в WordPress.

Використання спеціальних фільтрів із короткими кодами

І коли ви можете поєднати обидва, ви можете зробити набагато більше, ніж зазвичай, ніж коли вони працюють незалежно один від одного.

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

Але якщо ви ніколи раніше не користувалися ні API коротких кодів, ні функціями, це все одно легко зробити.

Спеціальні фільтри з короткими кодами

Для цієї публікації ми використаємо відносно надуманий приклад. Тобто шорткод призведе до чогось статичного. Причина в тому, що це спрощує демонстрацію в публікації та реалізацію у вашому коді.

Короткий код

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

  1. спеціальна назва для короткого коду,
  2. функція, яка використовується для перекидання інформації туди, де використовується короткий код.
<?php

namespace Acme;

add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
 * Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 */
function aSimpleExample()
{
  return 'This is the result of an example shortcode.';
}

Примітка в коді вище; Я додав до функції префікс. __NAMESPACE__Це тому, що функція знаходиться в спеціальному просторі імен (який можна побачити у верхній частині файлу).

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

Зауважте, що ми повернемося до цієї функції, щойно встановимо фільтр.

Фільтр

Додавання спеціального фільтра подібне до додавання короткого коду. Тобі потрібно:

  1. ім’я спеціального фільтра,
  2. функція, яка використовується для фільтрації вхідної інформації (і фільтри, як правило, повинні приймати принаймні один параметр, який, звичайно, є даними для фільтрації):

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

<?php

namespace Acme;

add_filter('custom_shortcode_example', __NAMESPACE__. 'aSimpleShortcodeFilter');
/**
 * Replaces [a simple example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 *
 * @param string $input the input to filter.
 *
 * @return string       the result of the filter running on the input
 */
function aSimpleShortcodeFilter(string $input): string
{
  return str_ireplace(
    'an example shortcode.',
    'a filtered shortcode',
    $input
  );
}

Це замінить вміст:

Це результат прикладу короткого коду.

до:

Це результат відфільтрованого короткого коду.

Але ми ще повинні зв’язати їх обох разом.

Перегляд короткого коду

Щоб пов’язати дві функції разом, нам потрібно переконатися, що функція для короткого коду застосовує фільтр до значення, яке повертає.

На щастя, реалізувати це просто, тим більше, що у нас є все необхідне:

<?php

namespace Acme;

add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
 * Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 */
function aSimpleExample()
{
  return apply_filters('custom_shortcode_example', 'This is the result of an example shortcode.');
}

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

Тобто я часто люблю починати з охоронного пункту. Якщо тест не вдається, я просто повертаю вхідне значення; інакше я відфільтрую дані та поверну будь-який результат цієї операції.

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі