 All right, everybody, welcome Jim who's joining us so far. We've got Tracy and Jim who've joined us. I know we had Cynthia and Elliot who were quite active last week, so they might come through later, but welcome Jim. You're the only person in the room at the moment, so maybe you'd like to let us know where you're joining us from while I do my usual introduction. So my name is Jonathan, I live in Cape Town in South Africa. I'm joined by Tracy who's my co-host today. He is from Reno, Nevada, and Tracy was telling me all about his flights and his travels before we started this. So Jim, where are you joining us from and what do you like to do in your off time? Personally, I tend to like to game. I am a gamer. I grew up in the 90s and gaming and a bit of a tech node. So if I have spare time, I'm usually sitting in front of a screen somewhere playing some video game. Hey, it doesn't look like we have too many more people joining us today, which is perfectly fine. I am more than capable of just talking to a room of three. So this is a follow up session from last week. Last week I did a session on setting up the local development environment and how that all works. And this week I'm going to be looking at actually fixing the bug and creating the pull request. So this session is being recorded as most sessions are. And if you're watching this on WordPress TV and you haven't watched the first part, then I do recommend watching the first part first because that goes through the process of setting everything up. So this is the link for that. I'm going to share that in the chat. And this goes through the process of installing all the software, getting everything that you might need installed in your local machine. So I do recommend checking that out if you're watching this video for the first time and you don't know all the requirements. I have all those requirements set up. So I am going to get my local environment running now using this yarn run create command. And then I want to run through a couple of things that I use for local development to make my life a little bit easier. But before I do that, let me just quickly go through the usual announcements. So please let me know if you can't see the slide. And I will reinitialize the screen share. I am presenting in focus mode. So that means that Tracy and I can see your video, but you can't see anybody else in the room. I see Sheldon is joining us. So once he comes in, you won't be able to see him. You are free to ask questions at any point in time. You can post your questions in the chat or you can unmute to ask questions. Welcome to Sheldon who's joining us. We have a small group today and that's fine. Sheldon, while you're joining, maybe just let us know in the chat where you're joining us from. We have Jim, we have Tracy in the room with us. Tracy is co-hosting with me today. Thank you, Tracy, for co-hosting again. And Sheldon, if you can't see the slide that I'm presenting right now, please do let me know. We do sometimes have issues with the slides so I can just reinitialize the screen share. All right. As always, if I go too fast, I do tend to speak very fast when I'm presenting sometimes. I try and keep myself paced. But let me know if I'm going too fast, because everything on screen is not clear. And I will slow down. We are recording this session, so I will be posting this to WordPress TV afterwards. And if you're looking for more content to learn WordPress, you can go to learn.wordpress.org. Or you can go to developer.wordpress.org news, which is a new developer-focused blog that was launched recently. And it has various developer news and updates on that blog. All right. So today's session, if there are any questions from anybody who was in last week's session, I want to deal with them. There is actually one question that Cynthia asked me in the meta channel during the course of the week that I want to dive into very quickly before we start. And then I'm going to move on to actually creating the pull request, creating a local branch for local development, coding the fix that I'm going to be working on. I'll share the GitHub issue with you in a second, committing the code and then creating the pull request on Learn WordPress. Just as a quick refresher in last week's session, which I have shared in the chat, and I'll share it again now for Sheldon, who joined a bit later. I did cover forking the GitHub repository from WordPress Learn to my own personal account. So that's the GitHub repository that I'm going to be working with. And then I'm going to create the pull request from there. Two things I wanted to mention before we continue. Last week, if you were in the session last week, I indicated that sometimes the Learn WordPress dashboard can be a bit slow. I have some trouble with it every now and then. And that's because there seems to be a problem with the connection between the local code and the WordPress.org repositories. I'm not sure if it's a problem on my local environment or if it's something to do with the code, and I haven't really dived into it yet. But to fix that, I install a plugin called Airplane Mode. Now, Airplane Mode hasn't been updated in four years. That doesn't mean you can't use it on your site. It just means that the developer, Andrew Norcross, doesn't tend to test it with newer versions of WordPress. But the code is actually very, very simple. I'm going to dive into the code very quickly with you. If I can get it here, I think I will be able to. Yes, I should be able to. There we go. And all it effectively does is it sets up a bunch of scripts and styles and various other things. But the true core of it is that basically it prevents WordPress from trying to make any external HTTP requests. So it's literally like Airplane Mode on your tablet or your laptop when you're flying in a plane. And it actually, you'll see there, there's a little airplane icon there, and it shows the number four. And that means that it has disabled four HTTP external requests. And those external requests are what sometimes slow down the load and WordPress code base for me on my local environment. So I have this plugin installed. And you will see that once it's installed, things are a lot quicker. I can jump around clicking on different things and things are fairly speedy locally. So that's the first plugin that I have installed. The second one that I have installed is called SQL Buddy. And the only reason I have this installed is because the load WordPress code base is running inside of a Docker container. And that Docker container is using a local dev environment called WPENV. And so in the WPENV handbook, which I'm going to share with you here in a sec, there's a section about accessing the database. And basically it requires you to use something like SQL Ace or Table Plus or one of these other tools and then plug in the username and password and access the database. I don't use those tools. I tend to use PHP My Admin locally. So I will then have to install that tool and then configure it and all that kind of thing. I'm just honestly too lazy to do that. So I install SQL Buddy. SQL Buddy allows me inside of my WordPress dashboard to access the database directly. And I just find this a lot easier when I'm working with a site that I can't access the database in any other way. So I have recommended SQL Buddy before for instances where you can't access the database using some other tool. I don't recommend leaving it on production sites, but it is handy for accessing the database if you're working on a local development site. So those are the two tools that I use for that. All right. Then the one question I wanted to cover from last week. So last week in the MetaChannel Cynthia who was in the workshop last week, she managed to get the local environment set up, but she didn't get any of the test data. And so in the... If you go inside of the... In the Learn WordPress code base, there is a bin directory. Inside of that bin directory, there is an index.sh file, which is a shell script. And these are a series of commands that run when you run that yarn run create command. So it sets up the WPENV environment. It sets a bunch of config files. You'll see these are all being run as CLI commands inside WPENV. So essentially it's just running these terminal commands inside the Docker containers. And right at the bottom of this command, NPM run WPENV run CLI and then the CLI script. So this is essentially running the import test content.php file, which is this one over here. You can use that and inside of your terminal, as long as you are inside the Learn WordPress directory that you've set up, you can run that command. So what this will do is this will run... NPM run inside of the WPENV environment. It'll run a CLI command. And that CLI command will be using the PHP interpreter to run the import test content.php file. So if I enter there, you will see it then will start that process. It will connect to... And this will probably fail now because I've just disabled those connections. There we go. It's failed. Airplane mode is enabled. But if you don't have airplane mode enabled, it'll connect to the Learn WordPress REST API and pull all that data down. So just remember if you need to do this, you need airplane mode disabled. If you're not finding that Learn WordPress is slow on your machine, then you don't need to worry about airplane mode and you can just run it from there. So just something to note if you ever need that test content again. All right. If there are any other questions at this point in time, I'm going to take a pause and grab a sip of something to drink. And then I'm going to go in and start creating my pull request and writing some code. I'm not seeing any questions in the chat, so hopefully everybody is happy to move on. All right. So my first step always when I'm working with a bug or enhancement or anything that I want to work on is I create the local get branch to work on. And what I tend to do is I tend to follow the naming convention for creating a branch that the WordPress project follows. And that naming convention is normally the issue number or the issue ID followed by a short description of the thing that I'm fixing. So I'm going to click on over to the WordPress Learn GitHub repository because that has the list of issues that I want to select from. And I'm going to find the the GitHub issue for this workshop. So I'm logged in as a separate account, so I'm going to search for myself, which is kind of a weird thing to do. But here is the contributing to learn WordPress with code issue. That's the issue that maintains this workshop. And down here, issue number 1464 is the one that I want to work on. And this is a request that somebody had to display the publication and update dates for all content. This person said, I often find load content shared on Twitter and other social networking sites. However, I cannot quickly see on the page when the content was created, published or updated, even if it is not new. So I'm convinced that the content would be more meaningful if you included this information somewhere in the first view, if possible, as in the sample. And then the person has this published and updated data on the bottom here. Generally, I tend to agree with this. My colleague Ben also agrees that this would be a good idea. And he's given some ideas of where this could be added. So I'm going to work on this issue, this enhancement, if you will. And I'm simply going to use, excuse me, inside of, so all of the content, the tutorials and the lesson plans. I just want to see if Ben has got tutorials, lesson plans and courses. Okay, courses might be a bit tricky, but we'll see. But tutorials and lesson plans are all stored as custom post types. So if we have a look inside of the posts table and we scroll over to the right, you will see that we've got custom post types, WP org underscore workshop. And we've got lesson hyphen plan. WP org workshop is the old custom post type name for a tutorial. They used to be called workshops. They used to be called tutorials, but that is the post type for the tutorial. Lesson plan obviously is for lesson plan. Courses I think is stored in here as well. So I'm going to just hop on over and see if I've got a couple of courses probably further down the line. I think the easiest way to double-check that will be actually just to go into Sensei and click on one of the course names. Okay, I don't have courses here, that's why. Courses don't get imported in the importer because courses are behind a login screen and we need to set up a login. So I'm going to very quickly create a course, just a simple test course. So we'll say test course. We'll leave out the description. I'm going to stick with the course default. I'm just going to say course description here. And if I look at the top in the URL, I see it's using the post.php, which tells me this probably is a custom post type. So if I now, I see it is saved, it's just saved the draft. And then if we pop back on over into SQL buddy, we should see this in the database, probably one of the last records in the post table. So let's just confirm that. Here we go, posts. And let's jump right to the end and let's see if I can find my... I'm not seeing my course anywhere. It's probably at the bottom here somewhere. Test course. There we go. That's a revision of the course. But this is probably the first one there. Let's have a look. Yeah, test course. There we go. So that's stored as a course custom post. So it's WPADIS core workshop, lesson hyphen plan and course of the three custom post apps. Now what I tend to do when I'm working on issues, I make notes of these kind of things and become useful later on. I'm going to start by working on a tutorial. I'm probably not going to get to lesson plans and courses in this session, just because it's probably going to be a lot of work, but I'm going to start with a tutorial. And I'm going to view this tutorial. And in the issue, I think Ben suggests where we should put it, below subtitles above print view. So let's go back to here. So there's print view. There's transcripts. So he's saying above print view, I think it was above print view. Yes. So that's where we're going to, maybe that's where we're going to pop it in over there. Now I don't know. I don't remember what the template file is that manages this. So the easiest way that I'm going to do this is I usually just search for the text that I'm going to be working with in my code. This is especially useful if you've never worked with this code base before. So I'm going to start with the stuff you see on the front end. I'm guessing this is probably going to be in the theme. So it's the WP org learn 2020 theme. Most of the front end functionality exists in the theme. There is a plugin at WP learn.org plugin. This mostly manages the custom post types. There's custom text enemies and that kind of thing. So I'm not expecting it to be in there. So if I search inside of this theme and I search for the word transcript, I'm not going to find it, which is a bit concerning. I'm also going to have a look and see if there is a template file for workshop. See this workshop series. I wonder if it's in template parts, perhaps could be in your workshop content. Workshop single probably makes sense. So I'm going to open up that one. So there's the URL. There's the content. There's a sidebar. So get sidebar workshop. I'm guessing it's in a sidebar. So if I look for... So what is sidebar doing? Okay. Sidebar is probably going to pull in something from somewhere else. And I just want to double check what get sidebar does. Pretty sure this is a WordPress core function. Yeah. Get sidebar. Loose the sidebar template. Includes the sidebar template. So if it's sidebar special, then it'll be special. So it'll be sidebar something. Okay. So we are looking for sidebars. There we go. There's sidebar. So it's sidebar workshop. Okay. So this now is active, learn workshops, dynamic sidebar, WP or learn workshops. What does dynamic sidebar do? Let's have a look. Displays a dynamic sidebar. Displays the default sidebar. So it looks like this might be some kind of widget control. And that might be why we're not finding transcript. Let's have a look in the plugin. If you can hear that tapping, but somebody's obviously doing something in the room. Okay. There is transcript. There is block workshop details. That's probably where it is. So let's open that up. Okay. So it looks like this is sitting in the plugin. So it's in plugins. WP would learn to use block workshop details. So that's what it looks like. I apologize if this knocking above me is coming through. But there it is. There's the transcript and there's the print view. So now we're in the right place. So it wasn't in the theme. It was in the plugin. That's interesting. I expected it to be in the plugin. In the theme, sorry. But now we've at least found where it is. And what this is doing is saying if it has a transcript, it's going to get the transcript and then it renders it out and all that kind of thing. Okay. So now we're in the right place. Now we need to start putting some data. Now, what I'm going to want to do is I'm going to want to use some global data. And it looks like post is globalized. Because here post is calling post content. So I should be able to pull the date field that way. And if I just call, let's see where that is in the database. If I just call the fields, it's probably going to look horrible. So there's probably some functions I should use to do that. But that's going to have a look at simple buddy. So it's going to be the post date, which will be the published date. And then the post modified date. Now it's been a while since I've worked with WordPress functions. So I want to just see if there are some date functions here that we can work with. There is the date, which is a hook. You can probably do something like get the date. Get the modified date and get the date. So get the date. You choose the date in which the post is written. You can pass a formatting, which is great. So we can format it in the way we want. So that's awesome. So I think get the date will be a function that we can use. And it should work. If not, then we might need to pass in the post ID to get the post ID's date and then pass in the format. So let's start with that. So we said above print view and below transcript. So that will just be over here. And I'm just going to copy out the print view button just because it is easier that way. And I'm going to say, let's go back and have a look. So yeah, print view would work. So that's great. So then we will say publish date, which I say published. Published will probably just work. We don't need a clickable thing because it's just a value. So we can get rid of the anchor tag and we can just probably get rid of the span as well. I will leave it in for now and see what it does. And then we can probably just do something like... No, not that one. Copy the wrong thing. So let's go back here, get the date. And does it retrieve the date? It returns the date. So we'll need to echo it. So for now, I'm just going to echo it, get the date like that and see if that works. I think that should work. So let's have a look on the front end. Let's refresh. All right. That looks pretty good. It formats the date based on whatever was the WordPress formatting, which is perfect. It looks like it might be adding another line here. I want to just revert this change and just make sure that it's not my code that's doing that. Because I didn't... Oh, no, it is. I didn't actually check that before we started. So that's fine. So it looks like that's not a problem. So that's actually a perfect little fix. It's just there, published, get the date. And then the other request was to have the updated date. So it published and updated. So I think that works perfectly as well. Now, in this example, the person has selected or at least has displayed the date formatting in a specific way. Obviously, date formats are different around the world. I'm going to just leave it as default now. And then in the PR, we can discuss how the formatting will be displayed. And I'll make a note of that. But I don't want to spend too much on time on the actual backfix now. So that actually works pretty well. So then I can just use probably get the modified date. So get the modified date for the updated date. Yeah, that looks like that'll work perfectly for us. So I'm going to get copy this out and we'll say updated. And then we'll say get the modified date. Now it's possible that these two might be the same. Let's have a look on this one. Where are we? There we go. Yes. In this case, they are the same. So we might want to do something where we compare the two. And if the one is different, we don't do the updated date. I don't know. Maybe that's something we can discuss in the pull request. So I'm going to leave that for now. That's the limits of what I'm going to do today in terms of code. But that works pretty well. I think that has information there in the pull request we can chat about should we or shouldn't we not show it if the updated value is there. I'm going to grab a quick sip of coffee if anybody has any questions at this point in time. But if not, I'm going to move on and create that pull request. Now, one of the reasons why I want to mention, I mentioned this whole thing about checking the date values and all of that is that this was never really discussed in the original issue. The request specifically was displaying the publisher of updated value. I do think it makes sense to only show the updated value if there's been a change. But I'm not the only person working on this platform. There are many other developers contributors all over the world. There's the whole training team. So I would like to get their inputs on whether or not we should do that. So I feel like the best way to do that is to commit this code is what I call a draft pull request. And then in the pull request, I can ask those questions. And then as a community team, we can decide how it should work and what it should do. So that's why I'm going to commit the code as it is now and then open up that question. I probably also should do something along the lines of checking if the date value gets a value. I should maybe do something. I don't know. So that's another question I might have. But for now, I feel like this is enough to submit this. So I'm going to pop this in. That's the other reason why I don't want to do this on tutorial, sorry, on lesson plans and courses yet, because if there is a decision made about how we're going to do this, we're going to need to make that change all over. So that's why I'm going to leave it for now. All right. If I switch back to my terminal and I run the following command, I'm going to just clear this one out. I run git status. It will show me that I have made some changes. It will also show me that I'm running on the trunk branch. I don't want to be on the trunk branch. I want to be on my branch for my issue. What's great about git is if I haven't committed these changes yet, I can now create this branch for me, for myself. And the other URL that I wanted to share with you today, this is one that I use every single day of my life. It's one that I created for myself. It's one that resides on my own personal blog. And it's a quick guide to some everyday git commands, because I can never remember all of them. I have, under the about section of my personal blog, I have a little random access memory page or my RAM. And in my RAM page, I have all the things that I use regularly that I have to refer back to regularly. I just knocked my microphone out the way there. And the very first one at the top, as you can see, is the guide to everyday git commands. I can never remember what the command is to create a new branch. So it's this here. It's git checkout minus B. And it creates the new branch for you. And you give it the new branch name. So I'm going to copy that command git checkout minus B. And I'm going to pop that in over here. And then I want to give this branch a name. And as I mentioned earlier, the name will be the issue plus a short description. So the issue itself, let's go back to this one over here, I'm going to call it 1464. So I'll say git checkout minus B, 1464. And then the name I'm going to call it is maybe adding dates or adding published and updated dates or something that just describes the bug. So in this case, I'm just going to say adding dates. So that's now created the new branch and switched to that branch. If I get status now, I see that I'm on the 1464 adding dates branch. And I still got that file that I modified to change. I can also run git diff. Let me clear this screen so we can see it on screen. I can also run git diff, which will show me the changes that I've made in my terminal. This is handy to make sure that I'm making the changes that I want to make. So there we will see the list items that I added. It looks like the tabbing is a bit weird. So I'll fix that up before I submit the final pull request, but at least that code that I did create right now is there. So then I tend to run git commit minus a, which will commit all the changes that I've just made. You can commit individual files. So I could run git commit and then the path to that file. I tend to run commits every time I make a change. So I can just go git commit minus a and it'll just commit whatever changes I want to make. I tend to try and work on smaller commits if I can. So if I go git commit minus a, that will then commit all the recent changes that I've made. In this case, it's just this one file. Then I like to give it a title. So I will say adding published and update dates to tutorials. And then I like to include some content. So I like to say something like fixes or at least maybe not fixes work in progress because I'm still working on this. And I like to add the, where is it? I like to add the issue in the commit. So I say work in progress and I go hash the issue numbers. So tags that issue in GitHub. And I will say working to add published and updated dates to all learn content. And then I usually, I usually won't add something like that. Usually what I'll do is I'll write something that's specific to this change. So I'll say adding the published and post modified date to tutorial content. So specifically to that content. And I like to try and give it a bit of a description. If it's a bit more of a, if there's a bit more work involved, I'll add some more detail to that. But I like to try and give as much of a description as I can. And then I will control X down the bottom here. This is control X. I'm using nano. That's why it's control X. If your terminal uses VI, it'll be, I think, a colon Q or W colon Q or something like that. Or colon WQ. I can't remember. I use nano control X to escape. And it'll ask me, do I want to save the changes? I will say yes. And then it'll ask me, do I want to write the commit message? And I'll say yes. Enter to that. So that's committed the changes and created the commit message. Now I need to push these changes to my branch. So I will say get push origin. And then I will give it the branch name, which in this case is 1464 adding dates. Sorry. I forgot to add one. It's get push minus you for the upstream. So push to the upstream origin, which is the one in GitHub. And then that is the branch name. That branch doesn't exist in my GitHub repository yet, but doing this will create that. Now it's going to ask me for my username and password. Now, depending on how you have your Git environment set up, if you're using the... Last week I showed you to clone. Let me go back here. Let me find... Let me go back to my fork. Last week when we forked, I suggested that you fork using the HTTPS URL. When you fork using that URL, it's going to ask you for your username and password every time you push commits. You can also use SSH, but you will need to set up SSH keys, which I didn't have time to cover last week. So in the beginning, I recommend just using HTTPS and doing your username and password until that gets annoying every time and then looking into doing SSH keys, which is the same process that I followed eventually. I used to do HTTPS in the early days, and then eventually I just got tired of using my username and password and I switched to using SSH keys. So because I'm doing HTTPS, I need my username and password, which I've got off-screen here. So I'm going to copy the username, which is that, and I'm going to copy my password, which you shouldn't see on-screen, but even if you do, I can just change it afterwards. This is not an important account to me. So I don't mind. Okay. It doesn't, it doesn't paste it. That's great. And I hit enter and it says, okay, and it warns me that support for password authentication was removed a while back. So please switch to doing SSH. So I will need to actually create an SSH key. I'm not going to do that today because that takes a while and you've got to set things up and passwords and all of the cat. But because this is a simple fix to do, what I'm going to do for now is I'm going to copy this code out of here and I'm going to physically paste it into the file in my, in my, I'm going to create the branch on GitHub and I'm going to paste the code there. So let me copy this and in my, in my GitHub repository, and this is what I like about GitHub as I can do this kind of thing. So in my repository here, I can say click on branches and I can create a new branch and I'm going to give it the same name as the one that I have locally. So one, four, six, four, adding dates. There we go. That's my branch. It says which code do I want to fork from? Yes, from my Cycratec load WordPress and from the trunk. That's perfect. So there's my trunk branch. Now if I click on the trunk branch, not the trunk branch, sorry, the one, four, six, four, adding dates bronze. So this is what would have happened if my, if my Git command had run. It would have created this code and it would have pushed my changes. My changes don't exist there currently. So I'm going to go into the WP content and into the plugins directory and I'm going to go into the WP or learn. And then it's inside of this block workshop details, which is in views block workshop details. So views, block workshop details. There it is there. And then here is that code. If you remember this is what we looked at earlier. There is the transcript area. There's the print view area. What's cool about this is I can edit this here. So if I click on edit this file, it'll take me to an editable version. And then I can copy the code that I changed. So if you do have your SSH key set up, you should be able to push from your command line. If not, this is the other way you can do it. I do recommend getting your SSH key set up. If you, if you have the time, it's a bit of a long process, which is why I'm not doing it now. But ultimately the result will be that I end up with this code looking like this. Let's see if I can. I can't have this. It's excellent. There you go. So there is my change there. So there is the updated. There is the published. And I'm going to commit those changes. And then I'm going to add the commit message. So I'm going to say adding, I'll spell adding publish and updated dates. And I'm going to add the same work in progress. Was it one, four, six, four, working on adding publish and modify dates to tutorials. Yeah. I'm going to commit it directly to this branch. What's cool about get up as well as if you haven't created your branch yet, you can now create a new branch if you need to. So that's another way you can work on it. So let's do that and commit those changes. All right. Now with those changes done and this is where I would have ended up. If I had my SSH keys working and I was committing and pushing my code from my terminal, I would have ended up with it sitting in my repository here. And then I would have seen this message. So one, four, six, four, adding dates has recent pushes less than a minute ago. So now I can create my pull request. So if I click compare and pull request. It will start by saying, do you want to merge this into the base trunk WordPress learning repository, which is what I want to do because I want to commit this code to learn WordPress. It'll then pick up that it's from my local code and that I'm pulling it from the local branch. It'll also pick up. And this is why I like to add the titles and the descriptions. It'll pick up the title and the description from the most recent commit, which in this case was the one that I titled. So now what I'm going to do is I'm going to update this and I'm going to say question. When the publish and modify dates are the same, should the modified dates show? And I want to leave that as an open question to the folks who want this yet. Then the last thing that I'm going to do is I'm not going to create this pull request by default. There's a dropdown next to it. I'm going to say create a draft pull request. Now a draft pull request means I'm still working on this piece of code. It means I expect changes to happen. I'm probably going to add things to the lesson plans into the courses later on. If I wasn't expecting to do any work, I would just create the pull request and leave it at that, but I want to create this as a draft because I'm going to do more work on it. So let's create that draft pull request and then we will hit the button. That will create the pull request for us and now it is sitting ready to rock and roll. So if I go to the WordPress learn code base in GitHub and I click on the pull request button, the pull request tab, you will see there is my draft pull request sitting in the list. You will see it has a little button next to it called queued, which means it's still in draft. It's still being done. And if I click on it, then I can see the code. I can see the changes. There is some static analysis that happens on all the code. This basically checks that the code matches certain formatting requirements. It'll probably pick up that there are some tabbing issues in the code. That's fine. We can fix that. But now this pull request is ready to go. So the last thing that I'm going to do is I'm going to go back to that original issue. So let's actually go to the pull request. And this is one of the reasons why I like to link the issue to the pull request is by doing that with the hash, you'll see the issue item is linkable right at the top of this pull request here. And I can click on it and it'll take me straight to the issue. And then you'll see at the bottom GitHub makes a note that it was mentioned in this pull request. So what I'm going to do here is I'm going to say something like I have created a draft pull request to start work on this issue. I have one question about the dates. If the updated date and the published date are the same, should they both be shown? And then I'll have that conversation. We can either have it an issue or on the pull request either way. It doesn't matter. I like to do on the original issue because then I'll get the inputs of Ben as well as Olean who was the original creator of this issue. Okay. And then I'll just leave a comment on there like that. And that's it. Now it will go through a process of either Ben or Olean or myself. If I wasn't the pull request creator coming in, commenting, having a conversation around it. And then once it's ready to be moved, then it'll get merged in. Okay. So that's everything I wanted to cover today. I was thinking now that it might be useful to do a third session, a follow-up session to this and look at how to fix the SSH keys issue with if you've cloned it using HTTPS and now you need to worry about SSH keys, how does that get set up? So that's a follow-up session that I might do. I might also do a follow-up session once some folks have commented on the pull request so that we can actually then see what the feedback was like, incorporate the feedback, look at what the code would look like to compare the two dates. But this is primarily what I wanted to cover about this process. So it's getting the code, working on the fix, creating the branch, committing the branch, creating the pull request, and then waiting for feedback from there. Okay. Are there any questions around any of that for today? That is literally what I wanted to cover today. So we're a little bit shorter than I expected. But are there any questions at this point in time? Otherwise, we can consider this a wrap for today. Yeah, I'm not seeing any questions in the chat. So I think everybody is happy with what we covered today. The last thing that I would add, and I said this last week, if you are wanting to get this environment set up and you're running into any issues, I can recommend that you join me over in the making WordPress Slack. I'm going to pull that window onto screen now. So inside of the making WordPress Slack, there is a meta learn channel. It's basically where you'll see Elliott and Cynthia over here last week, where all the folks working on the code base can ask questions around how to set things up. So if you are setting this up and you want to figure out and you're not sure how things work, you're welcome to join meta learn and then you can ask any questions there. Tracy says, we'd be interested in the SSHS. And yes, I realize now that would be a good session to do because it is a bit finicky, especially if you're on a Windows machine. So I'm going to need to do some research on how that works. I know you used to be able to push your code with password authentication, but I see that GitHub has removed it on the 13th of August, 2021. So they're obviously forcing folks to use SSH authentication, which is a little bit of a pity. Actually, it's actually going to have a look and see what they suggest as a workaround if SSH keys are the only way. So using the command line, GitHub will ask for your username and password and Git prompts you for your password into your personal access token. Okay. Alternatively, you can use a credential helper to get credential manager. Password base authentication for Git has been removed. So we could do the personal access token way as well. I wonder if that's easy to do now. Let's try that. I've never done this managing your personal access tokens. Let's see if I can create personal access. We've got some time. So let me see if I can figure it out now. Let me go into my account and let's see if I can create a personal access token. Probably be under sittings. Password authentication. Two-factor authentication. No, I want personal access tokens. Let's see if personal access isn't using passwords, types of access tokens, keeping them secure, creating. Verify your email address. Go to settings, developer settings. Okay. So we will... Settings, developer settings. Does anybody see developer settings? I don't see developer settings anyway. Oh, there we go. Developer settings right at the bottom. Personal access tokens. There we go. Fine-grain tokens. Fine-grain tokens. Okay. We don't want the REST API, so let's create a new token. And let's say get HTTPS access. We'll make it 90 days. Allow me to push Kermit from my terminal. I'm just going to say public repositories for now. That's fine. And account permissions. And I don't know. I'm going to need to check that. More reading. Admissions. I wonder if it's under the... It doesn't say yeah. I'm just going to go with directionless plan, private profile, signing keys, starring, watching. Oh, dear, oh, dear, oh, dear. It says here for using GitHub HTTPS, so that might be good enough. I'm going to take this table screen because it's probably going to generate the token for everybody to see, so I don't want that. So give me one second here while I just move some things around. So let's create this token. Okay, it's generated the token. I'm going to copy the token. And I'm going to paste it into my notes over here. And then I'm going to go back to the screen. You can't see what I'm doing right now. Sorry, folks. Let me just hide that. There we go. Okay, so that's done. So there we go. I've created that token, that get HTTP access token. And I've stored it off screen so that folks can't see it so that nobody can try and push to my repositories. So now I'm going to try and push again and see if the personal access token works. Now it's probably going to give me an issue because I've made the changes live. So let's see what happens. So the username is my username and the password. We want the personal access token. See if this works. Okay. Permission denied. I've probably done something wrong. But that looks like the process to do it is to create this fine-grained token. I'll need to do a little bit more reading. But well, maybe that's a good session we can do just as a separate session. So setting up SSH or using the personal access tokens. Maybe I'll just do a workshop on managing Git from the terminal as a whole separate thing. Okay. Hi folks. Just a quick update video here. I managed to figure out which permissions were needed to enable me to use my personal access token. First of all, to note that in the workshop I was using the wrong username for GitHub. I was using the email address instead of my username which I'll show you here in a second. So the username for this account is the Cycratic username. So that's the username I need to use. And then I need to edit the permissions for this personal access token. You can either select all repositories, sorry, all repositories or you can select specific repositories. I've left minus all. And then the two permissions you need are the contents permission. You need to set that to read and write because you want to be able to write changes. When you set that, the metadata permission is also set to read only. So those are the two things you need. And then once you have saved those permissions then you'll be able to use your GitHub username and your personal access token to push your changes using the HTTPS method. Okay. Thank you all for joining me. I hope that was informative at least. If you are interested in committing code or contributing to code to the WordPress learner repository do feel free to reach out to me at any point in time. I'm just trying to get back to where that was. I've opened up so many tabs now. I'm going to do it this way. So if you need all that information, it's at github.com. WordPress, forward slash WordPress, forward slash learn. If you want to see the requirements to set it all up, it's in that WordPress TV URL I shared earlier. If you have any questions, feel free to join me in the MetaLearn channel which is not that window, it's that one. And if you to join that channel you need to have a WordPress.org profile and access to the Slack account to get the profile. You go to where is it? WordPress.org. Just find it here quickly. I had actually had it in the slides for last week. Now I'm not going to find it, am I? I think if you go to make WordPress it'll take you there. So let me just log out of this one here and then we can log in again and get it. There is the register button there. So that's the URL login.wordpress.org forward slash register. That's where you can create your WordPress.org profile and then if you need a Slack account it's chat.wordpress.org that will take you through the process of setting up your Slack profile and then you can join us in the MetaLearn channel and you can ask any questions there. All right. If there are no other questions or comments I want to thank you all for joining me. I hope that was useful and informative. I'll look at doing that get session sometime soon but otherwise I look forward to seeing you all next week when we'll pick up our usual Thursday workshops. Tomorrow if you're around this time the folks at the WordCamp US Contributor Day trading team are having a online meetup. So please do consider joining that. I will be there. It'll be the first time in a long time that I can join a workshop as opposed to hosting it. So that'll be fun but please do consider joining us there. Otherwise enjoy the rest of your Wednesday and enjoy the rest of your week. Bye-bye.