Slide 1

Slide 1 text

April 2022, WordCamp Greece Scaling WooCommerce

Slide 2

Slide 2 text

Εισαγωγή Τι εννοούμε με το Scaling WooCommerce; Ποιο είναι το πρόβλημα που καλούμαστε να λύσουμε;

Slide 3

Slide 3 text

Προηγούμενες σχετικές ομιλίες (links από τις ομιλίες στις εικόνες)

Slide 4

Slide 4 text

Ας αναλύσουμε το παράδειγμά μας…

Slide 5

Slide 5 text

Οι προμηθευτές μας δίνουν τα εξής στοιχεία: ● 2 προμηθευτές μας δίνουν XML που έχουν όλα τα προϊόντα ● Ένας μας δίνει ένα XML με τα βασικά στοιχεία ενός προϊόντος και δύο έξτρα XML, ένα για τα χαρακτηριστικά ( attributes) και ένα για τις περιγραφές ● Και ένας προμηθευτής δουλεύει με API όπου φέρνουν τα προϊόντα.

Slide 6

Slide 6 text

XML αρχείο ● Μοιάζει με html αρχείο ● Χρησιμοποιείται για τη μεταφορά δεδομένων μεταξύ δύο μερών ● Ανοίγει με οποιοδήποτε πρόγραμμα κειμένου ή browser ● Αποτελείται από nodes Extensible Markup Language

Slide 7

Slide 7 text

API Automatic Programming Interface ● Μια εφαρμογή μπορεί να επικοινωνεί με άλλες ● Προβολή δεδομένων, επεξεργασία ή καταχώριση νέων ● Συνήθως δέχεται και απαντάει με JSON

Slide 8

Slide 8 text

JSON ● Μία ελαφριά μορφή για την αποθήκευση και τη μεταφορά δεδομένων ● Χρησιμοποιείται για αποστολή δεδομένων από server σε μία ιστοσελίδα ● { “name”: “wordpress.org”, “url”: “https://wordpress.org/news/wp-json/wp/v2/posts?per_page=3”, “posts”: [] } JavaScript Object Notation

Slide 9

Slide 9 text

Μέθοδοι Εισαγωγής (Import) Προϊόντων

Slide 10

Slide 10 text

1) php import με την κλάση WC_Product ● Η πιο τεχνική επιλογή ● Ταχύτητα στο συγχρονισμό ● Με get & set συναρτήσεις μπορείς να θέσεις και να πάρεις τις πληροφορίες set_name("Product Title"); $wc_product->set_status("publish"); $wc_product->set_catalog_visibility("visible"); $wc_product->set_description("Product Desc"); $wc_product->set_sku("Product Sku"); $wc_product->set_price("Product price"); $wc_product->set_stock_status("instock"); ?>

Slide 11

Slide 11 text

2) WooCommerce API ● Μπορούμε να διαβάσουμε ή να γράψουμε σε ένα e-shop χωρίς να γνωρίζουμε τον κώδικα ● Πολύ εύκολο στη χρήση για προγραμματιστές ● Δεν χρειάζεται καν να δημιουργήσεις plugin για το WordPress Χρήσιμα Links https://woocommerce.com/document/woocommerce-rest-api/ https://woocommerce.github.io/woocommerce-rest-api-docs/

Slide 12

Slide 12 text

3) WP All Import (Προτεινόμενη επιλογή) ● Συμφέρει από άποψη κόστους, με lifetime value για unlimited sites ● Εύκολη μετατροπή των δεδομένων από οποιοδήποτε αρχείο ● Μπορεί να χρησιμοποιηθεί κυρίως από developers ● Τemplates για παρόμοιες εργασίες ● Αυτοματισμός με έτοιμη λειτουργία για crons ● Logging (καταγραφή ιστορικού)

Slide 13

Slide 13 text

WP All Import Νέο Import Επιλογή που διαλέγουμε για να δημιουργήσουμε συγχρονισμό Γράφουμε το URL XML εδώ Για νέα προϊόντα επιλέγουμε εδώ

Slide 14

Slide 14 text

WP All Import Νέο Import (2) Σύνολο προϊόντων Οπτικοποίηση των εγγραφών του XML Διαθέσιμα nodes του XML

Slide 15

Slide 15 text

WP All Import Νέο Import (3) Επιλογή για ενημέρωση προϊόντων Επιλογή για διαγραφή προϊόντων Επιλογή για δημιουργία νέων προϊόντων Επιλογή για να ενημερώνει μόνο τα προϊόντα που έχουν αλλάξει Επιλέγουμε ποια στοιχεία θέλουμε να ενημερωθούν Επιλέγοντας από εδώ, ενημερώνουμε μόνο την τιμή και το custom πεδίο της διαθεσιμότητας

Slide 16

Slide 16 text

Επιλογές για τον συγχρονισμό των προϊόντων

Slide 17

Slide 17 text

Βασικός στόχος: Να πάρουμε τις πληροφορίες από τον προμηθευτή και να τις εισάγουμε στο e-shop. ● Όπως και να μας έρθει η πληροφορία, μπορούμε να τη μετατρέψουμε στη μορφή που μας βολεύει για τον συγχρονισμό. ● Από κάθε προμηθευτή, θα χρειαστούμε να κατανοήσουμε τις πληροφορίες που μας παρέχει για να τις χρησιμοποιήσουμε σωστά.

Slide 18

Slide 18 text

Πληροφορίες προϊόντων: ● Τίτλος προϊόντος ● SKU/ΕΑΝ/Barcode ● Περιγραφή ● Τιμές (χονδρική, προτεινόμενη λιανικής, τιμή μετά έκπτωσης) ● Φωτογραφίες ● Βάρος & διαστάσεις ● Κατηγορία ● Χαρακτηριστικά (attributes) ως ιδιότητες ● Κατασκευαστής ● Μεταφορικά & κλάσεις μεταφορικών ● Διαθεσιμότητα ή stock

Slide 19

Slide 19 text

Τίτλος, Περιγραφή, Βάρος, Διαστάσεις Συνήθως τα περνάμε ως έχουν στα αντίστοιχα πεδία του WooCommerce SKU/ΕΑΝ/Barcode Στο SKU του προϊόντος ή σε custom πεδίο αν έχει το e-shop δική του κωδικοποίηση Φωτογραφίες Συνήθως οι φωτογραφίες έχουν μια σειρά, οπότε χρησιμοποιούμε την 1η για βασική φωτογραφία και τις υπόλοιπες τις προσθέτουμε στο gallery των εικόνων.

Slide 20

Slide 20 text

Τιμές (χονδρική, προτεινόμενη λιανικής, τιμή μετά έκπτωσης) Επιλογές που μπορεί να έχουμε για να χρησιμοποιήσουμε: ➔ Προτεινόμενη τιμή λιανικής ➔ Υπολογισμός από τιμή χονδρικής με γενικό κανόνα (π.χ. *2) ➔ Διαφορετικό margin (περιθώριο κέρδους) ανά κατηγορία ◆ Τιμές margin σε php script χωρίς δυνατότητα αλλαγής από διαχειριστές αλλά πιο γρήγορο ◆ Τιμές margin σε custom πεδίο σε κάθε κατηγορία του e-shop ώστε να μπορεί να το αλλάζουν οι διαχειριστές αλλά πιο μεγάλο “κόστος” για τη βάση δεδομένων και τον server μας

Slide 21

Slide 21 text

Κατηγορία Εδώ πρέπει να γίνει mapping(αντιστοίχιση) των κατηγοριών των προμηθευτών με το e-shop Παράδειγμα: Κατηγορίες προμηθευτή Κατηγορίες e-shop Τραπέζια Είδη Τραπεζαρίας Τραπεζαρίες Καρέκλες Οι κατηγορίες του e-shop πρέπει να προκύψουν μετά από μελέτη των κατηγοριών των προμηθευτών για καλύτερη αντιστοίχιση

Slide 22

Slide 22 text

Κατηγορία Παράδειγμα μία κατηγορία προμηθευτή σε πολλές δικές μας. Σε αυτήν την περίπτωση δεν μπορεί να γίνει η αντιστοίχιση. Πώς θα το λύσουμε; Κατηγορίες προμηθευτή Κατηγορίες e-shop Τραπέζια Τραπεζαρίες Καρέκλες Είδη Τραπεζαρίας Εδώ περνάμε την τελική κατηγορία στο WP All Import όπως το έχουμε φτιάξει

Slide 23

Slide 23 text

Χαρακτηριστικά/ιδιότητες (ομοίως και για τους κατασκευαστές) Βήματα για αντιστοίχιση, όμοια με κατηγορίες: 1. Ελέγχουμε όλα τα χαρακτηριστικά των προμηθευτών 2. Επιλέγουμε ποια από αυτά θα χρησιμοποιήσουμε στο e-shop 3. Αντιστοιχίζουμε τα όμοια από διαφορετικούς προμηθευτές 4. Επιλέγουμε ποια από αυτά θα χρησιμοποιηθούν για φιλτράρισμα και indexing Σημαντική επιλογή για το αν θα γίνει indexing μία νέα ιδιότητα

Slide 24

Slide 24 text

Χαρακτηριστικά/ιδιότητες (ομοίως και για τους κατασκευαστές) Γιατί να μην τα επιλέξουμε όμως όλα; ● Ένα custom attribute έχει μικρότερο κόστος στη βάση κατά την αποθήκευση ● Για σκοπούς SEO, δεν πρέπει να δημιουργούμε σελίδες που δεν υπάρχει περίπτωση να στοχεύσουμε ως keyword στη Google π.χ. δεν πρόκειται να στοχεύσουμε ποτέ το keyword “Γραφεία μήκους 110-120 εκατοστά” Πολύ σημαντικό να γίνει αντιστοίχιση και των τιμών των χαρακτηριστικών για καλύτερο φιλτράρισμα & SEO perfomance Εμφάνιση custom attribute στην επεξεργασία προϊόντος

Slide 25

Slide 25 text

Μεταφορικά & κλάσεις μεταφορικών ● Συνήθως βολεύει να ομαδοποιούμε προϊόντα (π.χ. μικρά δέματα, μικρά έπιπλα, μεγάλα έπιπλα) ● Κάθε κλάση μεταφορικών έτσι έχει δικούς της κανόνες μεταφορικών και δικές της χρεώσεις. Εδώ περνάμε την κλάση μεταφορικών μέσα από ένα php function στο WP All Import

Slide 26

Slide 26 text

Διαθεσιμότητα & stock ● Διαφορετικό πεδίο από το instock, outofstock του WooCommerce ● Συνήθως κατασκευάζουμε ένα custom πεδίο για τις διαθεσιμότητες ● Ουσιαστικά πρόκειται για ημέρες αναμενόμενης παράδοσης Επιλογές σχετικές με marketplaces ● Διαθέσιμο στο μαγαζί, Παράδοση σε 1-3 ημέρες ● Παράδοση σε 1-3 ημέρες ● Παράδοση σε 4-10 ημέρες ● Παράδοση μέχρι 30 ημέρες

Slide 27

Slide 27 text

Διαθεσιμότητα & stock Παράδειγμα καταχώρησης με 4 διαφορετικούς προμηθευτές στην επεξεργασία ενός προϊόντος

Slide 28

Slide 28 text

Διαθεσιμότητα & stock Η αντίστοιχη εμφάνιση στην σελίδα προϊόντος που βλέπει ο πελάτης στο front-end του e-shop

Slide 29

Slide 29 text

Διαθεσιμότητα & stock Αντίστοιχα η επιλογή που στέλνουμε μέσω του XML που παράγουμε για το Marketplace για τον συγχρονισμό του προϊόντος

Slide 30

Slide 30 text

Για πιο εξειδικευμένες ανάγκες

Slide 31

Slide 31 text

Για πιο εξειδικευμένες ανάγκες 1. Η επιλογή του να μην συγχρονίζεις ένα προϊόν 2. Η επιλογή του προμηθευτή να μας δίνει σε πακέτα τα προϊόντα (π.χ. να τα πουλάει σε 2άδες, 4άδες κτλ) 3. Η εισαγωγή πεδίου για να γνωρίζουμε ποιος είναι ο προμηθευτής του κάθε προϊόντος (προσοχή, όχι ο κατασκευαστής)

Slide 32

Slide 32 text

Για πιο εξειδικευμένες ανάγκες 1. Η επιλογή του να μην συγχρονίζεις ένα προϊόν ● Χρήσιμο πεδίο για τη διαχείριση του πραγματικού stock για τα καταστήματα ● Παράδειγμα, παραγγέλνουμε 4 και πουλάμε το 1 και μας μένουν 3 στην αποθήκη ● Ο προμηθευτής μπορεί να αφαιρέσει το προϊόν αλλά το e-shop μπορεί να συνεχίσει να το πουλάει και μάλιστα με διαφορετική τιμολογιακή πολιτική

Slide 33

Slide 33 text

Για πιο εξειδικευμένες ανάγκες 2. Η επιλογή του προμηθευτή να μας δίνει σε πακέτα τα προϊόντα (π.χ. να τα πουλάει σε 2άδες, 4άδες κτλ) μας δίνει δύο επιλογές: ● Να πουλάει το e-shop σε πακέτα με τον αριθμό αυτό (μπορεί π.χ. να είναι καρέκλες σε σετ των 4) ● Να μην επιτρέπει την εισαγωγή προϊόντων που είναι σε πακέτο από κάποιο αριθμό και πάνω (π.χ. από 6 και πάνω)

Slide 34

Slide 34 text

Για πιο εξειδικευμένες ανάγκες 3. Η εισαγωγή πεδίου για να γνωρίζουμε ποιος είναι ο προμηθευτής του κάθε προϊόντος (προσοχή, όχι ο κατασκευαστής): ● Χρήσιμο για να γνωρίζουμε από ποιο import προήλθε το προϊόν ● Εξυπηρετεί για μαζικές ενημερώσεις αν χρειαστεί ώστε να μην αλλάξει ο συγχρονισμός ● Βοηθάει επίσης να φιλτράρουμε διαφορετικά τα προϊόντα και να τα δείξουμε αλλιώς όπου εμείς το θέλουμε. Παράδειγμα: Προμηθευτής 1 - διαθεσιμότητα 1 = Διαθεσιμότητα 4-10 μέρες Προμηθευτής 2 - διαθεσιμότητα 1 = Διαθεσιμότητα 1-3 μέρες

Slide 35

Slide 35 text

Performance Tips Ας μπούμε και λίγο πιο βαθιά τώρα για όσους αντέχουν…

Slide 36

Slide 36 text

Performance Tip No.1 Σύμπτυξη XML και υπολογισμός όλα σε php script πριν το WP All Import ● Mapping κατηγοριών, χαρακτηριστικών κ.ά. ● Υπολογισμός όπου χρειάζεται λειτουργικότητα ● Αφαίρεση nodes που δεν θα χρησιμοποιήσουμε

Slide 37

Slide 37 text

Performance Tip No.2 Συντονισμός πολλαπλών συγχρονισμών ● Θέλουμε να αποφεύγουμε έστω και δύο συγχρονισμοί να τρέχουν παράλληλα ● Τρέχουμε bash script ώστε να ελέγχει πότε τελειώνει ο ένας συγχρονισμός ώστε να ξεκινάει ο επόμενος Αποτέλεσμα: ● Δεν υπάρχει επικάλυψη των συγχρονισμών, άρα δεν βαραίνει ο server ● Δεν υπάρχουν κενά διαστήματα μεταξύ των συγχρονισμών, άρα τελειώνουν πιο γρήγορα οι συγχρονισμοί

Slide 38

Slide 38 text

Performance Tip No.3 Error handling ● Το WP All Import δίνει επιλογή να κάνεις μια ενέργεια όταν τελειώσει ο συγχρονισμός (π.χ. αποστολή email) ● Έχουμε δημιουργήσει υλοποίηση που ελέγχει τους συγχρονισμούς και μας ενημερώνει αν κάτι δεν τρέξει για μια ολόκληρη μέρα

Slide 39

Slide 39 text

April 2022, WordCamp Greece Thank you! Questions? Dimitris Chatzimichailidis dicha.gr