✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Использование пользовательских фильтров с короткими кодами

25

Как только вы поймете, что такое 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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее