SaveTo Wishlist per WooCommerce
Inizia
Come estendere SaveTo Wishlist con hook e REST API - SaveTo Wishlist
  1. Casa
  2. Knowledge Base
  3. Lista dei desideri
  4. Guide per sviluppatori
  5. Come estendere SaveTo Wishlist con hook e la REST API
  1. Casa
  2. Knowledge Base
  3. Lista dei desideri
  4. Come estendere SaveTo Wishlist con hook e la REST API

Come estendere SaveTo Wishlist con hook e la REST API

Stai creando un'integrazione personalizzata, modificando l'aspetto del pulsante della wishlist o vuoi reagire quando un cliente salva un prodotto? SaveTo Wishlist ti offre filtri e azioni di WordPress per ognuno di questi compiti, più un'API REST per leggere e modificare le wishlist. Questo articolo elenca gli hook e le route inclusi in SaveTo Wishlist Lite 1.1.8, con gli argomenti che ciascuno riceve e un esempio funzionante per i casi comuni.

Prima di iniziare

  • Sono necessari SaveTo Wishlist Lite e WooCommerce attivi sul sito. SaveTo Wishlist Pro e Registry aggiungono i propri hook, che non sono trattati qui.
  • Ogni nome di hook inizia con stwlite_.
  • Inserisci il tuo codice in un piccolo plugin personalizzato o in un plugin per snippet di codice. Aggiungi i filtri di posizionamento (vedi sotto) in un file del plugin, non nel file functions.php del tema.
  • Ogni hook e route in questo articolo esiste in SaveTo Wishlist Lite 1.1.8. Un hook non elencato qui non fa parte dell'interfaccia pubblica, quindi non fare affidamento su di esso.

Hook

Ogni hook sottostante elenca il suo tipo, gli argomenti che riceve e cosa fa. Quando registri una callback che accetta più di un argomento, passa il numero di argomenti come quarto parametro di add_filter() o add_action(), come mostrano gli esempi.

Output del pulsante

Questi filtri modificano il markup del pulsante della wishlist prima che venga stampato. Il plugin passa il markup finale attraverso wp_kses(), quindi i tag e gli attributi al di fuori della sua lista consentita vengono rimossi. Per consentire più tag, usa il filtro stwlite_allowed_button_html, che riceve l'array della lista consentita.

HookTipoArgomentiCosa fa
stwlite_wishlist_button_htmlFiltro$button_html, $product, $placement, $style, $button_labelFiltra il markup di ogni pulsante della wishlist creato dal plugin. Viene eseguito anche quando il pulsante è nascosto, nel qual caso $button_html è una stringa vuota.
stwlite_wishlist_button_shop_htmlFiltro$button_html, $product, $placement, $style, $color_optionsFiltra il pulsante nelle pagine dello shop e degli archivi.
stwlite_wishlist_button_product_htmlFiltro$button_html, $product, $placement, $style, $color_optionsFiltra il pulsante nelle pagine dei singoli prodotti. Se la tua callback restituisce una stringa vuota, non viene stampato alcun pulsante.
stwlite_wishlist_button_cart_htmlFiltro$button_htmlFiltra il pulsante nella pagina del carrello che salva l'intero carrello.
stwlite_wishlist_button_cart_item_htmlFiltro$button_html, $product, $style, $color_optionsFiltra il pulsante per articolo nel carrello.
stwlite_wishlist_button_show_buttonFiltro$show (predefinito true), $productRestituisci false per nascondere il pulsante per un prodotto.
stwlite_wishlist_button_allow_product_multiple_listsFiltro$allow (predefinito true), $productRestituisci false per rimuovere il menu a discesa "Scegli lista" dal pulsante.
stwlite_before_wishlist_button_shop_page, stwlite_after_wishlist_button_shop_pageAzioneNessunoEsegui prima e dopo la stampa del pulsante della pagina negozio.
stwlite_allowed_button_htmlFiltro$allowed_htmlFiltra la lista consentita di wp_kses() per il markup del pulsante.

Questo esempio aggiunge una breve nota dopo il pulsante per i prodotti in saldo:

add_filter( 'stwlite_wishlist_button_html', function ( $button_html, $product, $placement, $style, $button_label ) {
    if ( '' === $button_html || ! $product instanceof WC_Product || ! $product->is_on_sale() ) {
        return $button_html;
    }

    return $button_html . '<span class="my-sale-note">On sale</span>';
}, 10, 5 );

Posizionamento, stile ed etichette del pulsante

Questi filtri modificano dove appare il pulsante e come appare. Ognuno riceve l'impostazione salvata e restituisce il valore da utilizzare.

HookTipoArgomentiCosa fa
stwlite_wishlist_button_shop_placementFiltro$placementPosizionamento nelle pagine negozio e archivio.
stwlite_wishlist_button_product_placementFiltro$placementPosizionamento nelle pagine del singolo prodotto.
stwlite_wishlist_button_shop_style, stwlite_wishlist_button_product_style, stwlite_wishlist_button_cart_styleFiltro$styleStile del pulsante per ogni tipo di pagina.
stwlite_wishlist_button_shop_label, stwlite_wishlist_button_selected_shop_label, stwlite_wishlist_button_cart_labelFiltro$labelTesto del pulsante per lo stato non salvato, lo stato salvato e il pulsante del carrello.
stwlite_wishlist_button_shop_color_options, stwlite_wishlist_button_product_color_options, stwlite_wishlist_button_cart_color_optionsFiltro$color_optionsL'array delle impostazioni colore per ogni tipo di pagina.

I posizionamenti nel negozio sono top_right, top_left, above_title, below_title, above_button, below_button e disable. I posizionamenti nella pagina del prodotto sono top_image_right, top_image_left, top_cart, bottom_cart, inline_cart, top_title, bottom_title e disable. Il plugin legge il posizionamento una volta, quando si avvia sull'hook setup_theme con priorità 100. Un filtro di posizionamento deve quindi essere aggiunto prima di quel punto, quindi registralo in un file di plugin e non in un file functions.php del tema. I filtri di stile, etichetta e colore vengono eseguiti ogni volta che un pulsante viene visualizzato, quindi funzionano da qualsiasi codice.

add_filter( 'stwlite_wishlist_button_product_placement', function ( $placement ) {
    return 'bottom_cart';
} );

Per la schermata delle impostazioni corrispondente, vedere Come personalizzare il posizionamento e gli stili del pulsante della wishlist in WooCommerce.

Dati della wishlist

Questi filtri modificano i dati della wishlist mentre il plugin li legge. Vengono eseguiti su molte richieste, inclusi i controlli di proprietà e permessi, quindi mantieni le tue callback veloci. Non modificare i valori id, user_id, status o is_public, poiché il plugin li legge per decidere chi può vedere una wishlist.

HookTipoArgomentiCosa fa
stwlite_collection_dataFiltro$collectionFiltra la riga grezza del database ogni volta che una wishlist viene caricata per ID, codice URL o nome.
stwlite_collections_dataFiltro$dataFiltra l'array di oggetti wishlist restituiti per un elenco di wishlist.
stwlite_single_collection_dataFiltro$dataFiltra un singolo oggetto wishlist dopo un salvataggio e nel percorso della wishlist dell'amministratore.
stwlite_collection_items_dataFiltro$dataFiltra l'array di oggetti articolo per una wishlist.
stwlite_all_wishlistsFiltro$collections, $paramsFiltra il risultato dell'elenco (data, total, currentPage) prima che il frontend lo restituisca.
stwlite_collection_data_to_updateFiltro$data, $paramsFiltra i valori delle colonne appena prima che il plugin scriva una wishlist nel database.
stwlite_optionsFiltro$optionsFiltra l'array di opzioni che il plugin passa allo script frontend della wishlist.

Questo esempio rimuove la descrizione dagli oggetti wishlist nelle risposte dell'elenco:

add_filter( 'stwlite_collections_data', function ( $collections ) {
    foreach ( $collections as $collection ) {
        $collection->description = '';
    }

    return $collections;
} );

Accesso alla wishlist dell'utente

Questi filtri decidono chi può leggere o possedere una wishlist. Per una richiesta di lettura, il plugin prima consente agli amministratori con la capacità manage_options, poi al proprietario della wishlist, poi alle wishlist pubbliche pubblicate, poi alle proprie regole di condivisione. Solo dopo tali controlli chiama stwlite_user_wishlist_access.

HookTipoArgomentiCosa fa
stwlite_user_wishlist_accessFiltro$granted (predefinito null), $data, $user_id, $requestRestituisci true per consentire l'accesso in lettura, false per rifiutarlo, o null per lasciare che sia il plugin a decidere. $data è l'oggetto wishlist, $user_id è 0 per un ospite e $request è la richiesta REST quando presente.
stwlite_user_owns_wishlistFiltro$owns, $collection_id, $user_id, $collectionSe l'utente corrente possiede la wishlist. Viene eseguito solo per una wishlist esistente.
stwlite_show_all_wishlists_for_adminFiltro$show (predefinito false)Restituisci true per consentire agli amministratori di vedere ogni wishlist del cliente nel percorso delle wishlist del frontend.

Questo esempio consente ai responsabili del negozio di leggere qualsiasi wishlist:

add_filter( 'stwlite_user_wishlist_access', function ( $granted, $wishlist, $user_id, $request ) {
    if ( $user_id && user_can( $user_id, 'manage_woocommerce' ) ) {
        return true;
    }

    return $granted;
}, 10, 4 );

Azioni della wishlist

Usa queste azioni per reagire quando qualcosa cambia, ad esempio per sincronizzare i dati con un CRM o scrivere una voce di log.

HookTipoArgomentiQuando si attiva
stwlite_before_product_added_to_wishlistAzione$product_id, $quantity, $collection_id, $user_idPrima che un prodotto venga aggiunto a una wishlist dal pulsante o dalle funzionalità AI del plugin.
stwlite_after_product_added_to_wishlistAzione$product_id, $quantity, $collection_id, $user_id, $addedDopo tale salvataggio. $added è false quando non è stato scritto nulla. $collection_id è il valore grezzo della richiesta ed è spesso 0, che indica la wishlist predefinita.
stwlite_before_product_removed_from_wishlistAzione$product_id, $collection_id, $variation_idsPrima che un prodotto venga rimosso da una wishlist tramite il pulsante.
stwlite_after_product_removed_from_wishlistAzione$product_id, $collection_id, $variation_idsDopo che un prodotto è stato rimosso da una wishlist, tramite il pulsante, l'API REST o le funzionalità AI.
stwlite_before_product_added_to_cart, stwlite_after_product_added_to_cartAzione$collection_id, $product_id, $quantity, $variation_idPrima e dopo che un articolo della wishlist viene spostato nel carrello.
stwlite_before_save_collectionAzione$dataPrima che una wishlist venga salvata. $data è l'array dei valori delle colonne.
stwlite_after_save_collectionAzione$data, $paramsDopo che una wishlist è stata salvata. $data è l'oggetto della wishlist salvata.
stwlite_after_insert_collection_item, stwlite_after_update_collection_itemAzione$dataDopo che una riga di articolo è stata inserita o aggiornata.
stwlite_before_delete_collectionsAzione$idsPrima che le wishlist vengano eliminate.
stwlite_after_delete_collectionsAzione$ids, $deletedDopo che le wishlist sono state eliminate. $deleted è il numero di wishlist eliminate.

Questo esempio memorizza l'ultimo prodotto salvato da un cliente nei suoi meta utente:

add_action( 'stwlite_after_product_added_to_wishlist', function ( $product_id, $quantity, $collection_id, $user_id, $added ) {
    if ( ! $added || ! $user_id ) {
        return;
    }

    update_user_meta( $user_id, 'my_last_wishlisted_product', (int) $product_id );
}, 10, 5 );

Schede e controlli delle impostazioni di amministrazione

La schermata delle impostazioni costruisce le sue schede e i suoi campi da array. Usa questi filtri per aggiungere la tua scheda, sezione o campo, o per modificarne uno esistente.

HookTipoArgomentiCosa fa
stwlite_admin_setting_tabsFiltro$tabsFiltro finale per l'array completo delle schede.
stwlite_admin_setting_controlsFiltro$controlsFiltro finale per l'array completo dei controlli.
stwlite_admin_data_tablesFiltro$data_tables (array vuoto predefinito)Registra le tabelle dati per l'app delle impostazioni.
stwlite_admin_setting_default_tabs, stwlite_admin_setting_default_parent_tabs, stwlite_admin_setting_default_child_tabsFiltro$tabsFiltri precedenti per l'array delle schede, la scheda principale e le schede secondarie.
stwlite_admin_setting_default_general_tab, stwlite_admin_setting_default_wishlist_page_tab, stwlite_admin_setting_default_wishlist_guest_tab, stwlite_admin_setting_default_wishlist_button_tab, stwlite_admin_setting_default_importer_tabFiltro$tabFiltra una scheda secondaria. Le varianti _sections di questi nomi filtrano le sezioni di quella scheda.
stwlite_admin_setting_default_controlsFiltro$controlsFiltro precedente per l'array dei controlli.
stwlite_admin_setting_default_general_tab_controls, stwlite_admin_setting_default_wishlist_page_tab_controls, stwlite_admin_setting_default_wishlist_guest_tab_controls, stwlite_admin_setting_default_wishlist_button_tab_controlsFiltro$controlsFiltra i controlli di una scheda.

Le schede si trovano sotto la chiave padre saveto_wishlist. Le chiavi delle schede secondarie sono general, wishlist_page, wishlist_guest, wishlist_button e importer. Ogni scheda secondaria contiene sort, key, label, icon e un array sections. L'array dei controlli è indicizzato come $controls[ 'saveto_wishlist' ][ $tab_key ][ $section_key ], e ogni sezione contiene un elenco di array di controlli. Un controllo ha un type (ad esempio switch o select), un label, un id che è il nome dell'opzione, una description e un default. I controlli di tipo switch usano i valori yes e no.

Questo esempio aggiunge uno switch alla scheda Generale. Presuppone la chiave di sezione save_to_wishlist_settings, che è la prima sezione di quella scheda.

add_filter( 'stwlite_admin_setting_default_general_tab_controls', function ( $controls ) {
    $controls['save_to_wishlist_settings'][] = array(
        'type'        => 'switch',
        'label'       => __( 'Log wishlist adds', 'my-plugin' ),
        'id'          => 'my_plugin_log_wishlist_adds',
        'description' => __( 'If Yes, write an entry to the debug log when a customer saves a product.', 'my-plugin' ),
        'options'     => array(
            'yes' => __( 'Yes', 'my-plugin' ),
            'no'  => __( 'No', 'my-plugin' ),
        ),
        'default'     => get_option( 'my_plugin_log_wishlist_adds', 'no' ),
    );

    return $controls;
} );

La schermata delle impostazioni salva ogni valore di controllo tramite il percorso delle impostazioni di amministrazione descritto più avanti in questo articolo. Due filtri dinamici ti consentono di gestire tu stesso un salvataggio o un pulsante:

  • stwlite_group_settings_{action} è un filtro che riceve i valori salvati come $options quando il payload delle impostazioni contiene una chiave chiamata action. Restituisce l'array di risposta con status e message.
  • stwlite_trigger_{action} è un filtro che riceve i parametri della richiesta come $params quando viene chiamata la route dell'azione. Restituisce un array con status e message, e un URL redirect opzionale.

Traduzioni frontend

HookTipoArgomentiCosa fa
stwlite_frontend_translationsFiltro$i18nFiltra la mappa delle chiavi di traduzione alle stringhe tradotte che il plugin passa all'app della wishlist. Restituisce l'array. Un valore di ritorno non array viene ignorato.

La pagina della wishlist carica queste stringhe due volte per richiesta, quindi la tua callback dovrebbe unire in una mappa ed evitare lavori pesanti. Questo esempio cambia una stringa. Usa una chiave che esiste già nell'array.

add_filter( 'stwlite_frontend_translations', function ( $i18n ) {
    $i18n['just_now'] = __( 'a moment ago', 'my-plugin' );

    return $i18n;
} );

Dati di tracciamento dell'utilizzo

Quando un negozio ha consentito il tracciamento dell'utilizzo, il plugin invia un check-in periodico. Questi filtri consentono a un plugin complementare di aggiungere a tali dati. I valori devono essere scalari e non devono contenere credenziali o dati personali.

HookTipoArgomentiCosa fa
stwlite_usage_checkin_dataFiltro$dataFiltra l'intero payload del check-in.
stwlite_usage_settingsFiltro$settingsFiltra le coppie nome e valore delle impostazioni nel payload.
stwlite_usage_effectivenessFiltro$data, $start, $endFiltra le metriche settimanali di efficacia. $start e $end sono date UTC nel formato Y-m-d H:i:s.

L'impostazione "Tracciamento utilizzo" nella scheda Generale controlla il consenso. Se un negozio la imposta su No, il plugin non segnala, qualunque cosa restituiscano i tuoi filtri.

API REST

Tutte le route utilizzano lo spazio dei nomi saveto-wishlist/v1, quindi il percorso completo è https://your-site.com/wp-json/saveto-wishlist/v1/ seguito dal percorso nelle tabelle. Seguono la normale autenticazione REST di WordPress. Il codice del browser invia l'header X-WP-Nonce per un utente connesso, e altri client possono utilizzare una password applicativa con autenticazione HTTP Basic. Una richiesta rifiutata restituisce l'errore rest_forbidden_context con stato 401 per un chiamante disconnesso o 403 per uno connesso.

Route cliente

Queste route alimentano il pulsante della wishlist e la pagina della wishlist.

Metodo e percorsoChi può chiamarloCosa fa
POST /frontend/endpointsUtenti connessi. Gli ospiti vengono rifiutati a meno che un filtro di autorizzazione non li consenta.Esegue un'azione della wishlist scelta dal parametro action. Vedi la tabella delle azioni di seguito.
GET /frontend/endpoints/wishlistsUguale a sopra.Restituisce data, total e currentPage per le wishlist. I clienti vedono le proprie wishlist. Passando is_public=true elenca le wishlist pubbliche di altri clienti.
GET /frontend/endpoints/wishlist-itemsUtenti connessi. Un ospite può leggere solo una wishlist pubblica denominata da collection_id.Restituisce gli articoli della wishlist nel parametro collection_id richiesto. Il chiamante deve anche essere autorizzato a visualizzare quella wishlist, altrimenti il percorso restituisce un errore 401 o 403.
POST /frontend/endpoints/guest-wishlist-productsSolo per ospiti. Un utente connesso riceve un errore.Accetta un array products di oggetti con productId, quantity, priority e addedAt. Restituisce i dati del prodotto corrispondente per una wishlist memorizzata nel browser.

Il percorso POST /frontend/endpoints risponde sempre con HTTP 200 con un campo status, quindi controlla status nel corpo. Un chiamante che non possiede la wishlist riceve status impostato su error. Solo gli utenti con la capacità manage_options possono scrivere sulla wishlist di un altro utente.

Valore actionParametri che leggeHook che viene eseguito per primo
add_wishlistname, description, status, is_default, is_public, url_code, emails, user_ids, allowed_roles, allowed_edit_emailsstwlite_before_api_save_collection_add_wishlist con $data
update_wishlistid più qualsiasi campo da add_wishlist. Vengono aggiornati solo i campi che invii.stwlite_before_api_save_collection_update_wishlist con $data
remove_wishlistidsNessuno
add_wishlist_itemcollection_id, product_id, variation_id, quantity, priority, notesstwlite_before_api_save_collection_item_add_wishlist_item con $data
update_wishlist_itemid più i campi da add_wishlist_itemstwlite_before_api_save_collection_item_update_wishlist_item con $data
move_wishlist_itemid, collection_idstwlite_before_api_save_collection_item_move_wishlist_item con $data
remove_wishlist_itemcollection_id, product_id, variation_idstwlite_after_product_removed_from_wishlist viene eseguito dopo la rimozione con $product_id, $collection_id, $variation_ids
update_wishlist_item_positionlisteNessuno

Questa richiesta elenca le wishlist dell'account proprietario della password dell'applicazione:

curl -u "username:application-password" \
  "https://your-site.com/wp-json/saveto-wishlist/v1/frontend/endpoints/wishlists"

Questi filtri modificano chi supera i controlli del percorso del cliente e cosa restituisce il percorso dell'ospite:

HookTipoArgomentiCosa fa
stwlite_api_user_permissions_checkFiltro$response, $requestRisultato finale per POST /frontend/endpoints e GET /frontend/endpoints/wishlists. Restituisce true o un WP_Error.
stwlite_api_user_force_accessFiltro$force (predefinito false), $requestRestituisce true per consentire a un chiamante non registrato di superare questi due percorsi.
stwlite_check_any_user_has_permissionFiltro$response, $requestRisultato finale per il percorso wishlist-items.
stwlite_check_any_user_has_permission_validationFiltro$valid (predefinito false), $data, $requestRestituisce true per consentire a un chiamante non registrato di leggere una wishlist che non è pubblica.
stwlite_check_guest_permissionFiltro$response, $requestRisultato finale per il percorso guest-wishlist-products.
stwlite_guest_wishlist_products_dataFiltro$products, $product_dataFiltra l'elenco dei prodotti restituito dal percorso dell'ospite.

Percorsi Admin

I percorsi seguenti servono le schermate di amministrazione del plugin e potrebbero cambiare tra le release. Preferisci gli hook sopra per le integrazioni. Ogni percorso di amministrazione richiede la capacità manage_options. Usa il filtro stwlite_api_admin_permissions_check ($response, $request) per modificarlo e fai attenzione quando ampli l'accesso, poiché questi percorsi possono scrivere opzioni del sito ed eliminare wishlist.

Metodo e percorsoCosa fa
POST /admin/wishlistsCrea o aggiorna una wishlist dal corpo della richiesta. Restituisce un errore 422 se aggiungi articoli non ancora salvati a una wishlist il cui stato è draft.
DELETE /admin/wishlistsElimina le wishlist nel parametro ids. La risposta elenca count e skipped. Una wishlist viene saltata quando è l'ultima wishlist del suo proprietario.
GET /admin/wishlists/collectionsRestituisce una pagina di wishlist con data, total e currentPage.
GET /admin/wishlists/collection/{id}Restituisce una wishlist tramite ID numerico.
GET /admin/wishlists/itemsPercorso segnaposto che restituisce un elenco data vuoto.
POST /admin/settings/saveSalva le impostazioni. Il corpo è un elenco di oggetti con key e value. Un valore di true o false viene archiviato come yes o no.
POST /admin/settings/actionEsegue il filtro stwlite_trigger_{action} per il parametro action.
GET /admin/importer/sourcesElenca i plugin della wishlist rilevati dal sito dall'importatore.
GET /admin/importer/preview/{source}Restituisce il conteggio degli elementi e un'anteprima per una sorgente.
POST /admin/importer/importAvvia un'importazione. Richiede source e un oggetto opzionale options (merge_existing, preserve_default, preserve_privacy, batch_number, job_id). Un utente può avviare un'importazione ogni 300 secondi.
GET /admin/importer/import/{job_id}Restituisce lo stato di avanzamento di un'attività di importazione.
DELETE /admin/importer/import/{job_id}Annulla un'attività di importazione.

Le sorgenti di importazione integrate sono yith, ti, moreconvert e wpc. Utilizza il filtro stwlite_available_importers, che riceve e restituisce un array che mappa un slug di sorgente a un nome di classe di importatore, per registrarne un'altra.

Domande frequenti

Perché il mio filtro di posizionamento non fa nulla?

Il plugin legge il posizionamento quando si avvia sull'hook setup_theme con priorità 100. Aggiungi il filtro da un file del plugin. Il file functions.php di un tema viene caricato dopo quel punto.

Perché il mio markup del pulsante perde un tag o un attributo?

Il plugin elabora il markup del pulsante tramite wp_kses(). Aggiungi il tag o l'attributo all'elenco consentito con il filtro stwlite_allowed_button_html.

Perché la route di salvataggio restituisce HTTP 200 per una richiesta rifiutata?

POST /frontend/endpoints risponde sempre con HTTP 200 e inserisce il risultato nel campo status del corpo. Leggi status e message invece del codice HTTP.

Cosa fare dopo

Serve aiuto?

Se hai una domanda o riscontri problemi, siamo qui per aiutarti.

Questo articolo è stato utile?

Articoli Correlati

Serve Supporto?

Non riesci a trovare la risposta che cerchi?
Contatta il Supporto
Completa il Tuo Acquisto