Besoin de modifier le comportement de SaveTo Wishlist Pro sans éditer le plugin ? Vous pouvez le faire avec les hooks WordPress et l'API REST du plugin. Cet article répertorie les hooks et les routes que vous pouvez utiliser, avec les arguments que chacun passe et de courts exemples PHP. Tout ce qui est ici s'applique à SaveTo Wishlist Pro 1.0.4.
Avant de commencer
SaveTo Wishlist Pro fonctionne sur SaveTo Wishlist Lite, donc les deux plugins doivent être actifs. Placez votre code de hook dans un petit plugin personnalisé ou un plugin must-use, pas dans les fichiers de SaveTo Wishlist Pro, car les mises à jour du plugin remplacent ces fichiers.
Chaque nom de hook Pro commence par stwpro_. Les hooks du plugin gratuit sont couverts dans Comment étendre SaveTo Wishlist avec des hooks et l'API REST.
Les hooks et filtres ci-dessous sont répertoriés avec les arguments qu'ils passent. Lorsque vous ajoutez un filtre, définissez le nombre d'arguments acceptés pour qu'il corresponde, sinon WordPress ne vous passe que le premier argument. Retournez le premier argument (ou une copie modifiée de celui-ci) de chaque filtre.
Routes de l'API REST
Toutes les routes SaveTo Wishlist Pro utilisent l'espace de noms saveto-wishlist-pro/v1, donc l'URL complète ressemble à https://example.com/wp-json/saveto-wishlist-pro/v1/analytics/products-insight.
Qui peut appeler les routes
Les routes d'analyse, d'automatisation, de listes de souhaits par défaut et de licence servent les propres écrans d'administration du plugin, et elles peuvent changer. Elles ne répondent qu'aux requêtes d'un utilisateur connecté qui a la capacité manage_options (administrateurs par défaut). Toute autre personne reçoit une erreur 401 ou 403. Envoyez la requête avec une session de connexion WordPress normale et un nonce REST, ou avec toute autre méthode d'authentification REST que votre site prend en charge.
Les routes de lecture d'analyse, les routes d'automatisation et les routes de licence ont également une limite de débit par utilisateur. Les requêtes de lecture (GET) obtiennent 300 requêtes par minute. Toutes les autres méthodes obtiennent 60 requêtes par minute. Lorsque vous dépassez la limite, la route renvoie une erreur 429 avec le code rate_limit_exceeded. Vous pouvez modifier les limites avec le filtre stwpro_api_rate_limit, couvert ci-dessous.
Routes d'analyse
Le chemin de base est /analytics.
| Route | Méthode | Qui peut l'appeler | Ce qu'il fait |
|---|---|---|---|
/analytics/products-insight | GET | Administrateurs, débit limité | Retourne les produits les plus populaires, tendance et récemment ajoutés. Accepte period avec la valeur 7days ou 30days. La valeur par défaut est 7days. |
/analytics/category-brand-insight | GET | Administrateurs, débit limité | Retourne des informations sur les catégories et les marques. |
/analytics/engagement-insight | GET | Administrateurs, débit limité | Retourne des informations sur l'engagement des produits. |
/analytics/timebased-trends | GET | Administrateurs, débit limité | Retourne les tendances au fil du temps. Accepte range avec la valeur 7days, 30days, 90days ou 365days. La valeur par défaut est 30days. |
/analytics/customer-behavior | GET | Administrateurs, débit limité | Retourne des informations sur le comportement des clients, y compris les meilleurs clients de listes de souhaits et les segments de clients. |
/analytics/refresh | POST | Administrateurs | Efface les caches d'analyse. Un utilisateur peut actualiser une fois toutes les 30 secondes. Une requête plus rapide renvoie une erreur 429 avec le code cooldown_active. |
Les réponses d'analyse sont mises en cache pendant une heure par défaut. Un appel réussi à /analytics/refresh efface le cache, de sorte que la prochaine lecture renvoie des données fraîches.
Cet exemple lit les produits tendance des 30 derniers jours depuis le navigateur, dans un script qui s'exécute sur un écran d'administration WordPress :
wp.apiFetch( {
path: '/saveto-wishlist-pro/v1/analytics/products-insight?period=30days',
} ).then( ( data ) => {
console.log( data.most_popular, data.trending, data.recently_added );
} );
Routes d'automatisation
Le chemin de base est /automations. Les quatre routes nécessitent un administrateur et sont limitées en débit.
| Route | Méthode | Ce qu'il fait |
|---|---|---|
/automations/get-automations | GET | Renvoie les automatisations enregistrées. Les paramètres de requête sont utilisés comme filtres. |
/automations/save-automation | POST | Crée ou met à jour une automatisation. Il lit id, trigger_type, action_type, status, description et action_data. |
/automations/delete-automation | DELETE | Supprime l'automatisation avec l'ID dans le paramètre id. Renvoie une erreur 400 lorsque l'ID est vide. |
/automations/send-test-email | POST | Envoie un e-mail de test avec des données fictives. Il lit email_to, email_subject et email_body. |
Routes des listes de souhaits par défaut
Le chemin de base est /default-wishlists. Toutes les routes nécessitent un administrateur.
| Route | Méthode | Ce qu'il fait |
|---|---|---|
/default-wishlists/settings | GET, POST | Lit ou enregistre les paramètres des listes de souhaits par défaut. La requête POST lit le paramètre list. |
/default-wishlists/migration-status | GET | Renvoie la progression du travail qui crée des listes de souhaits par défaut pour les utilisateurs existants qui n'en ont pas, et combien d'utilisateurs sont encore éligibles. |
/default-wishlists/start-migration | POST | Démarre ce travail. |
/default-wishlists/cancel-migration | POST | Annule ce travail. |
Route Webhook
La route /webhook/wishlist-created est différente des autres. Elle n'utilise pas de connexion WordPress. Elle utilise la clé API webhook, envoyée dans l'en-tête x-api-key ou le paramètre de requête api_key, et elle répond 401 si la clé est manquante ou incorrecte. Une requête POST déclenche l'action stwpro_wishlist_created. Une requête GET avec un paramètre wishlist_id renvoie une liste de souhaits publique et publiée. Pour les détails de configuration et de sécurité, lisez Comment connecter des outils externes en utilisant les webhooks de liste de souhaits et Comment sécuriser le point de terminaison de l'API webhook SaveTo Wishlist Pro.
Filtres pour les autorisations de route
| Filtre | Arguments | Ce qu'il fait |
|---|---|---|
stwpro_api_admin_permissions_check | $response, $request | Filtre le résultat de la vérification administrateur sur les routes réservées aux administrateurs. Retourne true pour autoriser, ou une WP_Error pour refuser. |
stwpro_webhook_permissions_check | $response, $request | Filtre le résultat de la vérification de la clé API sur la route du webhook. |
stwpro_api_rate_limit | $limit, $request, $is_read | Définit les requêtes autorisées par minute. Les valeurs par défaut sont 300 pour les requêtes de lecture et 60 pour les autres. |
stwpro_api_rate_limit_check | $result, $request | Filtre le résultat final de la vérification de la limite de requêtes. |
Par exemple, ceci augmente la limite d'écriture à 120 requêtes par minute :
add_filter( 'stwpro_api_rate_limit', function ( $limit, $request, $is_read ) {
return $is_read ? $limit : 120;
}, 10, 3 );
Crochets d'automatisation
Les automatisations connectent un déclencheur, comme un produit en promotion, à une action, comme l'envoi d'un e-mail. Ces crochets vous permettent d'ajouter vos propres actions et de modifier ce que les actions intégrées envoient.
Ajouter votre propre action d'automatisation
Deux filtres fonctionnent ensemble. Utilisez stwpro_automation_actions pour ajouter votre action à la liste des actions, et utilisez stwpro_automation_action_handlers pour spécifier quelle fonction l'exécute. Les types d'actions intégrés sont send_email, call_webhook et update_user_meta.
| Filtre | Arguments | Ce qu'il fait |
|---|---|---|
stwpro_automation_actions | $actions | Filtre la liste des types d'actions. Chaque élément est une clé d'action et son libellé. |
stwpro_automation_action_handlers | $handlers | Filtre la correspondance entre le type d'action et le gestionnaire. Le gestionnaire doit être appelable. Si votre rappel renvoie autre chose qu'un tableau, le plugin l'ignore et conserve les gestionnaires intégrés. |
WordPress appelle votre gestionnaire avec cinq arguments : les automatisations actives de ce type pour le déclencheur, les données d'automatisation, l'objet de contexte du déclencheur, un booléen pour la condition de catégorie de produit et un tableau de paramètres supplémentaires.
add_filter( 'stwpro_automation_actions', function ( $actions ) {
$actions['send_to_crm'] = __( 'Send to my CRM', 'my-plugin' );
return $actions;
} );
add_filter( 'stwpro_automation_action_handlers', function ( $handlers ) {
$handlers['send_to_crm'] = 'my_plugin_process_crm_automations';
return $handlers;
} );
function my_plugin_process_crm_automations( $automations, $automation_data, $context_data, $category_condition, $params ) {
foreach ( $automations as $automation ) {
// Send $automation_data to your CRM here.
}
}
Changer qui reçoit un e-mail d'automatisation
Deux filtres définissent le destinataire de l'e-mail. stwpro_automation_filter_email_to_customer s'exécute une fois par propriétaire de liste de souhaits pour les déclencheurs de produit en promotion et de retour en stock. stwpro_automation_filter_email_to s'exécute pour tous les autres déclencheurs. Avec les deux filtres, une adresse vide ou invalide ignore l'e-mail.
| Filtre | Arguments |
|---|---|
stwpro_automation_filter_email_to | $email_to, $action_data, $context_data, $data, $params |
stwpro_automation_filter_email_to_customer | $email_to, $action_data, $per_customer_data, $context_data, $params |
Cet exemple envoie tous les e-mails d'automatisation à une adresse de test sur un site de staging, et ignore les clients qui se sont désabonnés :
add_filter( 'stwpro_automation_filter_email_to', function ( $email_to ) {
if ( 'production' !== wp_get_environment_type() ) {
return '[email protected]';
}
return $email_to;
}, 10, 1 );
add_filter( 'stwpro_automation_filter_email_to_customer', function ( $email_to, $action_data, $per_customer_data ) {
$customer_id = (int) ( $per_customer_data['customer_id'] ?? 0 );
if ( $customer_id && get_user_meta( $customer_id, 'no_wishlist_alerts', true ) ) {
return '';
}
return $email_to;
}, 10, 3 );
Modifier le contenu et les données de l'automatisation
Ces quatre filtres transmettent la valeur que vous filtrez en premier. Les arguments suivants sont l'enregistrement de l'automatisation, les paramètres de l'action, le contexte du déclencheur, les données de la variable résolue et les paramètres supplémentaires. Ils s'exécutent avant que le plugin ne remplace les balises de variable, de sorte que vos modifications peuvent toujours contenir des balises telles que {customer_name}.
| Filtre | Arguments | Ce qu'il filtre |
|---|---|---|
stwpro_automation_email_subject_template | $subject_template, $automation, $action_data, $context_data, $data, $params | Le sujet brut de l'e-mail. |
stwpro_automation_email_message_template | $message_template, $automation, $action_data, $context_data, $data, $params | Le message brut de l'e-mail. |
stwpro_automation_webhook_payload_template | $payload_template, $automation, $action_data, $context_data, $data, $params | La charge utile brute du webhook. |
stwpro_automation_usermeta_meta_value_template | $meta_value, $automation, $action_data, $context_data, $data, $params | La valeur brute pour l'action de mise à jour des métadonnées utilisateur. |
Trois filtres supplémentaires ont leurs propres arguments :
| Filtre | Arguments | Ce qu'il filtre |
|---|---|---|
stwpro_automation_variables | $trigger_variables, $trigger_type | Les balises de variable disponibles pour un déclencheur. |
stwpro_automation_webhook_recipes | $recipes | Les recettes de démarrage rapide pour les webhooks. |
stwpro_automations_get_all_automations | $automations, $trigger_type, $action_type | Les automatisations actives pour un type de déclencheur et d'action. |
Pour les données de variable de chaque déclencheur, utilisez l'un de ces filtres. Ils transmettent tous $variable_data, $trigger_type, $context_data.
stwpro_automation_data_wishlist_createdstwpro_automation_data_item_added_to_wishliststwpro_automation_data_item_removed_from_wishliststwpro_automation_data_product_on_salestwpro_automation_data_product_back_in_stock
Hooks d'analyse
Seuils de niveau et de segment client
L'analyse client place chaque client le plus actif dans une catégorie. Un client atteint un niveau lorsque les deux conditions sont remplies : le nombre d'articles sur la liste de souhaits et le montant total dépensé. Le plugin vérifie les niveaux du platine au bronze, et les clients qui ne correspondent à aucun sont considérés comme réguliers. Chaque filtre prend un argument, la valeur par défaut, et renvoie un nombre.
| Niveau | Filtre du nombre d'articles sur la liste de souhaits | Par défaut | Filtre des dépenses | Par défaut |
|---|---|---|---|---|
| Platine | stwpro_admin_platinum_threshold | 8 | stwpro_admin_platinum_spent_threshold | 1500 |
| Or | stwpro_admin_gold_threshold | 5 | stwpro_admin_gold_spent_threshold | 800 |
| Argent | stwpro_admin_silver_threshold | 3 | stwpro_admin_silver_spent_threshold | 400 |
| Bronze | stwpro_admin_bronze_threshold | 2 | stwpro_admin_bronze_spent_threshold | 200 |
add_filter( 'stwpro_admin_platinum_threshold', function () {
return 10;
} );
add_filter( 'stwpro_admin_platinum_spent_threshold', function () {
return 2500;
} );
D'autres filtres d'analyse modifient les segments de clients et les listes affichées sur les écrans d'analyse :
| Filtre | Arguments | Par défaut | Ce qu'il fait |
|---|---|---|---|
stwpro_admin_vip_threshold | $value | 5 | Nombre d'articles sur la liste de souhaits pour le segment des clients VIP. |
stwpro_admin_vip_spent_threshold | $value | 800 | Montant total dépensé pour le segment des clients VIP. |
stwpro_admin_inactive_days | $value | 90 | Jours sans activité avant qu'un client ne soit considéré comme inactif. |
stwpro_admin_top_wishlisters_limit | $limit | 15 | Nombre de clients que la liste des meilleurs clients renvoie. |
stwpro_admin_top_wishlisters_excluded_roles | $excluded_roles | array( 'administrator', 'shop_manager' ) | Rôles exclus de la liste des meilleurs souhaitants. |
stwpro_admin_customer_segments | $segments, $total_customers | Aucun | La liste finale des segments de clientèle. |
Données analytiques, cache et actualisation
| Hook | Type et arguments | Ce qu'il fait |
|---|---|---|
stwpro_analytics_products_insight_data | Filtre : $products_insight, $request | Modifie les données retournées par la route products-insight. |
stwpro_analytics_products_insight_cache_duration | Filtre : $seconds | Définit la durée de mise en cache de cette réponse. La valeur par défaut est d'une heure. Les routes catégorie et marque, engagement, tendances temporelles et comportement client ont des filtres correspondants : stwpro_analytics_category_brand_insight_cache_duration, stwpro_analytics_engagement_insight_cache_duration, stwpro_analytics_timebased_trends_cache_duration et stwpro_analytics_customer_behavior_cache_duration. |
stwpro_analytics_refresh_cooldown | Filtre : $seconds | Définit le nombre de secondes d'attente entre les actualisations. La valeur par défaut est 30. Retournez 0 pour désactiver l'attente. |
stwpro_analytics_refreshed | Action : $timestamp | S'exécute après qu'une actualisation a vidé les caches. Utilisez-la pour reconstruire vos propres données dérivées. |
Les seuils ci-dessus sont lus lors du calcul des analyses. Si vous en modifiez un et que l'écran ne change pas, actualisez les analyses afin que les résultats mis en cache soient reconstruits.
Crochets de listes de souhaits par défaut
Ces crochets contrôlent les listes de souhaits que Pro crée automatiquement pour les nouveaux utilisateurs.
| Hook | Type et arguments | Ce qu'il fait |
|---|---|---|
stwpro_default_wishlists_sync_threshold | Filtre : $threshold | Si la liste configurée contient plus de listes de souhaits que ce nombre, Pro les crée en arrière-plan avec Action Scheduler au lieu de pendant l'enregistrement. La valeur par défaut est 3. |
stwpro_default_wishlists_max_entries | Filtre : $max | Le nombre maximum de listes de souhaits par défaut que vous pouvez enregistrer dans la liste. La valeur par défaut est 20. |
stwpro_after_seed_default_wishlists | Action : $user_id, $created, $list | S'exécute après qu'un utilisateur reçoit les listes de souhaits par défaut. $created est le nombre de listes de souhaits créées. Ne s'exécute pas lorsque aucune n'a été créée. |
add_action( 'stwpro_after_seed_default_wishlists', function ( $user_id, $created, $list ) {
update_user_meta( $user_id, 'default_wishlists_created', $created );
}, 10, 3 );
Autres hooks
| Hook | Type et arguments | Ce qu'il fait |
|---|---|---|
stwpro_wholesale_price | Filtre : $price, $product_id, $user, $user_wholesale_role | Permet à un autre plugin de vente en gros de fournir le prix de gros. Retourne un flottant pour ignorer la recherche Prix de gros. Retourne false pour utiliser la recherche par défaut. |
stwpro_disable_abilities | Filtre : $disabled | Retourne true pour empêcher Pro d'enregistrer ses capacités. Vous pouvez également définir la constante STWPRO_DISABLE_ABILITIES sur true. |
stwpro_show_powered_by_in_email | Filtre : $show | Retourne false pour supprimer la ligne « Propulsé par SaveTo Wishlist » des e-mails envoyés par Pro. |
stwpro_wishlist_created | Action : $wishlist_data, $wishlist_items | S'exécute lorsqu'une requête POST valide atteint la route webhook /webhook/wishlist-created. |
add_filter( 'stwpro_show_powered_by_in_email', '__return_false' );
Questions fréquemment posées
Puis-je appeler les routes d'analyse ou d'automatisation depuis l'extérieur de WordPress ?
Uniquement en tant qu'administrateur connecté. Ces routes vérifient la capacité manage_options et servent les propres écrans du plugin, alors basez-vous sur les hooks ci-dessus pour tout ce qui doit rester stable. Pour les systèmes externes, utilisez la route webhook avec sa clé API.
Pourquoi mes modifications de seuil ne s'affichent-elles pas sur l'écran d'analyse ?
Les résultats d'analyse sont mis en cache, pendant une heure par défaut. Actualisez l'analyse, ou raccourcissez le cache avec les filtres de durée de cache, et les nouveaux seuils s'appliquent.
Besoin d'aide ?
Si vous avez une question ou rencontrez un problème, nous sommes là pour vous aider.
- Utilisateurs premium : Ouvrir un ticket de support
- Utilisateurs gratuits : Visitez notre forum communautaire
