Кодекс Wordpress: применение фильтров - разъяснение по созданию нового крючка на лету. Как мы его используем?


Я читал Кодекс WordPress на add_filter и apply_filter бесчисленное количество раз, но только сегодня, когда я прочитал исходный код woocommerce, что-то щелкнуло так, что, возможно, я не понимаю, как работает apply_filter, или, может быть, я не совсем понимаю, как он создает новый крючок и когда/где определена функция для нового крючка?

Еще раз просмотрите кодекс WordPress

КОДЕКС: apply_filters (строковый тег $, смешанное значение $) Вызывают функции добавлен в крючок фильтра.

Функции обратного вызова, прикрепленные к тегу filter hook$, вызываются вызовом этой функции. Эту функцию можно использовать для создания нового крючка фильтра, просто вызвав эту функцию с именем нового крючка, указанным с помощью параметра $tag.

Функция позволяет добавлять дополнительные аргументы и передавать их крючкам.

//Наша функция обратного вызова фильтра

function example_callback( $string,
> $arg1, $arg2 ) {
>     // (maybe) modify $string
>     return $string; } add_filter( 'example_filter', 'example_callback', 10, 3 );

/* Примените фильтры с помощью вызывая функцию "example_callback", мы "подключили" к "example_filter", используя функцию add_filter() выше. -> 'example_filter' - это тег $фильтра. -> "фильтровать меня" - это фильтруемое значение. -> $arg1 и $arg2 являются дополнительными аргументами, передаваемыми обратному вызову.

$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

Вы можете видеть, что они показывают один из способов использования apply_filters: это в сочетании с add_filters, где функция определена и связана с тегом $. Использование интуитивно понятно. Вы определяете это, вы используете его.

Так что насчет другого сценария, создания нового фильтра на лету... Если некоторые из вас все еще говорят, что? давайте еще раз перечитаем эту часть кодекса.

Эту функцию можно использовать для создания нового крючка фильтра, просто вызвав эту функцию с именем нового крючка, указанным с помощью параметра $tag.

Таким образом, add_filter в данном случае не используется. Что приводит к моему вопросу: "Чего мы пытаемся здесь достичь? Почему? создаем ли мы здесь крючок фильтра? Как мы связываем функцию с крючком фильтра, который создается "на лету"?

Кодекс apply_filter не дает нам примера того, как или почему мы хотели бы это сделать, что является упущением, но я продолжаю находить экземпляры этих крючков фильтров, когда я проходил свой путь через источник woocommerce на github.

Например, в woocommerce я вижу, что apply_filter используется следующим образом:

function woocommerce_get_product_thumbnail( $size = 'woocommerce_thumbnail', $deprecated1 = 0, $deprecated2 = 0 ) {
    global $product;

    $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );

    return $product ? $product->get_image( $image_size ) : '';
}

Я искал тег '

Один_продукт_архив_тумбнайл_размер

' в репозитории woocommerce на github. Существует только одно его проявление, как вы видите здесь. Так как же мы его используем?

Author: kruddock, 2018-12-14

1 answers

Как использовать фильтр single_product_archive_thumbnail_size

Я искал тег single_product_archive_thumbnail_size в репозитории woocommerce на github. Существует только одно его проявление , как вы видите здесь. Так как же мы его используем?

Автор WooCommerce добавил этот фильтр, чтобы другие разработчики могли изменять размер миниатюр архива продукта. WooCommerce, возможно, не использует сам этот фильтр, но они могли бы.

Вот как ты можно использовать фильтр single_product_archive_thumbnail_size. В этом гипотетическом сценарии мы хотим переопределить single_product_archive_thumbnail_size, определенный WooCommerce, размером изображения kruddock_archive_thumbnail, определенным в теме kruddock, если эта тема окажется активной.

/**
 * If the kruddock theme is active, use the kruddock_archive_thumbnail
 * image size for WooCommerce's single_product_archive_thumbnail_size
 *
 * @param string $size name of thumbnail size
 */
add_filter( 'single_product_archive_thumbnail_size', 'single_product_archive_thumbnail_size' );
function wpse_single_product_archive_thumbnail_size( $size ) {
    $theme = wp_get_theme();
    if ( 'kruddock' == $theme->name || 'kruddock' == $theme->parent_theme ) {
        $size = 'kruddock_archive_thumbnail';
    }


    return $size;
}

Динамические крючки

Хорошим примером динамического крючка является тот, который определен для опций , например:

apply_filters( "option_{$option}", mixed $value, string $option )

Допустим, у вас есть плагин с именем API Kruddock. В этом плагине у вас есть опция, которая использует API настроек WP для сохранения параметр с именем kruddock_api_url.

Разработчик, использующий ваш плагин, может использовать фильтр option_kruddock_api_url для изменения значения, возвращаемого get_option( 'kruddock_api_url' ), фактически не изменяя сохраненное значение kruddock_api_url (как и в случае с фильтрами; мы изменяем значение на лету) и без вас, как разработчика плагина Kruddock API, когда-либо предоставлявшего специальный фильтр для изменения значения . kruddock_api_url.

API настроек WP позволяет нам изменять любую опцию на лету с помощью динамический фильтр option_{$option}. Вот как динамический крючок в этом примере может быть использован другим разработчиком:

add_filter( 'option_kruddock_api_url', 'wpse_option_kruddock_api_url' );
function wpse_option_kruddock_api_url( $value ) {
    // Use a different API URL than the default.
    $value = 'https://subdomain.example.com';

    return $value;
}
 3
Author: Dave Romsey, 2018-12-17 02:44:53