 So when my wife and I were first married, we sort of, we were both, came from the public school system, but we sort of thought, you know, maybe we don't want to try something different. And we like the idea of sort of building our own, running our own, building our own script and living by our own script. And so we decided to homeschool our kids. And since that point, we had three kids and we're homeschooling all three of them. And when I say we, it's the royal we, because really she's doing all the work. She's researching curriculum. She's running the classes. She's taking them to field trips and all this different stuff. And part of that is that she is part of a co-op. And that co-op just consists of a bunch of homeschool moms and dads and families where they get together and have some combined classes. They have field trips. They have a standing Friday play date. And so it's at these Friday play dates that my wife had heard some sort of rumblings that some of the other kids have been playing this game and they loved it. And she thought, well, you know, if they liked it, maybe my kids would too. And so as the proactive mom she is, she put the game on the kids' Christmas list. Bam, they got it this past Christmas. We put it in and we sort of stared at it. And we didn't really know how to play it. And again, being the proactive mom she is, she got on YouTube and she figured out, okay, here's a little series of how to play this game. And we're gonna all figure it out as a family. And so we did and now we all love it. And so some of you might know this game. It's called Minecraft. And so with Minecraft, if you don't know what it is, it's a game that was developed or was launched back in 2011 and it's a sandbox game. So you can go into this world that's randomly generated. You've got all of these things out in front of you to build, to grow, to cultivate. The kids like that you can get two cows together and it makes a baby cow. Whoa, how does that happen? Some hearts fly up and down. So they're just amazed by it. And my wife and I like playing it also because it's just this creative element, this part of, I can build anything that I want to in Minecraft. And if you've never played Minecraft, so there are a couple, there are five different modes that the game comes in. But the two that we like to play in are survival and creative. Now I'm really competitive and I like my games to sort of bite back. And so I like playing it in survival mode. And so survival mode, you're dropped in this world sort of like the Hunger Games if you've ever seen those movies. And you have nothing. You are alone, there's nobody with you. And the first thing you have to do is literally go punch a tree. And that sounds futile and a little bit stupid, but you punch a tree, you get some wood. You take your wood, you make some lumber. You get some lumber, you make a crafting table, you use a crafting table to make everything else in your world. And that's sort of where it grows. And so I dropped in this world, I didn't know what the heck I was doing, but then we learned from the YouTube videos and my seven year old son came up and showed me some pointers. And we finally learned about survival mode. So in survival mode, you start with nothing, you get hungry. So you've got that little bar there that has what it looks like, turkey legs on it. And so those start going down so you gotta replenish it. And you have to figure out how to feed yourself. You have to figure out everything. And there's also a sort of night and day cycle. And when the night comes, and also if you go into a place that's dark, some baddies come out. And these are the little googly guys that come out and try and take your hearts and kill you and it will eventually just take all your stuff. And so you have to watch out for those. And so I like survival mode because there's an antagonist that's fighting me. You know, I have to, you know, I have to bootstrap everything up. I'm a, you know, my business is bootstrapped. You know, I like the idea of this. But my kids, they like creative mode. And I never really got it for a little bit while there. I'm like, why do you want to form a fashion, a bucket so you can go milk a cow? Like this is, this is ridiculous. Why are you doing this? But they'll sit there for hours and play it because it feeds part of their creativity and their interest and their discovery. Creative mode's a lot different than survival mode. You are, instead of landing in this randomly generated world that you have to discover and climb mountains and climb through mines, you have a literal flat surface and you have the entire palette of the game available to you. You have all of the rock elements. You have all of the trees and wood. You have all of the tools, the diamond tools. You have all of the creatures and even then have the googly's. You can spawn a creeper and have it run off. But none of it will hurt you. You're protected. It's a place to explore. It's a place to figure things out. And I was having a problem where I would go down in mine and get all this gold and diamonds and iron and then my inventory would get full and I would tell my kids, how do I get this stuff back home? And my son's like, dad, you build a rail and a mine cart and put a crate in it and it sort of goes for you. And I'm like, how do I do that? And then I asked my wife later, I'm like, how did he figure that out? And she said, he goes and create a mode and just discovers and figures it out. And I thought, well, that's a pretty good idea because in creative mode, you can just sit there and create and you can just build your skills and use all the tools available to you and build really intricate things. And once you get better, you can build even more intricate things and just let that grow. And that's what my kids are feeding into. They don't like being eaten by googly's. Actually, they really, really hated. So whenever dad goes down in mines and then something blows up behind them, they scream and yell and laugh at me. So the beauty of Minecraft lies in its ability to create complex worlds with simple tools. Smart person said that probably. And so you guys are probably sitting there right now thinking this is the first talk of WordCamp. What the heck does it have to do with WooCommerce? And if you've never heard of WooCommerce, WooCommerce is a plugin for free that you can slap onto your WordPress site and immediately you have all of the tools to build an e-commerce site. You have the ability to define products, catalogs, and categories, tag all those products. You can add on a shipping method, a payment gateway. You can do all of this stuff for free with just the base plugin. And then there's a whole myriad of add-on plugins with free and commercial where you can extend that functionality as well. So the beauty of WooCommerce, I'll tell you, is that it lies in the ability to create elegant e-commerce sites with very simple tools. And by the way, WooCommerce was started in 2011, same year that Minecraft was started. So hey, they have that in common. And so first off, an important crafting lesson from Minecraft. Use the right tool for the right job. Any of the woodworkers in the room will tell you the same thing, will sort of nod their head and say, yeah, you're right. So I would go into the world and I'd have my pickaxe and I'd say, my pickaxe is all I need. Come on now. I can kill baddies with it. I can dig dirt. I can mine ore. But the problem is, it's not the right tool for the right job. If I use my pickaxe to cut down wood, it's gonna wear out my pickaxe and it's gonna take me way too long to cut down that wood. I need an axe. I want to hoe stuff to hoe ground to plant seeds. I just can't do that with a pickaxe. It'll tear it up. I need a hoe to do that. You need a sword to kill bad guys. Like the right tool for the right job. So that's gonna be sort of a theme throughout the rest of this talk. Because I don't know if you've ever felt this way. Maybe if you're a freelance developer, designer, or you run an agency, or you have your own site, you felt like this sometimes with your projects. Like you're punching wood. You have this deadline and this design and you're trying to get stuff done. And you're just punching the wood and you're not getting anywhere. Well, you're not using the right tool for the job because these don't do really well with wood. So in this talk, we're sort of gonna outline who uses WooCommerce. So you might be a store owner using WooCommerce to sell your own products that you're creating and you may wanna tweak the site or you may want to tweak your theme or make some additions to it yourself. You might be working for an agency or running an agency that delivers e-commerce site projects to your clients. Or you could be a project manager, we met this morning, project manager, who oversees developers who are developing for WooCommerce. Or you could be a plugin or a theme designer developer making commercial products that you sell to other people. And so for you guys, I ask you, which mode would you prefer to be in? I know that sometimes it feels like we're in survival mode where you just don't have all the right tools available to you, but you have to achieve this objective for your project and get it done. When really you wish you could be in creative mode to take some time back and see what's the right way to do this? What's available to me that I don't have to spend 15 hours building out this certain class when it's already been built out and tested and developed and unit tested for me? In survival mode, you sort of feel like you're being attacked by scope creepers, by client zombies. And we just wanna say today that we're gonna take some time out from these guys and we're gonna spend some time in creative mode. And we're just gonna figure out what is the right tool to use for different when you're using WooCommerce. So what we're gonna cover this morning and make sure I'm good on time is we're gonna cover five things. We're gonna cover the main instance of WooCommerce. This is your golden ticket to a bunch of settings and instance data that you will be wanting to be using in your plugins and in your themes. We're gonna cover some of the main classes, not all of them, but I'm gonna introduce you to some of the main classes of WooCommerce. Helper functions that will make your hife better. We're gonna cover hooks and filters. And finally, we're gonna touch on the WooCommerce API, web hooks and WordPress CLR. So first off, main instance. WooCommerce provides you a static instance to its main class, which is just capital WC. And as an example, you can see very, very poorly. I feel sorry for you guys in the back. This function just provides a global way to access WooCommerce's data. An example of this is just simply WC version. An example used for this is say you wanna use some functionality that was introduced in WooCommerce 2.3. It's available 2.3, 2.4 and then the current 2.5. You wanna check and make sure that it's available on the site that somebody is running your plugin on. Well, you check the version and you find out that they're running 1.6.6. True stories happened to me last week. So you find out that they're sub 2.3, you have to tell the admin, you have to do some sort of notification and shut down Graceful to say, hey, sorry, you're gonna have to update that sucker's four years old. I had to have that conversation. And so that's a really easy way to access some of WooCommerce's data. Another example is that WooCommerce gives the site the ability to set a base location where your store will operate. And this is gonna affect your taxes, tax calculations. This is gonna affect your shipping. This is gonna affect your payment gateways. So this example is from WooCommerce Core where the Simplify payment gateway is checking to see is the base country for this site in this array of countries where Simplify operates. If it's not, the gateway is not available. If it is, then go ahead and set up the world, load the gateway, figure out if we're using subscriptions or not, and then go on with your day. Another example after getting some of the site settings is getting your customers instance data. So their cart, some of the settings that they might have set as they're checking out. In this example, we're pulling from the user session, which has some really, some basic getters and setters for that data. We're pulling their chosen shipping method and their chosen payment method so that we can set that up in the cart and have it available to them when they go to check out. Next is the main classes of WooCommerce. If you download the plugin and install it and you sort of inspect the main file directory, you'll see a bunch of files that start off with class dash wc dash something. And they're all named very well so you can look at the file and know what you're seeing. And we're gonna cover a couple of those today. First one is wc product. And as the name implies, this is where WooCommerce defines all product data. This is also how you're gonna want to interact with products. Throughout all of these examples, I'm sharing these because I read a lot of, or I inspect a lot of plugins and people will ask me, is this plugin gonna work for this state of use that I want to do? And I'll read through the code and I'll see, they're actually doing straight database queries, they're manipulating meta directly and it's not really gonna work in the long term or it's a shaky way to do things. They're pulling order IDs directly from the post IDs. And in the broader WooCommerce world, you want to work through these classes because they're just the proper way of getting data and they allow other plugins to play nicely and, for example, change the order number from the ID to something that the customer wants. It's maybe sequential, maybe has a prefix of AB and then one, one, one, one, all these different ways. So getting used to using these tools when you're developing is sort of the proper way and it's also gonna help you in future versions of WooCommerce to be more future-proof. When WooCommerce updates, these will get updated and you'll be using the right tools. So WC product is a product in WooCommerce. This is the, if you open up again that directory, there is a top-level directory that's called abstract. There's the abstract, therein lies the abstract classes and this is one of them. Product is an abstract class that every product type extends from. So when WooCommerce ships, you will have, I think, four product types. You'll have a simple product, a variable product. Simple product is like this clicker. There's one clicker and you purchase it. Variable products like a t-shirt, you'll have different sizes, different colors and then you'll have a downloadable product and a external product and a grouped product. So those are the product types that extend this base product. But if you read through this code then you'll understand how all of those products work and how you can extend them if you need to create a specific product type for your projects. As an example, this is some code from a data export where a store needed their orders exported over to their fulfillment center. So the fulfillment center has an API. This cron job runs every night, inspects all the orders that were placed that day. And when it gets to the order items, which is part of the WC order class, which we'll get to in just a second, it'll iterate through and use this helper function, WC get product to get the product, the WC product object and do one thing. Where is it? Pull the skew. Because the order contains everything that that export needed except for the skew. So through each run we have to pull the product, get the skew, add it to the collection plus the quantity of the item, the name of the item, the price and then send that along its merry way. So that's one example of getting that product object back and then accessing some of the data from it. Next one is WC order. And it's the one I talked about just a moment ago. You wanna use WC order to handle any of the order data in WooCommerce. There's a helper function to help you get a WC order out and it's the best way to handle individual orders. So here's another example where, if you want to, with that same extract, if I'm wanting to pull all the orders that were placed between February 1st and February 29th, I would do a WordPress query, get all of the orders, IDs, iterate through those IDs. Get the order, again, this is a helper function with just that ID and then construct the extract that I need with all of that order data. You can see that the methods for that object are here. Get the order number, this is a, this is much better than using just a straight order ID because another plugin may have modified that order number. Get the currency that was used for the order, shipping total, discount total and then all of the billing and shipping information for that orders, for that customer's order is in that object as well. You can pull that out, send it on the extract and then Bob is your uncle, you're good. Next one is WC customer. WooCommerce uses a customer object to handle all of the customer-centric data even though the customers are based on WordPress users. So this specific data is gonna be session data. You can use it if you're creating a theme to pre-populate things like the customer's shipping city, pre-populate their address, pre-populate certain things about their cart and you can get all of this through the customer object. Shipping method, shipping method and payment gateway. So if you are tasked with creating a shipping method or modifying a shipping method or payment gateway, you want to read through these two classes and figure out how they're used. All shipping methods and payment gateways for WooCommerce are extended from these two classes and they work just in a fairly particular way. They're gonna have a settings page in the admin area that holds all of the specific settings for those shipping or payment gateways and they're also going to have some methods that you need to override in order to do your calculations for the shipping method or charge cards and collect money for the payment gateway. And we are about covered payment gateway. WC cart and WC checkout. So these aren't abstract classes and these act a little bit differently. These store all of the data for your cart and checkout process, but they also have some calculation methods that will calculate totals for the items in the cart, will add any fees associated with the cart that will add in your shipping totals, add in taxes. These are very good to be able, these are important for you to review and understand what is the cart and checkout process that the customer is going through. Say you have a fee that needs to be added if the customer is ordering from Georgia, it's a Georgia fee, then this is the point where you will find a action for calculate totals to inspect and say, hey, is this customer checking out from Georgia? Yes, then add this fee and then continue them on their way. These are, it's really important to understand this process so if you're ever overriding it so that you work within it instead of working against it. So as an example for the cart and checkout, this is a, this is actually from WooCommerce Core and it's a snippet from the cart page where the global instance is used to get the current cart right here, which is returned as an array of items, keys and items. And then that cart item is used to populate the list of products that go into a cart along with an action URL for the customer to remove items from their cart. And so using that global instance and the cart item data, you can use that in your themes to show items that the customer's purchasing. If you wanted to create your own theme, your own template, you think the cart and the checkout should be designed and organized in a different way. You can do that based on these templates and also this is where you would get that data. Helper functions are helpful. So helper functions are defined in WooCommerce Core functions at PHP and WooCommerce Template functions at PHP. They're not classes. These are the global functions that are available to any site that has WooCommerce installed and they're gonna help you to get that data from WooCommerce that's defined in it. First pair are create order and update order. Create order actually uses update order. It just sends a blank ID. Update order will take an ID and arguments that include the updated word data and save that to the database. These are functions that you're gonna use if you need to programmatically create orders in WooCommerce. Say you're creating a Magento to WooCommerce transition service or a insert cart name here to WooCommerce transition service and you say send me your data and we will populate your WooCommerce store. You'd use this function to create orders and to update them to the site. As an example, and this is actually from the WooCommerce API. The API endpoint for order when it creates a new order will call create based order which calls WC create order with the order arguments and then if that succeeds it returns a WC order object. If it fails, it returns a WP error object and pretty much the API throws up on you if it's an error but if it succeeds then hey you inserted a new order into the database. Second pair is WC get template and WC get template part. The reason I included these is because if you're creating a theme for WooCommerce WooCommerce has its own templating structure. In the WooCommerce plugin there is a templates directory and then under that all of the cart single product page, my account pages, templates are stored. If you are a theme developer and you want to override any of those there's a specific nature to override them. In your theme directory you create a WooCommerce folder and then under that you would mimic the files that are in the WooCommerce plugin. So you'd have a cart folder and then a cart.php file, same thing under WooCommerce cart.php file. When these WooCommerce calls these helper functions and they say okay is this file that I'm trying to get in the current active theme does it exist then yes it's overridden we'll pull that one. Does it not exist fine we'll pull the original one. You want to work within that cycle so that WooCommerce knows about your overrides. You want to use this if you're adding any new templates like say you're creating a new email that's sent to customers who purchase a particular product. You want to pull that email template you can pull it from your current theme instead of pulling it from WooCommerce's theme. They're really useful template functions. The next two are WooCommerce get cart URL and WooCommerce get checkout URL. Again if you're a theme developer and you want to add some front end bells and whistles where a customer can click on an icon and go to their cart or click on an icon and go to their checkout. These are really useful for getting the page endpoint that's defined. WooCommerce has a setting that sets their checkout pages for the cart and the checkout. These functions are going to return the URL to that page. If you're modifying the checkout process say instead of going from cart to checkout where they receive payment and then go on. If you want to say insert a page in between there where you're going to do upsells say hey you've added this item to your cart but did you know that for $10 more you could get this item or if you reach $50 we'll get you free shipping then that page would use those functions to send the customer along their way to the next part. Hooks and filters. So what are they? They're the lifeblood of any WordPress plugin. Currently there are 619 occurrences of due action and 1,149 occurrences of apply filters. I asked Kathy for three days straight to cover each and every one of these in WordCamp Atlanta. She declined politely but if you're working with WooCommerce long enough I would really suggest going through and seeing what data is overridden, what data is available to be modified. It makes it very powerful to extend the plugin by having all of these defined in there. WooCommerce API and web hooks and CLI. I don't know if you guys knew this but WooCommerce since version 2.3, 2.2 has had a REST API. The way you use it is that a user creates keys under their user account and those keys are used to authenticate calls against the REST API and you can do, I think it might be, Patrick is it fully built out now? You can create and delete and update orders, products, coupons, taxes, everything. Super useful. If you're coming to WooCommerce later I'm talking about the API. It's just a great way to integrate your WooCommerce site with external systems. I've integrated it with shipping systems, with ERP systems, with fulfillment systems. It's just so easy to integrate and get data in and out of your e-commerce site. Web hooks. Web hooks allow your site to perform actions triggered by events that happen on your site. So customer registers, go do this web hook. A new order is placed, go do this web hook. An example of this is, oh, these pictures, I'm so sorry. So you create a web hook and this example is when a new order happens. I grabbed a hook from Slack, my Slack room, and say whenever a new order happens, hit this URL with this key, and post and say a new order was created. So I actually have this set up on my site and it goes to my phone so I get dinged every now and then, says new order for $49, boom, have a great day. You can do other things. When a customer is registered, you can hook off of, there's a really long list actually, of things you can hook off of. You can define your own web hooks to hit your own servers, whatever you need notification of. It's just a really useful, quick way to add in external notifications based on an action. WordPress CLI, who's used WordPress CLI before? Love it, my people. For those of you who haven't used it before, WPCLi is a command line interface for your WordPress site. So you install this code to your site, or to your machine, and from the command line, you can do a whole slew of actions to your site. You can really mess it up, or do some really cool stuff. And again, it's like Minecraft, it's like what can I create through this? So WooCommerce recently added some WPCLi endpoints to where you can say WPWCCupon, WPWCCustomer, et cetera. So these are all the core data structures inside of WooCommerce, and I can do actions upon them. So just like normal command line interface stuff, if you type in something like WPWC, it'll say, hey stupid, this is the usage, you did it wrong. If I add coupon, then it'll say, okay, you wanna do something in the coupon, here's your options. You can create, delete, get, list, see all the types, and update it. So this is fantastic. So you can create a cron job that runs a script and hits this, and you can update things, you can check for new orders. Again, you can do some of those exports that I was talking about. I mean, it's literally the entire pallet of Minecraft there in front of you to create your grand system. It's such a useful tool. I'm really glad they put it in there. So things to remember. Access data for WooCommerce through the global instance. Get familiar with all of those core classes so that you know what you have available to you and all the methods and ways to get access to it. Helper functions are your friends. There are so many hooks and filters that it would take me too long to list them all. And the cool, the new kids on the block are the API, the webhooks, and the WPCLI. Totally useful, well worth your time to get used to them and integrate them into your workflow. That's it. So I wanted to leave about 15 minutes for questions. I do a semi-regular web show where people send questions and I answer them about WooCommerce. So if y'all have any questions about anything I've slated up here or about your own WooCommerce sites, projects, side projects, I'd love to hear them because I love answering them. Any questions? It's set every time the page loads. So for that customer, if you look in the session, you'll see that when WooCommerce boots up for that page load, it will set the session and it knows I've got two items, two t-shirts in my cart. I'm a customer, I'm registered on the site and then sort of send information about me. So we're running. Yes. Or you might have some caching set up on the site that is interfering with it. For the recording, the question was, is WooCommerce sessions set on every page load? Yeah, it is. Sessions are my absolute not favorite thing to work with because of that. What are the limitations of WooCommerce? Well, it doesn't slash dice or make Julianne fries. Yet, with the API, you might be able to. Man, limitations. So I do WooCommerce every day and there are people who are working to create and actually talked to the guy last night who does product configurators. So if I want to go and build a t-shirt with my graphic and draw things on it or if I want to build, his what he was talking about was building a piece of jewelry, start to finish. I wouldn't say it's a limitation, just I don't like taking on those projects because there's not a go-to tool for that for product configurators. So for building custom products that are then gonna be ordered and then shipped out to the customer. A lot of people, the first question they ask about WooCommerce is does it scale? And yeah, it scales pretty well if you know what you're doing. A colleague of mine runs a very, very highly trafficked site that does several million dollars a day on certain days when they do promotions and have tons of user sessions. It scales very nicely. I've seen Magento sites, short codes that show in WordPress. So the question's about using Magento for scalability versus WooCommerce. And I'm not sure I understood about the short codes appearing in WooCommerce. Why would you do that? That's interesting. Interesting. Before WooCommerce I built Magento sites so that's why I'm asking. It's sort of a Magento refugee. Interesting, okay. You know, the one thing that Magento, or that WooCommerce does not do yet that Magento does is the multi-site. And hopefully Patrick has, Patrick's nodding his head and hopefully there's something on the horizon for having. I was agreeing with you. Magento, you can have one catalog and you can have that tied into shoes.com, hats.com and pants.com. And they all have different designs but they share a user base and a catalog base and all your orders go into one place. WooCommerce doesn't do that yet. And it's asked for all the time. Because people have, you know, they want to manage one catalog, one order base and have these multiple front ends where they're marketing and selling. Could you just tell them what was the main one for us? You could, but there's some, there's some gotchas with the themes and how the themes are presented. And there's some other gotchas with how the catalog is presented to the customer. WooCommerce can handle it but it's just not as, it wasn't built from the beginning to do that as Magento was. Magento has the website concept, the storefront concept. There's like three levels of abstraction there for separating out your presentation which it's not, there's not there yet. You could use the API for that. Headless e-commerce, yes. So you could have your API and your WooCommerce sitting on one site and then use one of your lovely JavaScript, JavaScript methods for creating your site to pull the data back and forth from that. Yeah, that's true. And if you do that, let me know because I want to see it. Sinking QuickBooks, online or desktop? Okay, so are you asking if it's possible or how much of a pain in the ass it is? So I have on the shop plugins in my marketplace, I did the foolish thing of putting up a landing page and say, hey, I've got a QuickBooks online plugin for WooCommerce and EDD. It's been up for a year and I have some code written but not a lot. I built an accounting program integration before for zero and I was like, I'll just use the same code, we'll just change the way it's integrated and I wanted to stick with online because desktop can be run, I mean it's literally on someone's desktop in their closet and I didn't want to support that. There are integrators for QuickBooks desktop out there but I normally hear horror stories and not necessarily happy thoughts. So I'm not really going to name any of them. There's a couple of them, if you Google, you'll find them, they're monthly products. So you're paying every month for the privilege of using their software. So just check those out and sort of read around that. Yeah, I don't have a good solution for that. Use zero, the zero plugin. So the data, again, sessions. So WPC customer, you'll have to dig in to know precisely I can't pull it from my brain. So that is, again, it's held for every customer that comes to the site and WooCommerce knows if they have purchased prior, if they're an authenticated WordPress user, if they're a guest. Some of the data now includes geographic location based on their IP. I mean, it's kicked off every page load. You'll have to check the class to know for sure. So what are the questions if you wanna run tests, create, develop tests against plugins, against WooCommerce plugins or I would look, so WooCommerce has a 20% or more testing coverage on all the code currently in the core plugin. Check on GitHub and you'll see a PHP unit directory which includes some sample tests and you just start from there. So review what's currently there and how it's setting up and destroying and testing and which assertions it's running. Use that as a framework and then you should be good to go. On the same site, interesting. I haven't seen that because normal, so the question was with Mika's scene, plugins come into the WordPress repository with their own APIs. Is it cumbersome for customers to set up one API key and usage and then a parallel one with another plugin? I haven't seen that used because normally the usages that I've seen are your eCommerce site is running here and the data is just either one way out or one way back in. So again, like the order data going to a fulfillment center. I haven't seen it used across the two before and anyone who's using the API in my experience is someone in this room. So their developer, they know their way around it. They know how to read a doc or bug another developer an issue and a GitHub issue to figure out how to use it. It'd be interesting though to hear about that about some of those cross-pollination things. Yes. This is actually going into. And the second question that's related to accessibility is, are your code examples, this is specific to the point, are your code examples online somewhere? Not in this life necessarily. And my third question is, as far as straight up eCommerce, is it possible to block a client that has contracts with specific vendors and they have to make sure that the only sales that they make, that their site makes specifically happen in the United States. Anything else outside of the United States needs to be done through that country's specific legal work. So they're giving a talk somewhere like Canada, for instance. And somebody goes into Canada and tries to submit an order. Is there a way to quickly, is there a setting in eCommerce to just set that or is that going to need to be more complicated? For review for the recording, first question was about accessibility in eCommerce and if there's a way to make the eCommerce forms that it presents accessible to devices for screen reading and assistive tech. The second question was, are the code examples available online? And the third question was, how to keep those pesky non-US people from buying from your store? Sorry, that was a terrible political joke. So the first question, you probably need to check with the core developers. I have not worked in that realm of assistive tech before, so I'm not sure. I'm sorry to punt it to them, but my experience hasn't reached that far yet. The second question about the code examples, all of the code examples are from the core eCommerce plugin, so sort of how the plugin itself uses the helper functions in the core classes. So yes, it's available from, I mean, if you download the plugin from GitHub and then read through it from there, you'll find these same code examples. I don't have a pointer linking to them, so it may not be that helpful to start from the slides. And then the third example, the way to block customers from any country is first off by using the settings that eCommerce comes with to set the allowed countries to purchase from your site. And that will pull out any countries not in that list. So if you just want to include the United States in that list, you can do that. They won't be able to select a billing or shipping country other than the United States. And if you don't want them to even see the site, there are add-on plugins to check the IP address or to block from registered users from seeing your catalog. And in the registration process, you can, again, limit the country that they say that they're from. There's a couple of ways of doing it, from keeping people tied into their sort of geographic region. Any other questions? Yes? WPCLI, how does WPCLI changing? Is it safe to really start building around your CLI right now? So the question is related to the CLI, and if it's sort of OK to build on top of that, or if it's still the Wild Wild West. I think that the end points that are defined currently are they go through the core WPCLI and then hit the WooCommerce supply end points. I don't know the state of those. I don't know if they're in transition. I watch Twitter like anybody else says. I don't really know where that's headed. I know they're useful now. And I would feel fine building out on top of them. But again, just watch for the future for anything new and updated coming down the line. So not really a definitive answer, but any other questions about your projects, plug-ins, about my face, anything? Back. Hey, the gateways. Yes? Now, Paypal, Paypal, you can actually have their give, pop-up, and all communications actually back and forth between the Paypal server and the website server all together. A hosted forum? Yep. Is the WooCommerce handle hosting pretty well, or is that something you guys don't do? So WooCommerce has a lot of payment gateways available for it. And there are three types of payment gateways when you're talking about how the site collects payment for their products. The first is a hosted form, and that's where a customer enters in billing, shipping, and payment information on a form that's presented by WooCommerce, collected by WooCommerce, transmitted to the payment gateway, acceptance or decline received, and then presented back to the customer. There is a hosted form where WooCommerce says, hey, I'm not going to create a form. I'm going to grab it from Paypal or Stripe or whoever, present that to the customer, customer interacts with that, and Stripe returns to WooCommerce, the thumbs up or the thumbs down. And then there's off-site redirect. And that's where WooCommerce says, get out of here, go over there, and turn your payment information and come back. That's Paypal standard. When you're talking about PCI compliance, the payment card industry has a set of a self-questionaire that e-commerce owners need to fill out. And you can find that by Googling it. And he's right. And most of that does relate to the hosting that you've chosen to use. So you need to research on that. WooThemes has a great PCI DSS primer on their site. If you Google WooThemes and PCI, it will list out everything you need to know about that and how WooThemes is related, or how WooCommerce is a PCI DSS compliant or not. Yeah, best thing to check. And then if you're really concerned about that, just use an off-site payment gateway. Paypal standard, Stripe checkout, something like that. I don't. I believe on the ideas board, there is a square, the ideas.woothemes.com or ideas.woocommerce.com. There's a question to integrate square. So square is the little dongle bit that you put on your iDevice. And you can slag cards at a location for taking. Now when you say integrate, are you wanting the orders to go and reflect in your WooCommerce store and have that be the mothership? Or are you saying that you want that device to send payment gateway, I mean, send that card data through your payment gateway transaction through your site and charge cards? Like there's a couple of levels of integration there. I guess I'll be asking a little bit more. OK. I don't think it exists. I think you're working on it. Yeah. So it's on the way. I mean, the idea has been started. So check on ideas.woothemes.com, search for square. There's an option there. Talk with the automaticians, I don't know. People are not in agreement that they do. All right. Square would be the swipe activity. The question is related to supporting swipe so that you can negotiate a lower fee for each transaction. I'm not sure, actually. It's like writing a check. Why are you writing a check? Type in my billing address. There's a WC Woo Point of Sale. It was based out of Australia. If you Google it, it was a project that started, then stopped, then sort of started. And I've been following it a little bit. I think they were working with integrating some readers to be a Point of Sale, WooCommerce-based Point of Sale system. Not sure how far they've gotten, or if it's still even in development. But maybe something you want to Google. It's almost that time. Any other quick questions, Superfast? Guys, thank you for coming. I hope you'll have a great WooCampalana. Thank you.