Outlet WP: differenze tra le versioni
| (8 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 247: | Riga 247: | ||
https://www.cloudways.com/blog/how-to-remove-hide-or-disable-add-to-cart-button-in-woocommerce/#remove-button-from-specific-products | https://www.cloudways.com/blog/how-to-remove-hide-or-disable-add-to-cart-button-in-woocommerce/#remove-button-from-specific-products | ||
== Bug Incredibili, Stranezze, | == ⚠️ Bug Incredibili, Stranezze, Blasfemie⚠️ == | ||
=== Sku già in fase di elaborazione === | === Sku già in fase di elaborazione === | ||
Moderando un'occasione abbiamo ricevuto il messaggio | Moderando un'occasione abbiamo ricevuto il messaggio | ||
* ''Lo SKU (119392) che stai tentando di inserire è già in fase di elaborazione'' | * ''"Lo SKU (119392) che stai tentando di inserire è già in fase di elaborazione"'' | ||
incredibilmente abbiamo trovato un record corrispondente nella tabella <code>wp_wc_product_meta_lookup</code> che aveva un ''product_id'' inesistente nella tabella dei post.< | incredibilmente abbiamo trovato un record corrispondente nella tabella <code>wp_wc_product_meta_lookup</code> che aveva un ''product_id'' inesistente nella tabella dei post. | ||
L'abbiamo eliminato e tutto è tornato a funzionare. | <syntaxhighlight lang="sql"> | ||
SELECT * FROM wp_designbestoutlet_com.wp_wc_product_meta_lookup where sku = 119392; | |||
</syntaxhighlight> | |||
L'abbiamo eliminato e tutto è tornato a funzionare.<br/> | |||
=== Query di pulizia del database === | |||
Trovato questo tizio che suggerisce delle query di pulizia.<br/> | |||
Non verificato<br/> | |||
https://gist.github.com/leetdev/02dbf73f6a668e051b237dccf27e440e | |||
=== Funzione wc_get_product_id_by_sku() non affidabile === | |||
Siamo a ottobre 2024 e la funzione <code>wc_get_product_id_by_sku()</code> ha iniziato a restituire sempre <code>0</code> con qualsiasi parametro.<br/> | |||
In questo modo la sincronizzazione falliva sempre il match con un prodotto già esistente e ogni volta ne creava uno nuovo. | |||
Abbiamo trovato un modo alternativo per trovare un prodotto a partire da uno sku | |||
<syntaxhighlight lang="php"> | |||
/** | |||
* Dato uno SKU (productID di Designbest), restituisce il corrispondente ProductID di Wordpress | |||
* | |||
* @param string $sku | |||
* @return int|bool Il productID di Wordpress, false se non esiste | |||
*/ | |||
public static function getWpProductIdBySku($sku) { | |||
$query = new \WC_Product_Query( [ | |||
'limit' => 1, | |||
'sku' => $sku, | |||
'return' => 'ids', | |||
'type' => ['simple', 'variable', 'variation'] // Include tutti i tipi di prodotti, anche le varianti | |||
]); | |||
$products = $query->get_products(); | |||
return reset($products); | |||
} | |||
</syntaxhighlight> | |||
Versione attuale delle 09:32, 31 ott 2024
DOKAN Multi-Vendor
[modifica]Pagina ufficiale https://wedevs.com/
Nuova pagina diretta per Dokan https://app.dokan.co/
Per il nostro utilizzo servirebbe acquistare la versione Professional a 190€/anno.
Il pacchetto ha incluso la gestione PIVA sia del Vendor che del Cliente (modulo EU Compliance Fields).
Se non risulta attivo, attivarlo dal sottomenu di Dokan->Modules->EU Compliance.
Registrazione Cliente/Vendor
[modifica]Nella pagina di registrazione utente, c'è la possibilità di scelta tra CLIENTE e VENDOR.
Per disabilitare la possibilità di registrarsi manualmente come Vendor ho dovuto modificare il tema figlio nascondendolo da css:
/*NASCONDO IL BOX DI REGISTRAZIONE COME CLIENTE O VENDITORE*/
.form-row.form-group.user-role.vendor-customer-registration{
display:none;
}
Stranezza:
Dopo un aggiornamento di WooCommerce è sparita la possibilità di registrarsi.
Ho notato che non era più flaggata l'opzione Permetti ai clienti di creare un account nella pagina "Il mio account" in WooCommerce --> Impostazioni --> Account & Privacy --> Creazione dell'account
Dominio di Test
[modifica]https://dokan.dbdemo47.com/
utente: admin
password: W3bm0b1l!
IMPORTANTE
Nell'ambiente di test, nel file wp-config.php inserire la costante
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_ENVIRONMENT_TYPE', 'staging' ); // mettere 'local' per sviluppo locale
In produzione rimuovere WP_ENVIRONMENT_TYPE e rimuovere WP_DEBUG e figli.
Server di Produzione
[modifica]È necessario che ci siano le seguenti route nel file di loopback /etc/hosts
192.168.250.10 ARIEL ws.designbest.com img.designbest.com
192.168.250.20 JASMINE ws.dbdemo47.com test.wm4pr.com
E installare Memcached - Gestione della cache
Nel Virtual Host inserire la direttiva
TimeOut 900
Plugin
[modifica]Dopo la pulizia, scaricare
- Child Theme Configurator
- WooCommerce
- Dokan
Attivare tutto.
Scaricare Dokan PRO dal sito webdevs.com e installarlo e attivarlo.
Inserire il License Code. La licenza attiva in automatico il modulo obbligatorio EU Compliance Fields.
Scaricare il tema Sway da themeforest e aggiungerlo tramite Aspetto->Temi
.
Installare nell'ordine
- Redux (che in Plugin si chiamerà Template Library and Redux Framework)
- KeyDesign Addon (passare dalla pagina Install Required Plugin perché il click normale è buggato)
- WPBakery Page Builder e attivarlo con la licenza (qui dettagli)
- EnvatoMarket (che manda sul sito e fa scaricare lo zip)
- Inserire il tema Sway-child e selezionarlo come attivo (si trova nello zippone completo che si carica dal sito)
Installare il plugin Designbest Outlet caricando lo zip.
Installare W3 Total Cache
AI Mojo - GPT-3
[modifica]Una scelta controversa, quella di applicare al sito un plugin che genera testi casuali affidandosi ad una intelligenza artificiale.
Nella speranza che Google non ci banni (subito) dai motori di ricerca per truffa, noi lo acquistiamo e paghiamo perfino la licenza.
Per configurarlo è necessario definire la sua API Key nel file wp-config.php
define( 'WPAIMOJO_OPENAI_API_KEY', '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' );
REST API DOKAN
[modifica]Link alla documentazione per le REST API https://wedevsofficial.github.io/dokan/
Application Passwords
[modifica]Wordpress fino al 2020 non era pronto alle REST API e non permetteva che vi fossero chiamate dall'esterno del sito (se non con l'uso di plugin).
Dal 2020 ha introdotto le Application Passwords.
In pratica, tramite la dashboard, è possibile generare un numero qualsiasi di password per un utente e utilizzare queste con una normale chiamata in Basic Auth.
È più sicuro perché non passa in chiaro la vera password ed è gestito nativamente da Wordpress.
Tramite API è anche possibile generare una Application Password , prendere il valore della nuova password generata, revocare la password.
Vendors
[modifica]Di default un nuovo Vendor non può pubblicare direttamente i suoi prodotti, ma deve attendere una revisione.
Possiamo cambiare questo comportamento nel menu di gestione Utenti alla voce Publishing -> Publish product directly.
Il Vendor una volta effettuato il login, per vedere la sua dashboard, dovrà andare all'indirizzo /dashboard
Creare un utente Vendor
[modifica]Prima dobbiamo registrare i seguenti usermeta nel file functions.php del tema figlio:
register_meta( 'user', 'dokan_publishing', array( 'type'=>'string', 'description' => 'Pubblica i prodotti direttamente', 'single' => true, 'show_in_rest' => true) );
register_meta( 'user', 'dokan_enable_selling', array( 'type'=>'string', 'description' => 'Negozio abilitato alla vendita di prodotti', 'single' => true, 'show_in_rest' => true) );
register_meta( 'user', 'dokan_feature_seller', array( 'type'=>'string', 'description' => 'Negozio in evidenza', 'single' => true, 'show_in_rest' => true) );
register_meta( 'user', 'dokan_admin_percentage', array( 'type'=>'string', 'description' => 'Percentuale commissione', 'single' => true, 'show_in_rest' => true) );
register_meta( 'user', 'dokan_admin_percentage_type', array( 'type'=>'string', 'description' => 'Tipo commissione', 'single' => true, 'show_in_rest' => true) );
POST -> /wp-json/wp/v2/users
{
"username": "slm001",
"email": "salumi@gnam.prova",
"password": "650",
"roles": "seller",
"meta":{
"dokan_publishing": "no",
"dokan_enable_selling": "yes",
"dokan_feature_seller": "no",
"dokan_admin_percentage":"",
"dokan_admin_percentage_type":"flat"
}
}
dokan_publishing --> Abilita la pubblicazione di prodotti direttamente senza moderazione.
dokan_enable_selling --> Abilita il Negozio/Vendor alla vendita di prodotti.
dokan_feature_seller --> Negozio in Evidenza.
dokan_admin_percentage e dokan_admin_percentage_type --> Si riferiscono alla commisione da applicare al Vendor (vengono ereditate dalle impostazioni generali se non le mettiamo).
Ora che l'utente/Vendor è stato creato possiamo aggiungergli ulteriori informazioni tramite un update:
PUT-> /wp-json/dokan/v1/settings
Le credenziali saranno quelle del Vendor appena inserito.
{
"store_name" : "Prova 018 Arredamenti",
"phone": "01119211500",
"banner": false,
"vat_number": "",
"address": {
"street_1": "Via Fasulla 123",
"street_2": "",
"city": "Torino",
"zip": "10100",
"country": "IT",
"state": "TO"
},
"social":{
"fb":"https://facebook_social_link.com",
"gplus":false,
"twitter": false,
"pinterest": false,
"linkedin": false,
"youtube": false,
"instagram": "https://instagram_social_link.com",
"flickr": false
}
}
Products
[modifica]Per aggiungere un prodotto ad un Vendor, dobbiamo chiamare la seguente API autenticati con i dati del vendor (se mi autentico con utente piripicchio il prodotto sarà dello store piripicchio).
POST -> /wp-json/dokan/v1/products/
{
"name": "Sedia chiappona",
"type": "simple",
"price": "350",
"regular_price": "350",
"sale_price": "299",
"manage_stock": true,
"stock_quantity": 1,
"description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.",
"short_description": "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.",
"categories": [
{
"id": 67
}
],
"images": [
{
"src": "https://litb-cgis.rightinthebox.com/images/640x640/202203/bps/product/inc/uwdagr1647929641933.jpg",
"position": 0
},
{
"src": "https://litb-cgis.rightinthebox.com/images/640x640/202203/bps/product/inc/stspzs1647929642243.jpg",
"position": 1
}
]
}
Traduzioni
[modifica]Per creare le traduzioni è necessario usare poedit.
L' idea è quella di utilizzare la struttura di localizzazioni del plugin che si trova nel file
/wp-content/plugins/dokan/languages/dokan-lite.pot
che espone solo la struttura delle traduzioni nel "linguaggio neutro".
NB
Ricordarsi, in caso di modifica, di riassegnare i permessi 775 e l'owner www-data:www-data
altrimenti durante gli aggiornamenti di Dokan segnala errore.
Una volta aperto con poedit creare una nuova traduzione per la lingua italiana, compilare tutti i campi e salvare per ritrovarsi 2 file
it_IT.poleggibile da umani (con poedit)it_IT.moleggibile dalla macchina (WP)
Piazzare questi due file nella cartella /wp-content/languages/plugins/ con i seguenti nomi:
/wp-content/languages/plugins/dokan-lite-it_IT.po /wp-content/languages/plugins/dokan-lite-it_IT.mo
Traduzioni del Tema
[modifica]Prelevare dal tema padre ad esempio Sway il file .pot in wp-content/themes/sway/languages/sway.pot
Copiare e rinominare il file in it_IT.po
In POEdit creare nuovo file di traduzioni partendo da quest'ultimo it_IT.po
Selezionare tutto e copiare il testo sorgente nella traduzione, successivamente modificare il testo desiderato
Salvare e generare il file .mo da ca caricare in wp-content/themes/sway-child/languages/it_IT.mo
Godersi le traduzioni.
Traduzioni parziali della community
[modifica]Esistono delle traduzioni parziali (al momento italiano è al 55%) sul sito
https://translate.wordpress.org/projects/wp-plugins/dokan-lite
pronte all'uso.
Basta scaricare i file .po e .mo e piazzarli in /wp-content/languages/plugins/.
Per modificare le traduzioni aprire il file .po con poedit e al salvataggio si genera anche il .mo. Sostituire sul server.
Scheda Prodotto/Occasione
[modifica]Necessità di nascondere il pulsante di acquisto solo per alcuni prodotti outlet, ma non ecommerce.
⚠️ Bug Incredibili, Stranezze, Blasfemie⚠️
[modifica]Sku già in fase di elaborazione
[modifica]Moderando un'occasione abbiamo ricevuto il messaggio
- "Lo SKU (119392) che stai tentando di inserire è già in fase di elaborazione"
incredibilmente abbiamo trovato un record corrispondente nella tabella wp_wc_product_meta_lookup che aveva un product_id inesistente nella tabella dei post.
SELECT * FROM wp_designbestoutlet_com.wp_wc_product_meta_lookup where sku = 119392;
L'abbiamo eliminato e tutto è tornato a funzionare.
Query di pulizia del database
[modifica]Trovato questo tizio che suggerisce delle query di pulizia.
Non verificato
https://gist.github.com/leetdev/02dbf73f6a668e051b237dccf27e440e
Funzione wc_get_product_id_by_sku() non affidabile
[modifica]Siamo a ottobre 2024 e la funzione wc_get_product_id_by_sku() ha iniziato a restituire sempre 0 con qualsiasi parametro.
In questo modo la sincronizzazione falliva sempre il match con un prodotto già esistente e ogni volta ne creava uno nuovo.
Abbiamo trovato un modo alternativo per trovare un prodotto a partire da uno sku
/**
* Dato uno SKU (productID di Designbest), restituisce il corrispondente ProductID di Wordpress
*
* @param string $sku
* @return int|bool Il productID di Wordpress, false se non esiste
*/
public static function getWpProductIdBySku($sku) {
$query = new \WC_Product_Query( [
'limit' => 1,
'sku' => $sku,
'return' => 'ids',
'type' => ['simple', 'variable', 'variation'] // Include tutti i tipi di prodotti, anche le varianti
]);
$products = $query->get_products();
return reset($products);
}