J'ai lu le Codex WordPress sur add_filter et apply_filter un nombre incalculable de fois, mais ce n'est qu'après avoir lu le code source de woocommerce aujourd'hui que quelque chose a cliqué de telle manière que je ne comprends peut-être pas le fonctionnement de apply_filter ou que je ne comprends pas très bien comment cela crée un nouveau crochet et quand/où est la fonction définie pour le nouveau crochet?
Revoir le codex wordpress à nouveau
CODEX: apply_filters (string $ tag, mixed $ value) Appelez les fonctions ajoutées à un crochet de filtre.
Les fonctions de rappel attachées au filtre hook $ tag sont appelées en appelant cette fonction. Cette fonction peut être utilisée pour créer un nouveau hook de filtre en appelant simplement cette fonction avec le nom du nouveau hook spécifié à l'aide du paramètre $ tag.
La fonction permet d'ajouter des arguments supplémentaires et de les transmettre à des points d'ancrage.
// Notre fonction de rappel de filtre
function example_callback( $string,
> $arg1, $arg2 ) {
> // (maybe) modify $string
> return $string; } add_filter( 'example_filter', 'example_callback', 10, 3 );
/ * Appliquez les filtres en appelant la fonction 'example_callback' que nous avons "accrochée" à 'example_filter' à l'aide de la fonction add_filter () ci-dessus. -> 'example_filter' est la balise $ du crochet. -> 'me filtre' est la valeur filtrée. -> $ arg1 et $ arg2 sont les arguments supplémentaires passés au rappel.
$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );
Vous pouvez voir qu'ils montrent une façon d'utiliser apply_filters: c'est-à-dire en combinaison avec add_filters où la fonction est définie et liée à la balise $. L'utilisation est intuitive. Vous le définissez, vous l'utilisez.
Alors qu'en est-il de l'autre scénario, créer un nouveau crochet de filtre à la volée ... Si certains d'entre vous disent encore quoi? permet de relire cette partie du codex une fois de plus.
Cette fonction peut être utilisée pour créer un nouveau hook de filtre en appelant simplement cette fonction avec le nom du nouveau hook spécifié à l'aide du paramètre $ tag.
Donc add_filter n'est pas utilisé dans cette situation. Ce qui conduit à ma question "qu'essayons-nous d'accomplir ici? Pourquoi créons-nous un crochet de filtre ici? Comment associerons-nous une fonction à un crochet de filtre créé à la volée?
Le codex apply_filter ne nous donne pas d'exemple de comment ou pourquoi nous voudrions le faire, ce qui est un oubli, mais je continue à trouver des exemples de ces crochets de filtre alors que je parcourais mon chemin dans woocommerce depuis github.
Dans woocommerce, par exemple, je vois que apply_filter est utilisé comme suit:
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 ) : '';
}
J'ai cherché le tag '
single_product_archive_thumbnail_size
'dans le référentiel woocommerce sur github. Comme vous le voyez ici, il n'y en a qu'une seule occurrence. Alors, comment l'utilisons-nous?
J'ai cherché la balise
single_product_archive_thumbnail_size
dans le référentiel woocommerce sur github. Comme vous le voyez ici, il n'y en a qu'une seule occurrence. Alors, comment l'utilisons-nous?
L'auteur de WooCommerce a ajouté ce filtre pour que les autres développeurs puissent modifier la taille de la vignette d'archive du produit. WooCommerce n'utilise peut-être pas ce filtre lui-même, mais ils pourraient le faire.
Voici comment utiliser le filtre single_product_archive_thumbnail_size
. Dans ce scénario hypothétique, nous souhaitons remplacer le single_product_archive_thumbnail_size
défini par WooCommerce par la taille d'image kruddock_archive_thumbnail
définie dans le thème kruddock
s'il s'avère que ce thème est actif.
/**
* 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;
}
Un bon exemple d’accroché dynamique est celui défini pour options , par exemple:
apply_filters( "option_{$option}", mixed $value, string $option )
Supposons que vous ayez un plugin nommé Kruddock API . Dans ce plug-in, vous avez une option qui utilise la WP API de paramètres } pour enregistrer un paramètre nommé kruddock_api_url
.
Un développeur utilisant votre plugin pourrait utiliser le filtre option_kruddock_api_url
pour modifier la valeur renvoyée par get_option( 'kruddock_api_url' )
sans modifier réellement la valeur stockée de kruddock_api_url
(comme dans la nature des filtres; nous modifions la valeur à la volée) et sans vous en tant que développeur du Kruddock API plugin n'ayant jamais fourni de filtre spécifique pour modifier la valeur de kruddock_api_url
.
L'API WP Settings nous permet de modifier n'importe quelle option à la volée à l'aide du filtre dynamique option_{$option}
. Voici comment le crochet dynamique dans cet exemple pourrait être utilisé par un autre développeur:
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;
}