SaveTo Wishlist pour WooCommerce
Commencer
Comment étendre SaveTo Wishlist Pro avec des hooks et l'API REST - SaveTo Wishlist
  1. Accueil
  2. Base de connaissances
  3. Liste de souhaits
  4. Guides développeur
  5. Comment étendre SaveTo Wishlist Pro avec des hooks et l'API REST
  1. Accueil
  2. Base de connaissances
  3. Liste de souhaits
  4. Comment étendre SaveTo Wishlist Pro avec des hooks et l'API REST

Comment étendre SaveTo Wishlist Pro avec des hooks et l'API REST

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.

RouteMéthodeQui peut l'appelerCe qu'il fait
/analytics/products-insightGETAdministrateurs, 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-insightGETAdministrateurs, débit limitéRetourne des informations sur les catégories et les marques.
/analytics/engagement-insightGETAdministrateurs, débit limitéRetourne des informations sur l'engagement des produits.
/analytics/timebased-trendsGETAdministrateurs, 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-behaviorGETAdministrateurs, 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/refreshPOSTAdministrateursEfface 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.

RouteMéthodeCe qu'il fait
/automations/get-automationsGETRenvoie les automatisations enregistrées. Les paramètres de requête sont utilisés comme filtres.
/automations/save-automationPOSTCrée ou met à jour une automatisation. Il lit id, trigger_type, action_type, status, description et action_data.
/automations/delete-automationDELETESupprime l'automatisation avec l'ID dans le paramètre id. Renvoie une erreur 400 lorsque l'ID est vide.
/automations/send-test-emailPOSTEnvoie 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.

RouteMéthodeCe qu'il fait
/default-wishlists/settingsGET, POSTLit ou enregistre les paramètres des listes de souhaits par défaut. La requête POST lit le paramètre list.
/default-wishlists/migration-statusGETRenvoie 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-migrationPOSTDémarre ce travail.
/default-wishlists/cancel-migrationPOSTAnnule 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

FiltreArgumentsCe qu'il fait
stwpro_api_admin_permissions_check$response, $requestFiltre 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, $requestFiltre le résultat de la vérification de la clé API sur la route du webhook.
stwpro_api_rate_limit$limit, $request, $is_readDé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, $requestFiltre 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.

FiltreArgumentsCe qu'il fait
stwpro_automation_actions$actionsFiltre la liste des types d'actions. Chaque élément est une clé d'action et son libellé.
stwpro_automation_action_handlers$handlersFiltre 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.

FiltreArguments
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}.

FiltreArgumentsCe qu'il filtre
stwpro_automation_email_subject_template$subject_template, $automation, $action_data, $context_data, $data, $paramsLe sujet brut de l'e-mail.
stwpro_automation_email_message_template$message_template, $automation, $action_data, $context_data, $data, $paramsLe message brut de l'e-mail.
stwpro_automation_webhook_payload_template$payload_template, $automation, $action_data, $context_data, $data, $paramsLa charge utile brute du webhook.
stwpro_automation_usermeta_meta_value_template$meta_value, $automation, $action_data, $context_data, $data, $paramsLa valeur brute pour l'action de mise à jour des métadonnées utilisateur.

Trois filtres supplémentaires ont leurs propres arguments :

FiltreArgumentsCe qu'il filtre
stwpro_automation_variables$trigger_variables, $trigger_typeLes balises de variable disponibles pour un déclencheur.
stwpro_automation_webhook_recipes$recipesLes recettes de démarrage rapide pour les webhooks.
stwpro_automations_get_all_automations$automations, $trigger_type, $action_typeLes 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_created
  • stwpro_automation_data_item_added_to_wishlist
  • stwpro_automation_data_item_removed_from_wishlist
  • stwpro_automation_data_product_on_sale
  • stwpro_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.

NiveauFiltre du nombre d'articles sur la liste de souhaitsPar défautFiltre des dépensesPar défaut
Platinestwpro_admin_platinum_threshold8stwpro_admin_platinum_spent_threshold1500
Orstwpro_admin_gold_threshold5stwpro_admin_gold_spent_threshold800
Argentstwpro_admin_silver_threshold3stwpro_admin_silver_spent_threshold400
Bronzestwpro_admin_bronze_threshold2stwpro_admin_bronze_spent_threshold200
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 :

FiltreArgumentsPar défautCe qu'il fait
stwpro_admin_vip_threshold$value5Nombre d'articles sur la liste de souhaits pour le segment des clients VIP.
stwpro_admin_vip_spent_threshold$value800Montant total dépensé pour le segment des clients VIP.
stwpro_admin_inactive_days$value90Jours sans activité avant qu'un client ne soit considéré comme inactif.
stwpro_admin_top_wishlisters_limit$limit15Nombre de clients que la liste des meilleurs clients renvoie.
stwpro_admin_top_wishlisters_excluded_roles$excluded_rolesarray( 'administrator', 'shop_manager' )Rôles exclus de la liste des meilleurs souhaitants.
stwpro_admin_customer_segments$segments, $total_customersAucunLa liste finale des segments de clientèle.

Données analytiques, cache et actualisation

HookType et argumentsCe qu'il fait
stwpro_analytics_products_insight_dataFiltre : $products_insight, $requestModifie les données retournées par la route products-insight.
stwpro_analytics_products_insight_cache_durationFiltre : $secondsDé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_cooldownFiltre : $secondsDé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_refreshedAction : $timestampS'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.

HookType et argumentsCe qu'il fait
stwpro_default_wishlists_sync_thresholdFiltre : $thresholdSi 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_entriesFiltre : $maxLe 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_wishlistsAction : $user_id, $created, $listS'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

HookType et argumentsCe qu'il fait
stwpro_wholesale_priceFiltre : $price, $product_id, $user, $user_wholesale_rolePermet à 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_abilitiesFiltre : $disabledRetourne 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_emailFiltre : $showRetourne false pour supprimer la ligne « Propulsé par SaveTo Wishlist » des e-mails envoyés par Pro.
stwpro_wishlist_createdAction : $wishlist_data, $wishlist_itemsS'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.

Cet article vous a-t-il été utile ?

Articles liés

Besoin d'aide ?

Vous ne trouvez pas la réponse que vous cherchez ?
Contacter le support
Finaliser votre achat