 Hello Fantastic. All right. Well, I mean as has already been explained time is of the essence. We've got to do this now All right. So this is advanced custom blocks today I am focusing on a popular plug-in called advanced custom fields and how we can use it and I guess some of the skills that a Lot of us already have that we've got from developing Themes plugins just WordPress websites in general and how we can transfer those and you know like create some crazy Experiences in the block editor and all of that kind of stuff Now it's the afternoon roll a bit tired. So if you can please humor me, I need to get to know my audience a little bit Can I ask everyone to please stand up out of their seats? Thank you. Okay. Now, I would like you to sit down if you have never heard of advanced custom blocks before now I mean advanced custom fields. Sorry. Who's who's never heard of the plug-in before now? Okay, cool Who has never used it sit down if you have never used the plug-in. All right. Okay, cool Sit down if you have never used the pro version of advanced custom fields All right, Ellie, it would be very disappointed in all of you sitting down For those people that are left standing I'm very curious to know Sit down if you have never used the flexible content field a few alright, okay, so I'm going to be talking to about ten people in the room which is just amazing But like we said, we're talking about now and what is really so special about now so you can all sit down Okay, and now I guess is really a big time of change for WordPress and In order to talk about now We might just need to quickly breeze through a little bit about before because I noticed at the start of you know today When we're going around the room, there's a lot of new people here They're new to word camps. They're new to WordPress and maybe they just don't actually understand what the fuss is all about But way back we had this thing here This is called the classic editor now that lovely big white rectangle that you see up there where you could paint your masterpiece All right But pretty soon people realize that that wasn't enough to make the website of their dreams and people wanted to do more And so they turn to this stuff called metafilts But the built-in user interface for metafilts is quite frankly very poor All right, don't tell the core devs that but it's horrible And so people realize this they started making custom ones and doing all of that And that's where we meet a CF or advanced custom fields It is a plug-in that takes the that weird kind of like text key value store thing that we just saw before and Turns it into these rich user interfaces that make putting in like customized content an absolute dream So we have things there like you can see there's a color field There's date pickers there's even just you know plain stuff like text and paragraphs and we can do things like Require content to be set or we can dynamically hide and show sections depending on values that people pick and In general, it's just like you know a much much better experience for this kind of you know custom stuff that we might want to do in the admin so For me as a novice web developer Discovering ACF made me feel all of a sudden like a wordpress super hero All right All of a sudden I went from kind of like fiddling around with things in the whizzy wig to being able to design these Really cool editing experiences in the admin using the GUI the ACF provides And I managed to bumble my way through some templating code and all of that kind of stuff and get it output on the front end and All of a sudden it was just amazing. I could do whatever I wanted with wordpress my clients loved it I was having a good time and in general life was just pretty good, you know We got some new fields over time. I didn't really go back. I kept using ACF However, when the flexible content field was released that kind of really changed everything So what this enabled you to do was to define these groups of fields called layouts So it'd be a group of you know You could place more fields into a layout and then you put a collection of layouts together into this flexible content field And when someone's authoring that content they just come in and they go Well, I would like to put some text in and then they see the text fields And I would like to put the call out in and then they see the fields related to the call out and you could just build up your page using these flex content fields and Pretty soon myself and a lot of other people from what I can gather online Realized all of the power that this presents and they pretty much stopped using The regular wordpress content entirely we just started hiding it or turning it off or whatever and doing everything in this flex content way Because also when it came to templating it was so much easier Right, we could write this like basically this one statement and almost have one template for the whole website So what this does is it just finds what the layout name is called and it loads a template file Called that layout name and so all I need to do is basically just go through and make sure that the names match up and All of a sudden now I can develop my websites in a totally different way So rather than relying on fixed pages now. We started to build modular blocks and also All of a sudden, you know now clients can just come in and add more It used to be when I first started using custom fields for example You'd have to get the specifications of a website like Totally on point because if the you know the client will come back and you'd be just about to launch the website and they go Oh, yeah, we need another paragraph or an image right here. You know, okay. I'll go put in more fields I'll go change the template code but you can see here that you can just add new ones in and That loop that I showed you before we'll just kind of like take all of that into account Also, and this was a huge thing at the time Vertical ordering of content stopped being a problem when we were using fixed fields We had to make sure that we got the order right Okay, so if we wanted the map, you know to be before the contact form but after the paragraph or whatever get to make sure It was that way in the template We had to make sure that hopefully the fields lined up in the admin to or someone would get confused This now you can see you can just drag and drop it around and it was really I mean in my mind kind of the precursor to the modern block editor that we have now After discovering all of this I have to say life was pretty good All of a sudden we're developing, you know wordpress websites in this new way and we were happy you were productive It's fantastic and then of course, you know, it's as always time for change Hey project Gutenberg was announced you may hear me refer to Gutenberg or the block editor throughout this talk And they are the same thing. I apologize if I use one or the other at certain times, but they're interchangeable But the block editor was announced and all the people like me who are absolutely crazy about advanced custom fields were very worried because I gotta admit I don't I was not really a big fan of the classic editor Okay, I wasn't losing any sleep over losing that that big rectangle apologies to the person from tiny MCE who's here But what I missed is that I could change all of this Right like using the skills that I had I had PHP skills and I had you know HTML skills all that kind of I could change all of this stuff I knew the actions I knew the hooks and I could just turn it into a blank canvas where I could put whatever I wanted and Then it comes out that now all of a sudden I've got this and I don't have everything up here That's all the react application now You can see that it expands a little bit, but it's still not really enough for like a whole content authoring experience and So, you know, we're all just sitting there going like what are we gonna do? What's what's gonna happen? And I think that you know in general like we were just really worried about the change Partially, I think because we'd spent time Building a system that worked for us and we're always so protective of things that we have created ourselves All right, whenever something new comes along We're always just at a rush to be like nope I've invested so much time into this that it can't possibly get replaced. It can't they can't possibly be something better But it sort of turns out that I got to have my cake and eat it too and so did a lot of other people because since ACF pro Version 5.8 or greater. We can now use like the same field interface to create these custom blocks And once again life was good So maybe you're just sitting here wondering like why don't we just make native blocks We have already had some fantastic talks about that today Why don't we just replace flex content with native blocks? Sometimes honestly, you can't so I have made flexible content fields in the past before that just contain like a Simple assortment of fields so we put a heading block in there We put like a paragraph on in there and an image and a YouTube and all that kind of stuff And we just find that clients would often be able to use that still easier than the classic editor Something like that is the perfect example to just get straight up replaced by the block editor However for some of these other things where we've created these really custom experiences. We still want to customize the editor So we're gonna need some way to do that One of the ways that one of the reasons why I really like using ACF blocks as opposed to native blocks is we get full control of the markup at render time I'm not saying that isn't possible with native blocks. It's just a lot easier with ACF blocks And I think really the big thing the really the big thing is why people don't want to sort of get into native block development Is that they like perceive it as being a steep learning curve? I must say though it is getting better We've seen some things like rulers talk this morning I thought was very interesting and they talk about that he talked about the WP scripts project how that's making it easier for people to get into react development by removing the hassles of managing your build process and all that kind of stuff, but It's still you know, there's so much good stuff there, but it's still a big change It's still a huge change, especially if you're not used to writing modern JavaScript. Yes, five years next React is different the paradigms of it all are different. You know, there's just there's a lot going on there And most of us are busy man. I Work for an agency. We are pumping out the websites. Obviously, you know, we take time to make sure it's done, right? But they're flying out the door And not everyone has that luxury of just being able to drop everything learn new stuff and then you know pick up where they left off We have so many legacy applications that we've got to maintain and have solutions for them And so I guess we're looking at all right How can we progressively introduce this or how can we start getting some of the benefits of the block editor today? Without completely changing everything. All right So hopefully now you're starting to come around you might be going well if I'm gonna use this ACF blocks thing Am I getting a watered-down experience? Am I you know, is this like is this block editor light or something like that because I'm using this and For me, I really feel like the answer mostly is no so native blocks can be static or dynamic and I really like the ACF blocks are all dynamic. So a static block when you save it That block may define some additional HTML something like that and that gets saved into the content in the database if you change that template You need to update the post in order to change the markup for me. That's a bit silly It's why I use something like WordPress is to have an abstraction over that So I really want dynamic blocks where everything's rendered server side so that if I if the client needs this to change across the entire Website right now it can For me, that's kind of like what I love about using a CMS in general So the data is decoupled from the design like I've been talking about and For I find for us that makes our development a lot faster The the portability or compatibility between I guess our old solution and the new one also makes our development a lot faster And we're gonna get into that in a little bit As I mentioned ACF blocks are registered using PHP So you do this within a theme or a plug-in and you don't need to know any react or like You know WP blocks JavaScript API any of that stuff great stuff to check out if you have the time But you don't need to know any of it to use ACF blocks and Finally, I'm sure there would be some people who are familiar with ACF that are wondering how the data is saved So it's not saved in post meta like it used to be for things that are within ACF blocks It's actually saved as a Jason literal object in a HTML comment Because I guess this is like the Gutenberg compatible way But it is important to note that like it's a really great replacement for say if you were using Flex content or other fields to replace the content of your WordPress post However, if you were using meta fields, I guess as more what I would say is like actual meta If it was more something that you would query by As an example or sought by or like something like that or is just like an additional piece of information That you want to be able to you know fetch out the database separately And maybe it's still best suited like actually being a meta field and living in that drawer down the bottom And in that case probably weren't really considering like, you know flex content or anything like that in the first place either So it doesn't mean that post meta or you know regular meta fields have completely gone away Okay, so what's the learning curve like how much time we talk in here? We're all busy people If you already know about using flex content and have like built some templates for that or something like that You only need to learn one new function. You should be able to basically walk out of this talk and just go do it Because it's that simple If you've ever written a child theme theme or plug-in Then it will be really easy for you to pick up because you have some knowledge of I guess what it means to edit PHP within WordPress, maybe where some of the files live and things like that If you've never done any of that before if you've never used Advanced custom fields or have never edited the PHP of your WordPress website Then it may be a little bit harder But all of that difficulty is going to come from the more general concepts Surrounding those things and not ACF blocks in and of itself It's just that I guess you have probably a little bit further to get up the ladder Before you can use it with the same fluency as you know people that are used to doing that kind of stuff All right So we on board should we get into it? The I will not be sacrificing to the live coding gods today, so I apologize So we're just gonna have a lot of code on screen and that kind of stuff But here's here's where we really I guess start getting into it So the usual disclaimer is you're making edits use a child theme edit and test locally Do not test or make changes in production till you're sure better yet have a testing and deployment process If you want to know more about that wait till I've had a couple beers. I'll be yelling it at you later tonight Okay Okay, so it all comes down to this one function was introduced in ACF five eight It's called ACF register block type Args is variable there. It takes an associative array of arguments and they define I guess how our block behaves and you know what we what we need to do to get it all up and running So let's check it out on the left here We're gonna have the arguments and then on the right. This is the block selector in the block editor Okay So this is like a piece of the block editor where you go and you click on the plus and it's like a new block I'm just gonna use that to maybe highlight how some of the choices that we make here affect what we see Oh now I've just realized there's actually a slide missing from this But I'm using a fictional example as we all need to do for demos My fictional example was a website about dogs called good boys Hope you all enjoy it. And so we're building a featured dog. Oh block. All right. Let's just let's get around it So the name is the unique name for this particular block. So this is like an ID for your block It should be globally unique. You cannot have two blocks that exist with the same name So you may want to prefix it with like a name space You could do like my theme slash whatever but in general it's like think of it as like a slug or an ID avoid spaces I wouldn't capitalize that kind of stuff. It's just gonna get messy All right, the title So the title is what's displayed up here It's like the human readable nice name of the block and you can see it highlighted over there in the in the block selector Make it translatable. That's what those sort of you know, wrapper tags there are and Then we also have the description which is not shown on this particular part of the editor It's in the top right when you're actually editing the block itself We have the category blocks belong in different categories and as you go through the block selector They're all separated out into the categories. So I put this one in embeds You get to define an icon for your block and it will take a like the name of a dash icon You can also pass it an array if you want to specify a foreground and background color for that icon If you want it to look a bit snazzy Or if you really want to get fancy, you can also pass it a string that is an SVG So you can just pass an svg straight in there for a custom icon and Finally, we have some keywords which help when we're searching So now with the block editor and people adding additional plugins and us making custom blocks We could end up with so many blocks that it's really hard for the client to find the one that they're looking for So then being able to find it through search is actually an important thing So we can define synonyms here, which may not be the actual thing in our name But you know what they can find it by So this kind of stuff is really all like meta about the block You know defines like what it's called and you know what the title is what category it's in all of that kind of stuff The next few things are I guess like the real meat of it all So the first thing is render template. All right So we pass this in if you want to use render template you pass it in the full path to a PHP file And this is where your markup and everything will live This is where you'll make you you know the field calls and all of that kind of stuff and do your regular ACF thing And so you just pass it in a string that goes there you also or Not also you have the option of instead providing a callback So you can provide a function name as a string You can provide a class method if that's what you want or you could provide just like an anonymous function I think even like an invocable object. I'm pretty sure anything that satisfies like PHP's callable type will work and So, you know that way if you maybe have some conditional logic you want to run before you select the template or something like that It can it can happen If you define both for some reason you just want to overachieve render callback will actually take precedence So that one will get run and your template won't be loaded Styles and scripts are very similar So we can just pass it in like You know something, you know, just a style sheet or a JavaScript One of my trying to say a JavaScript file and they're both optional You don't need to load additional styles for your block But if you do they'll get loaded in both the admin and on the front end and they'll do so on an as needed basis So if the block isn't on the page That style sheet doesn't get loaded JavaScript and CSS is a bit more complicated these days And so sometimes we might end up in situations where you know our style sheet or our JavaScript or something like that has Dependencies and WordPress has a great system for handling this already However, this kind of like simple quick interface that we've seen above is just meant for you know Getting up and running really quick or really simple scenarios If you need to also like make sure that your assets dependencies get loaded Call the regular sort of like WordPress WP and Q script or whatever functions then you can do so within one of these Sorry, I've got to go through all over again. That's just not gonna work Through one of like the callback so again you pass in any of the callback types and then from there You can call the regular WordPress script and all that kind of stuff I don't know how I can't just skip past this, but You know, hopefully now you'll really remember it Okay, cool. So like I was saying it's very similar to render callback takes any callable type Let's actually look at some code for making a block now. So as I mentioned Good boys. Our example is dogs because what's more wholesome? This is minimum viable block registration basically that we're doing here Firstly, we're gonna check if the function that we want exists So this lets us know if we're using a version of advanced custom fields greater than 5.8 Also, notice that where we're doing our add action call to like hook in registration function We're putting out on ACF and it so this is kind of nice because it means that it won't run in less advanced custom fields is also active and And you know like running So rather than putting on like WordPress in it or something like that This is our register block type call. It's basically the same things that I've been showing you on the screen there and This is our minimum viable template Technically you don't need this stuff, but it's a good idea to just pop that in there This deals with some common Gutenberg kind of class names and attributes that the editor passes through to you to deal with things like layouts and alignments So you don't need that, but it's a good idea to have that for all the blocks and as far as the actual block goes I can There we are you can see down the bottom It's just a very static thing at the moment. I've just written hello world there. I'm not calling any of my dynamic data It's just hello world like we just want to get something showing in the admin So as a final step, we just need to attach a field group to it Now when we go to the field group drop down, we have block as a you know location option And we can set that and from there we should be good so Founder and now you can see like the hello world just output because we're not using the data And I've set one custom field on this block over on the side and it just lets me pick like a custom post Alright, so again, we're just we're just trying to get up and running But you can see the fields over here and the output up there So let's just skip forward a little bit past the kind of hello world thing and get to the point where you know I've actually defined some markup and some styles for that block So that's just you do that like you would regular HTML and CSS and So now I guess this is more of like the finished block So you can come in here and pop it in come over here and select a dog And then I go fetch that post and use that post to then dynamically populate the data of that block And you can see that as we update and pick a new dog The content changes So this is like a live sort of like preview in the admin Which is definitely something that we weren't really able to do with with flexible content. So And once more life is good Where we're kind of back to where we were before and now we have this almost like super charged flexible content block in The block editor So it's like, you know, we've got our old kind of like customized interfaces back And we've got some cool new tricks like I showed you there with preview mode So you can also Flick over to edit mode which just renders out the regular ACF fields in The editor there this can be really good if you have lots of fields or you have like old field groups that you know Have multiple columns of fields in them and you know, like complex things like that Having them over in the sidebar over here might not work for you. So, you know, you can just use the edit mode there Just really quickly if you are someone that has a lot of flex content I don't think we're going to run through this just for time reasons But go check out the slides when they're posted online This is like a three-minute speed run of me converting a flex content block into an ACF block takes that long So go check that out. We'll skip past that Tips for breaking up flexible content as well This might be better off come and revisit this at another time But effectively there are lots of ways that you can get your field definitions out of advanced custom fields You can use their local JSON feature to like save them as JSON files or you can use the PHP export And you could quite easily using a text editor Cut up those files to then like take out the subfield groups and define them as their own top-level field groups We've done that in extreme cases worst case remake the fields. It will probably take you like 10 15 minutes Okay, so just going a little bit deeper Here's some lesser used arguments of this stuff of register block type and It can do some cool stuff. So post types We pass that an array of post types that we want this block to support and it will be hidden on all other post types Alignment we can set the default alignment when it first gets loaded into the editor and same with mode We can choose if we want it to come into preview mode or if we want it to come into edit mode And then finally with the supports array We can also turn some of these things on or off or like limit the options of them a little bit So down here in a line I've chosen that I want to support the full and wide alignments I could also pass back false and turn off alignments altogether and that little toolbar would then disappear from the Gutenberg block Same with mode you can disable preview mode if you don't think it's really going to work for your field group or maybe You know the kind of like thing that you're outputting on the front end is way too hectic to have in the admin So you just want to turn it off and just only see the fields Multiple is the cool one. You can say that's a false and then they can only put one of those blocks Into the content which I think is like really neat Okay, so Now you've kind of seen what it takes to get you know a block up and running and there might be some developers in the audience That are considering taking that step For those people that haven't really worked with the block editor before and particularly those that are coming from a PHP background I guess here's some bonus tips for just dipping your toes in the water a little bit This is a really cool blog post on synchronizing color palettes between the Gutenberg color picker and ACS Again, there's a link in here. So when the slides get posted online come and check it out It's pretty easy to disable custom colors and font sizes in Gutenberg And if you're building websites for clients, I'd almost highly recommend that you do So it's just a couple of ad theme support calls You can get rid of them And you can also using a couple of other filters You can define your custom color palette and you can define your custom text sizes and all of that kind of stuff Have some really nice consistency throughout you can filter the available blocks again. It's just another filter You can do things in there like test what the current post type is all of that kind of stuff Make sure you don't filter out your own custom blocks that you've just spent all this time setting up And you can also add your own custom block categories Using PHP if that's something that you want to do so again another filter and the documentation for this is on the kind of developer docs and everything Finally, if you're a big flex content user, you may have discovered a project called timber Does anyone here use timber can I get like any hands in your yeah, there's dozens of us Anyway, I love timber like I really love building WordPress websites using this framework called timber And it gives you an object orientated interface Into you know WordPress introduces some kind of polymorphism to your templates and WordPress objects And it lets you use a temper a templating language called twig which I'm a huge fan of but if you want to render your blocks Using timber and twig here's pretty much how you get it done This is your render callback that will handle you for any block as long as a file of the same name exists within like You know views slash blocks And yeah, that'll just kind of like pass in context and any args applied to it and This is just the same sort of template That has been edited to now kind of contain twig tags and all that kind of stuff This is just to show the difference to the one before but in reality You would probably actually break it up into sub components because that's kind of the whole idea of using something like twig So this is a little bit more complex might look a little bit more foreign But in the time that we've created this one block We've also created three reusable components that we can then I guess combine in other blocks So, you know, we've been talking a little bit about components on the front end and how it's great to have these Discrete things that are reusable and kind of have like an API in terms of okay. We pass this in and we get this out You can use like Templating languages like twig and you can even make the same thing in PHP if you really want And that whole concept I think still has a lot of value on the server side as well Not just the front end. It's great to have these little template parts that have a known API And so you can do things like adapt them You know, you can make it so that you can just pass in a post or you can pass in custom params and kind of get The same result anyway Finally if you're really nuts and I'm coming up to the edge of my time sort of here You can look at defining your blocks and your register block calls as Class instances I'm not going to go too deep into this because I feel like if you're doing this You probably nuts and you have a very opinionated way about how you would do it and you're going to disagree with my way Okay, but you can do things like extend a base class that handles all the registration for you Or you could use like a service class or like manager class to sort of register them You can do nice things when you sort of be within the PHP environment like dynamically detect if the template files or scripts exist and enqueue them And if you're doing that kind of stuff, I highly recommend that you use an auto loader because it makes the entire process so much more fun All right, so just breezing through all of that really heavy stuff there But I just want to say like it's definitely a new time for WordPress. It's a big time of change and Change can often be uncomfortable, you know It's it's always hard and it always I guess is one of those things where we struggle to feel like maybe these skills that we've invested all This time into aren't worth anything anymore And I guess today I really just wanted to present some things to you and show you that we can still do some like really amazing Things just using I guess the WordPress skills that we already have you know We can embrace the block editor without retooling and retraining using ACF blocks And I mean, yeah, I just like to say that Really like you shouldn't let the technology kind of hold you back If you want to learn react learn react if you already know PHP and you're comfortable there You can do some incredible stuff. I just encourage you to get out there and build an experiment and try it all out So special thanks to our organizing team and our sponsors without them I wouldn't be able to stand here and talk to you all this afternoon I'd also like to thank Elliot from advanced customer fields for graciously giving me some of his time on the lead up to this talk to help me prepare I Would like to thank frame creative the people that I work for for our flying me out here to speak to you all today We're a branding and digital agency based in Adelaide, South Australia. I Am Alex James Bishop. You can find me on Twitter there. I kind of just post programming memes and that's about it and Remember life is good. It is the best time now to be a web developer that there ever has been There's so much stuff out there and the level of choice that we have can feel a bit crushing or overwhelming at times But honestly, it's all just great stuff. You can take it or leave it and it's up to us I guess to decide where we go from here. So thank you very much for having me today We have time for any questions Five minutes. All right. All right. Hit me I Got one up there Apologies in advance if the answer is I don't know Have you Ever tried to convert like write a script that will convert your flexible content builder into the new blocks that you create? Is there like you've taken a website? You've created all the exactly the same blocks Converted it. No to be honest like that's that's really something that Would have absolutely been my jam about six months ago. I've kind of turned over a new leaf recently of like Not spending 20 hours automating a task that takes 30 minutes So I've sort of like been actively trying to stop myself from doing that kind of stuff because I used to over optimize on the Automization front. I think that it definitely would be possible You just need to decide what format you want to work with them in and my recommendation for that would probably be the Jason format So have your theme Like how do you know about the Jason format for it? Yep. Yep Yep So I would just work with them because like you can just really easy pass them into an associative array And I think that it would be very easy then to split out those each of those like layouts Just off into its own group then and you just need to like work out a way of coming up with I guess like unique Group names and stuff like that because they need to be globally unique You could literally just like generate them on a timestamp or something like that So yeah, would would be definitely something you could do if you wanted to do that would be a great WPC Li Kind of like thing I think that would be like the ideal kind of framework within which you'd build something like that But I haven't personally done it Sinking a beer at the after party Can I ask one more question? Yeah, sure So it's not too wrong to believe you would turn off everything in Gutenberg and just build your own blocks You can but I actually that was my initial reaction I think that some of the things that you get in Gutenberg just out the box are almost like kind of kind of better Like particularly when it comes to text content So I actually really like having individual list and paragraph and all of those kind of like Blocks even like some of the stuff like button and heading I leave all of those on And I don't I try not to make ACF blocks anymore that use the ACF whizzy wig field because like where We're instantiating like tiny MCE within this whole like block editor and it just gets really JavaScript heavy So you could do that particularly if you're building from scratch But I actually I really do enjoy the text editing experience of a lot of the Gutenberg stuff I just build blocks for custom things Okay, cool Yep So maybe this was implied before but when you're talking about hey There's this one function you need to learn to register an ACF block Yep, and there's certain arguments you pass to that those arguments looked very familiar Are they identical to registering a regular block? Because it looked a lot like the same ones. I believe it's very similar But no, it's not actually quite the same. Okay. That is Elliot Yeah, yeah, they're the same but yeah, my understanding is like like some of the supports and stuff is a direct correlation Supports I think definitely lines up with support, but yeah Yeah, so the arguments that you can pass into the PHP function Exactly the same as the native JavaScript props but with a little bit of sugar sprinkled on top So you get some extra stuff in there like the callback and the assets JavaScript and CSS type stuff Yeah, yeah, which is cool So it means that any time that the Gutenberg developers add new properties to the JavaScript API the PHP ACF equivalent will just inherit that as well Nick All right. Awesome any other questions? Howdy What some examples of like custom blocks that you've built for people Okay, well, I'm not on really like my computer or anything. So I can't sort of like show you but what we typically really try and do is Similar to what you saw with the featured dog block is we try and make really Simple interfaces that generally do like pretty complex things under the hood So that way the client can grok them really easily we have a Stock set that we pretty much install on like any Any kind of website some of them aren't needed anymore now that the plugins and stuff have caught up So we used to have like a gravity forms one and all of that kind of stuff because we just needed it But now they've got their own However, like yeah a lot of the time We find ourselves again and again and again like just having this thing called a combo block or a feature block or whatever I'm pretty sure everyone knows would have seen something like what I'm talking about. There's an image There's a title. There's some text and there's one or more buttons and it's laid out in a number of different ways But those items are like always there We pretty much put one of those on every website because like everyone wants one And then a lot of the time after that we're looking at things like post grids and related objects and stuff So they might just pick a category and we'll automatically pull in like, you know nine posts from that Beyond that like getting into more complex things. I've built graphs So using like a JavaScript front-end like graphing library and just people supplying some like numbers and parameters in ACF And then we pass that into like, you know, I was using like apex charts I think with you and you know outputting like a dynamic animated graph on the front-end Even like we are starting to build things more with The kind of view frameworks. I'm like like you react and spelt And so a lot of the time. Yeah, we'll just like create a block That defines any of the component like props or params and then just passes them straight through into it as a JSON object So yeah, so you can do you can do pretty much anything, but We find a lot of the time our clients have pretty similar needs for content and then we just build blocks where You know where they have unique needs Cool, are we are we done time-wise done? Yeah, awesome. Thank you so much for having me today guys