Thanks to Our Sponsor
Watch the Recording
If you missed the meetup or would like a recap, watch the video below or read the transcript. If you have questions about what was covered in this meetup please tweet us @EqualizeDigital on Twitter or join our Facebook group for WordPress Accessibility.
Read the Transcript
>> Amber Hinds: All right, well, we are at 07:05 my time in Central time. So I’m going to go ahead and get started so we have enough time for the audit. I’m going to just make myself sticky here, and run through a few announcements, and then we will get started with the main show.
So the announcements are, of course, if you have not been before, we have a Facebook group called “WordPress Accessibility,” if you search for that on Facebook. It’s a good place to connect with people between meetups, share things that you’re working on, share
things to get feedback, and ask questions. So please join the Facebook group; it’s a great way to connect.
If you want to find upcoming events or past recordings… So everyone, a frequently asked question is, “Are these recorded?” Yes, they’re recorded. It takes us about two weeks to get corrected captions, and then we post up the video with the corrected captions and the full transcript. And that is available on our website at “equalizedigital.com/meetup.”
If you want to get notified when the recording is available and you don’t want to have to go check back, then we highly recommend joining our email list. We send one email every other week, vaguely about, and then some reminders in advance of upcoming meetups. So you should be able to do that right after you leave Zoom. Otherwise, you can join our “equalisedigital.com/focus-state.”
We did also start a podcast. I’m kind of excited about it so I’m giving a shout-out. It’s called “Accessibility Craft.” We do craft beverages and we talk about accessibility, myself and my partners. So if you’re interested in listening…
The other thing that is helpful about that is we are putting up the audio from the meetup recordings, because some people don’t want the video, or they want to be able to walk around their house and fold laundry or something while they listen to it. So we are putting up the audio from meetups on “Accessibility Craft” as well. And that’s “accessibilitycraft.com.”
We do rely on sponsors for this meetup in order to help us cover the cost of the live captioning and the post-event transcription, and creating that corrected captions file for the videos that live on YouTube.
Unfortunately, the WordPress Foundation, told us that they don’t have a regular budget for that, so we’d have to come up with our own budget.
This particular evening like tonight, we don’t have a sponsor, so my company is just covering it. But if anyone’s company is interested in sponsoring meetup, please reach out to us. We can share with you what the information is. We don’t profit at all. We literally charge the sponsors the exact cost that the captioning company charges us. So it’s just because the foundation was, like, “Unfortunately, we can’t provide a budget for that.” So please reach out.
You can contact myself and Paula [phonetic], our other co-organizer of the meetup, at “meetup@equalizedigital.com.” You can also use that email address if you have accessibility needs or feedback for us, if there’s a topic you would like us to cover, or if you’d like to speak. I think we have speakers for the next couple of months, but we’re definitely looking for some for the summer, so please reach out to us there.
Who am I? If you haven’t been here before, my name is Amber Hinds. I am one of the lead organizers for the WordPress Accessibility meetup. I also own a company called Equalize Digital that’s a Certified B Corporation, and we’re really focused on accessibility. It is our passion, and all of the work that we do revolves around it. We have a WordPress plugin called Accessibility Checker that helps you test websites for accessibility problems and provides reports on the admin screen to hopefully speed up accessibility testing and make it a little bit easier for people.
We do have a sponsor for our transcripts after the event. As always, we are grateful to Empire Caption Solutions. They very generously donate their services to us. They take our video, they provide us with an accurate transcript and captions, which if you have never done that for an hour [Laughs], you cannot understand how incredibly valuable that is. Because I am not a fast typer, and it probably takes me three times.
In the very beginning before they decided to come on as a sponsor, we were creating these all by ourselves, and correcting them. It takes a lot of work and so. They do a great job. They’ve been wonderful to work with. They also do audio descriptions and ASL interpretations. And they’re, you know, really great in the community.
You can find out more about them if you go to “empirecaptions.com.” And they’re not super active on Twitter. They’re on LinkedIn. But they do have a Twitter, and it’s just “@EmpireCaption.” So if you want to tweet them a thank you for sponsoring, we always encourage that because we want them to continue sponsoring.
We have two upcoming events that I want to share with you. On Thursday, April 6, at 10 am Central time in the US, we will have Tammy Durden. She is a person who is living and thriving with multiple disabilities. And she’s going to talk about navigating online work with disability. She also consults with other people with disabilities and helps them build online businesses. And she’s going to talk about her own experiences, some of the challenges that her clients have experienced or that she’s experienced, and how they’ve figured out workarounds and how to overcome that.
I think for any of us who are interested in serving people with disabilities, this is a really great
event to attend and get some ideas about maybe roadblocks that might exist in our own businesses or processes or in our software that we can resolve so that it makes it easier for people that are working online with disabilities.
And then, in this same time slot in April, Nick Croft, he’s a developer at Reactive, and also pretty active in the WordPress community, and a plugin developer, is going to be talking about doing responsive color on websites. So his talk will be called, “Dark, light and inverted: A developer’s guide to color modes.” So he will be sharing code and talking about how you can create a website that respects a user’s preference for either dark mode or light mode, setting their operating system and serves them different color schemes on their website.
Apparently, my phone is buzzing so I apologize for that. I will make sure I have the sound turned off.
So, of course, today, we have with us Alex Stine. If you’ve been before, you know Alex, but I’m going to let him introduce himself. He’s a wonderful contributor in the WordPress community to accessibility.
Alex, I just spotlighted your video; if you want to give everyone a little hello and introduction?
Alex Stine: Hello. I mean, that’s pretty much all the introduction I need. I do cloud engineering work; it’s my full-time job, an accessibility consultant to pay the extra bills, and I show up to meetups every now and then. So I have a lot of fun. You can find me around the community, hti, or miss.
>> AMBER: yes. You’re on LinkedIn the most, right? And you’re also on WordPress Slack?
>> ALEX: Yes.
>> AMBER: Awesome. And then I don’t need to introduce myself again. So I’m excited to introduce Jason Coleman. I’m going to pop his spotlight up there as well.
Today, we are going to be doing our live audit for paid memberships pro, which is a membership plugin. I’ll just say, before I let Jason introduce it, that we’ve used it on client sites. I also am very impressed with their commitment to open source, and the fact that they really care about giving back to the community. And one of the things I’m excited about today is that they came and without us even probably, they said, “We want you to test the front end, but we also want to make sure our settings pages are accessible so people with disabilities can use our plugin on their websites,” which I think is really cool because a lot of plugin developers wouldn’t even think or realize that they have to think about the settings pages too. So I love that, and I feel like you all, like, really care about the WordPress community, so welcome.
I going to let you introduce the plugin and where people can go to learn more about it if they want to try it out for themselves.
Jason Colman: Sure. Thanks for that introduction. I’m excited to have open ears and learn a lot as Alex and everyone goes through the plugin. I mean, the website is the best place to get started: “paidMembershipspro.com.” And if you want updates from the business, we post most often on Twitter: @PmProPlugin. And we’re also pretty active on our YouTube channel, posting “how to” videos and stuff like that, but also sometimes getting into the business behind membership sites and e-commerce and things like that.
So thanks.
>> AMBER: Well, thank you. So I am going to stop sharing in just a second. But I’d like to put a little bit of guidelines for the meetup.
So first of all, just so everyone is aware, the goal of this meetup is to give voice to assistive technology users. So I might provide some feedback or guidance, but really, my goal is to allow Alex to speak as the user. And we’re hoping that if you’re posting in the chat, let’s not put aside Alex’s experience as the user. So we just want to make sure that everyone knows that that’s really important.
Secondly, the point of this meetup is not to say, “XYZ plugin, it sucks,” or, like, has horrible problems. Accessibility is a journey. It’s a learning opportunity. It takes a lot of, I think, courage to be willing to come up here. And so we just ask that everyone not bash. Remember, this is about providing actionable positive feedback for the plugin developers. And I hope that we would all leave here applauding them for their interest and willingness to get up and learn, and make their product more accessible rather than saying, “Oh, this thing is bad.”
So those are our two guidelines. I’m going to stop sharing, and I’m going to let you go over and start sharing, Alex.
>> ALEX: OK. So don’t be alarmed, I won’t make everyone listen to feed. It is a little excessive for beginners, I think. Yes, we’ll try it at 50%.
>> AMBER: Alex, I’m wondering if it might be better for us to go a little bit slower, like, 45. Just because I want them to at least in the after video [inaudible]
>> ALEX: This is so painful.
>> AMBER: I know it’s really slow for you. The other question I have is, if you’re able, do you think you can open the speech viewer? All right, and that’s actually in a decent position, so.
>> ALEX: So then we better just pray it stays there.
[laughter]
>> AMBER: So just for everyone’s background, we have a staging site that has paid memberships pro set up on it. And we have a few items that that paid memberships pro team has indicated to us. So we’re going to start. And the first one, Alex, was they were interested in you going to the pricing page, viewing a membership, and purchasing it.
>> ALEX: We’ll just see if we can find the pricing page using some basic link navigation. Here’s our pricing link. We’ll find the first heading on the page, so we don’t have to look through the navigation. The heading level one, as it should be, is in the main landmark. Landmarks are just another navigational function of screen readers.
So the first minor problem we have is a link that says “Select.” In the grand scheme of things, you can figure it out with context if you look at the surrounding text. But where vague links really become a problem is in this situation.
So we have three select links, but they’re not actually telling you what you’re selecting. This is the elements’ list. So this is another way that users can get an idea of what’s going on on the page.
>> AMBER: Can I chime in for one second, Alex?
>> ALEX: Yes.
>> AMBER: And then ask you a question? So obviously, we sometimes get into a spot where they only have so much space on a button, which is how this link is styled. So your recommendation on this, I’m assuming, is either an ARIA label or hidden screen reader text within that link that says “Select Professional memberships”, or “Select beginner membership.” Would that be what you’d like to see?
>> ALEX: Exactly. ARIA labels are perfectly sufficient now. They used to not be, but they are now.
>> AMBER: Awesome.
>> ALEX: Having these memberships are very easy to navigate. So about the enhanced membership, I mean, everyone always likes the most expensive ones.
So we have a heading three after a heading one. We’re going to want to correct this to a heading two. We have a link or change. We’re going to want to add context here to say what we’re changing. I’m not actually sure why that’s so verbose. I guess it’s just text, but actually, it adds reading time. So price colon: $45 per month, much shorter to the point.
>> AMBER: There is a discount code you could try if you want, it’s A11Y. Are those key-sensitive, Jason?
>> JASON: Shouldn’t be.
>> AMBER: OK.
>> ALEX: OK, that was rather interesting. So two notes. If the link opens a form, then it should actually be a button because it’s an in-page action. And there is definitely something going on with the focus event here because it probably shouldn’t have read the page title twice. My guess is this focus was called after some type of animation.
>> AMBER: yes, the field was hidden. And then when you click the link, it made the field visible.
>> ALEX: I have an “Apply” button. It would be even better if they said “Apply discount,” just so we’re really clear about what it does.
>> AMBER: So a visual message appeared, which was, “The A11Y code has been applied to your order.”
>> ALEX: So this would be a perfect scenario for the alert role or an aria-live role that reads this message, “This discount has been applied”, or else I’m going to sit here and wonder what happened.
OK, do these values matter?
>> AMBER: So I’m wondering if you want to first try and submit the form without filling in all those required fields to see the ARIA. But right now, these are good labeled fields, right?
>> ALEX: No. So there is nothing that tells the screen reader user that any of this is required.
>> JASON: Interesting.
>> AMBER: Oh, you’re right. It didn’t say “required,” did it?
>> ALEX: Yes, so as far as screen readers are concerned, all this can be left blank.
>> JASON: How would we tell the screen reader that field is required?
>> ALEX: You have two options. You have the required attribute, which is from the html5 spec, it will enforce html5 validation. So that’s kind of nice because then you don’t have to mess around with managing focus with accessibility. It’s all handled natively for the most part. And if you would rather keep that control in JavaScript and do validation yourself, you can use our aria-required equals true.
>> JASON: OK.
>> ALEX: And that only allows it for the screen reader and doesn’t html5 validate.
>> AMBER: I just put a link in the chat that goes to the W3schools that shows what “required” would look like on an input.
>> JASON: Perfect.
>> ALEX: So, unfortunately, what we’re seeing here is just a side effect of using Stripe. Stripe knows that they have accessibility issues with their frames and they do nothing about it, so.
>> JASON: Is that true of, like, the Stripe checkout, when you click and go to stripe, is it any better, that version of stripe? Do you know what I mean?
>> ALEX: I don’t believe it is.
>> JASON: OK.
>> ALEX: I mean, it might be if it’s not wrapped in a frame. Frames do strange things with screen readers. they are best avoided if you can. But yes, this is just one of those examples of something that would be a really great example of things that could have lasting change if companies would just take responsibility. Because there are countless websites that use this.
>> JASON: Yes.
>> ALEX: So that button has an icon that needs to be hidden. As we can hear, the screen reader does not appreciate it.
>> AMBER: [inaudible].
>> ALEX: But we’ll try to submit. Silence. So we get that message, but it’s not announced until we go and look for it. It doesn’t move our focus back to the field, it’s not complete. Although I’m not so sure if that’s even anything you can fix considering it’s Stripe. But one would think that it would at least mark some errors for these fields.
OK, so there is another error all the way up there. So I think that’s probably one takeaway; error/success message communication can be improved.
>> AMBER: So do you want to try and check out? You’ll have to fill in a lot, sorry. But I can tell you which fields are actually required.
>> ALEX: OK.
>> AMBER: So the username and password. So I think this is required.
>> JASON: Yes.
>> ALEX: Are we going to be checking emails?
>> AMBER: No, you use a fake email address.
>> ALEX: I know no one here would send me spam emails.
>> AMBER: [laughs] It is going on YouTube.
>> JASON: This is optional. The full billing address should be optional as well, except the [inaudible].
>> AMBER: I might have changed that because I wanted to see your billings. So you might need to put, like, a fake address in there.
>> ALEX: Which city should we use today? How about Nashville? Everybody loves Nashville. I hope it doesn’t check this.
>> AMBER: I don’t think so.
>> ALEX: Is that required?
>> AMBER: No. So this should work with this 4242 repeated.
>> ALEX: All right, how many more?
>> JASON: Eight more.
>> ALEX: [inaudible].
>> JASON: Eight total numbers. So 42 two more times, then you’re good.
>> ALEX: [laughs] Any date in the future?
>> JASON: Yes.
>> AMBER: Any date in the future.
>> ALEX: I don’t even know what this month is.
>> AMBER: Just put it, like, 12/24. [crosstalk ]. Oh, no.
[crosstalk ]
>> AMBER: OK, so there was an error. Do you want to see if you can find it?
>> ALEX: Yes, but to be fair, I just kind of know where to look for these after a while. Most users would not make it look that easy.
>> AMBER: You might just have to reenter the credit card information.
>> ALEX: Oh, my gosh, that is an accessibility issue for everyone, not just me.
>> AMBER: I suspect that that’s a Stripe thing. I don’t know if…
>> ALEX: Yes.
>> AMBER: You couldn’t do anything about that, right, Jason? Like, when the page reloads, Stripe isn’t going to allow you to keep the credit card info in it, would it?
>> JASON: I think, technically, we could somehow, but for PCI compliance, they don’t want you to do that. But yes, I’m not sure.
>> ALEX: Oh, don’t even get me started tonight on how the federal government is so accessible.
>> AMBER: Did it actually reload the page and it was just fast?
>> ALEX: It did.
>> AMBER: It did reload the page, right?
>> JASON: Yes.
>> AMBER: Is there a better solution on errors to ajax in the errors with an alert and not reloading the page? Because then that might not clear out the credit card information.
>> ALEX: That definitely would be a better solution. Yes.
>> JASON: Yes, I like that. And that could be possible. People request that. The problem is it’s WordPress, and so stuff is kind of infinitely customizable. And so doing JavaScript verification of the fields is possible, but really challenging. But it is kind of on our roadmap. I don’t know if we could talk about this later, but to split the checkup into multiple steps, which simplifies what’s on the screen at one time, and allows you to do better kind of JavaScript-level checking of things.
Definitely, there are ways for the username in particular and the email address to do an ajax. Like, “Hey, is this username available?” And kind of indicates to the user somehow when they sign up, or before they sign up.
>> AMBER: Yes, before they even hit the submit button?
>> JASON: Yes. So there are ways to do it. It’s good to hear that. It’s just like another reason for us to do it is to make it more accessible, you know?
>> ALEX: Well, I’d warn against doing the multi-step approach, because most people get it wrong. They don’t manage focus properly. The user has no idea what’s loaded at any given time. You can get yourself into a whole lot of trouble doing things like that.
>> JASON: We’ll have to get another audit from you before we push that out there.
>> ALEX: Always happy to help.
Is that it?
>> AMBER: Two more.
>> ALEX: Looks pretty good to me.
>> AMBER: Everything’s perfect on there. Awesome. So do you want to view your membership account?
>> ALEX: So we have our heading level three here. Need to change that to heading level two.
>> JASON: Heading orders is very important.
>> AMBER: I want to talk about this for just a second because I think this applies to a lot of plugins. Correct me, but is this a shortcode or a block on this page?
>> JASON: Yes.
>> AMBER: Is that the way this works, Jason?
[crosstalk ]
>> JASON: …shortcode probably right now. yes.
>> AMBER: So what I would recommend doing – because what is hard about this is you don’t know what other content the user might put on the page – is in an ideal world, you have an attribute on the shortcode, or, like, a drop-down on the blocks settings where they can select their heading levels for the various subheadings. Because theoretically, they could put an H2 higher up above this.
>> JASON: I think what happened here is this was coded… I don’t know exactly when it happened or maybe we were slow to do it before it became more standard to have your H1 used as the, like, post title instead of the site title. So that long ago, we just haven’t, like, reevaluated it.
I just worked on a website where that was still the case. It was using an old theme. And changing that is good for SEO and accessibility.
So we should assume H2, it’s more common for how the shortcodes are used, but having a way to override it would be good. And that would be good for folks who maybe have that older theme where they were relying on styling or something else like they had it underneath other headings and stuff like that. That’ll be good.
>> AMBER: Yes. I think just giving users the ability to choose heading levels is really important. On our theme developments, if we build custom blocks, we always try to do that, because you never know how they’re going to use it. [laughs]
>> JASON: With blocks in particular, we might be able to kind of figure it out. So that would be cool. I mean, [crosstalk ].
>> ALEX: All the table has table headings. That’s nice. It works. Yes, I can’t see any obvious problems with this page.
>> AMBER: Awesome. So Kim from paid memberships pro had asked about updating your member profile. So let’s say you realize that you didn’t live in Nashville anymore and you want to go move somewhere else, would you be able to do that?
>> ALEX: Oh, I overlooked these. My mistake. So “Change and cancel” should tell us what we are changing and canceling, and the same for update billing info in a perfect world.
>> AMBER: So again, like, that’ll probably be an ARIA label on the link that’s, like, “Change your membership level.” “Cancel this membership.” Yes. Can people have multiple?
>> JASON: Yes. I mean, it’s possible. It’s not super common, but yes.
>> AMBER: So it would actually need to be, like, “Cancel enhanced membership”?
>> JASON: Right.
>> AMBER: So that it has, like, the name of the membership that they’ve purchased in that.
>> JASON: Perfect.
>> ALEX: So these are not required either.
>> AMBER: Alex, I gave you a thing that you can actually fulfill. [laughs] But there are no address fields on this. So that was a bad suggestion. [laughs]. You can add a company name though or something.
>> ALEX: Rule that under “Update billing info.”
>> JASON: That would update your whole billing address and credit card. [Crosstalk ].
>> AMBER: Oh, so that might be where you would go if you were no longer living in Nashville?
>> JASON: Yes. We’re in the middle… I don’t know if you might like the sidebar, but there are billing addresses, shipping addresses, and mailing addresses. And people are in the habit in WooCommerce as well and also our membership plugin, of assuming the billing address is like their home address, or like just their “address.” So we’re kind of in the middle of updating our code in various places to treat these addresses differently, even though people have been treating them all the same. That’s something Interesting.
>> ALEX: We’ll go back here and just change something random. [inaudible].
My profile has been updated.
>> AMBER: So you’re going really fast. Would it have told you that and then you just move? Like, I was wondering if this one actually was starting to read out.
>> ALEX: No, it’s just the page reloaded and I moved to it. Yes, I didn’t expect anything to get read here.
>> JASON: Do you have the link, Amber, on that feature of how to announce something to the screen readers, but not regular users?
>> AMBER: Yes, I can find that for you.
>> JASON: [Crosstalk ] or aria-live role? So I could Google it.
>> AMBER: Yes, I’ll put that in the chat for everyone. The best links for ARIA that I’ve found, I don’t know if you have a different opinion, Alex, but I liked the MDN Web docs.
>> ALEX: Well, for all the best, yes.
>> AMBER: So there’s the alert role. Let me find aria-live. Oh, actually, that might be on the ARIA alert role documentation. But you can see everything on the left-hand column of that page. It has code examples and all kinds of stuff. It’s really useful.
>> ALEX: So the alert role and then aria-live as an attribute. So it takes a sort of, or polite, and it’s just one constant. That’s used as more like a region that updates with JavaScript mostly. And the alert roles can be a little bit more easy to implement, if you will.
>> JASON: OK.
>> AMBER: OK, so I think it would be good to transition into the admin setting screens, unless you have any other interest in front-end things. Jason?
>> JASON: I think that was the main front-end component. So yes, it’d be great to get to that admin. If you guys are excited too, I’m excited about the admin also, so.
>> AMBER: Yes, I think the…
>> JASON: Deep breaths. [inaudible]. [laughs]
>> AMBER: So you are going to log out of your test user and log back in?
>> ALEX: Oh, the WP admin bar which still remains the best even today. OK.
>> AMBER: So I slacked you a link to [inaudible]
>> ALEX: The link. Got it.
>> AMBER: Let me say something real quick, Alex. So it’s a little bit weird because it’s already been completed because the steps are set up. So you’re loading at the end. So I’m hoping there’s a way for us… Oh, here’s me. I’m trying to drag your speech here. I think that there are…
>> JASON: You can add a… maybe we can [inaudible] on a different link.
>> AMBER: Yes. So there is a link that’s called general info. And if you go to that “general info” link should, it load the first thing that a user will first experience.
>> ALEX: yes, this is why steps are a bad idea. We’re going to get into this here.
>> JASON: Oh, that’d be good. So when you activate paid memberships pro, it’ll redirect you. Yes, the first time you try to use Pm Pro, it’ll redirect you to the screen. But since it was already set up, we had to, like, fake it through the link. And now here. And some stuff will be a little bit different than it is on a brand-new install. But it’s pretty much the same. You’re good.
>> AMBER: Honestly, I’m a little selfishly, like, interested in this, because we’ve talked about designing one of these, right? [laughs]
>> ALEX: Yes. And at the time, I did tell you not to do it. So I was hoping you would listen to my advice.
>> AMBER: [laughs] I know. So why the steps? Why do you not like the steps?
>> ALEX: For this reason alone. So most screen reader users don’t like reading the navigation menu on every page. So we’ll find the first heading on the page, the heading level one.
What is the problem when the user doesn’t know about all those steps that are above them? Well, it’s that. They don’t know they’re there, because…
>> AMBER: What if you have the steps actually after the H1?
>> ALEX: That is where they should be, but probably laid out a bit differently. This is actually a good use case where you should have paid memberships pro as the heading level one. The steps that follow it and the step itself as the heading level two. And then each section contained within a step is the heading level three.
I’m sure there are plenty of consultants out there that would disagree. But also 90% of most users will never look above the main heading for those links.
>> JASON: Hmm.
>> AMBER: Yes that’s interesting. So I do have a question. Theoretically, you don’t need to use those links to move through the steps. I’m assuming when you get to the bottom of whatever this form is, it would just take you to the next one? But is it more that you don’t even know, like, you don’t know how to orient yourself to, “I’m going to have to go through five different screens”? Is that what the problem is?
>> ALEX: Let me ask a better question. Why do you as a sighted person like seeing these steps?
>> AMBER: OK. So for the same reason I just said. I like to know how many screens I’m going to have to get through to finish it.
>> ALEX: Yes. So the information that screen readers would also like to know is pretty much not available to them, because most people just don’t go looking above the main content.
>> AMBER: Yes, especially in the WordPress admin.
>> ALEX: Yes. And the other kind of given to that role is, most of the time, the steps, especially in, like, a tab situation, where there’s, like, tab displays, most of them are not accessible. So that’s another really good reason that most users wouldn’t pay this much attention.
>> AMBER: So Bruce asked in the chat, could you put something like “Step one of five, welcome to your new WordPress membership site” for the headings that you have here?
>> ALEX: You definitely could, yes. And that would actually be perfectly fine, but you’re still left with making the user search for that information. I mean, it takes away the guesswork of knowing how many steps there are, but.
>> AMBER: But it’s better… So the solution is just to make sure the H1 is always above the steps?
>> ALEX: That would be my ideal world, yes. Because if the information is valuable for sighted people, it is probably valuable for us as well.
>> AMBER: Yes.
>> ALEX: That isn’t always the role, though.
>> JASON: Yes. I don’t [inaudible] taking notes. But one thing we thought about when creating the steps was they were first informational of what step you’re on; and then secondary, it’s like, “Hey, if people click on the link, like, let them go there, but it’s not really meant to go out of order.” So I wonder if that would be confusing that they look like links and you can skip around? I guess you kind of can.
So I mean, we did build it in a way that if you skip around it, it only gets slightly confused, the code in the back end.
>> ALEX: Yes. The other thing worth noting is this should be marked up as an actual list. It isn’t. It’s a visual list, some type of visual presentation. And the thing is, it doesn’t actually tell you what step you’re on.
>> AMBER: Yes, so it’d be better if it was actually marked up as a nav menu with an LI and an updated current… like you would on a website navigation.
>> ALEX: That gets really tricky in the WordPress admin because if you have a nav landmark in the main landmark, and if users want to move past the nav landmark, there’s no longer a way to do that because it’s already in the main. That’s why I’ve always told people to make sure that breadcrumbs are just above the main landmark, but not in it.
>> AMBER: Yes.
>> ALEX: It’s definitely an option. But keep in mind that if you have a really long list of steps, that may be detrimental.
>> AMBER: Oh, this is really interesting. [laughs] It’s also kind of like one of those things where there’s not always… like, there are clear ways that are better, but there are things you have to really think about and discuss.
>> ALEX: Yes, that’s why my philosophy has just been, “Don’t do it.” That’s always the easy out.
>> AMBER: So how about the rest of the things here?
>> ALEX: So these fields are not labeled. The surrounding text is read, but there’s no actual associated HTML label for this field. This would be considered invalid.
>> AMBER: Can I say something real quick, Alex?
>> ALEX: Yes.
>> AMBER: So Jason, you have a label up there. It’s just what it’s missing is the “for” attribute and the id of the field.
>> ALEX: Oh, so close.
[laughter]
OK, so this is another really interesting pitfall in accessibility. So when you add “disabled” to a form element, there is no way to focus it without actually forcing the screen reader into a virtual mode where you can see the elements. So right now I’m in kind of an operational forms mode. So it only, via the tab key, jumps to elements that have a tab index of zero. And unfortunately, “disabled” takes it out.
>> AMBER: Yes, so that’s the item above that, which you can’t select.
>> ALEX: Yes, but users don’t get the helpful note on why they can’t select it. They just wouldn’t know it’s there.
>> AMBER: So would it be better to not even show, like, just hide this input completely rather than having it disabled? Like, if it’s not applicable, you don’t need to show it? Is that a better solution?
>> ALEX: The better solution, which requires a fair amount of work, would be to add something like, “ARIA disabled equals true,” and then somehow prevent users from checking or unchecking the box.
>> JASON: OK.
>> ALEX: That’s a lot of work though. But if you want perfection, that’s how it’s done. Because then, the screen reader can still focus this, and they will still get the disabled. Users won’t be able to click it, but they’ll get this little helpful note that, “Hey, this is why we can’t do this.”
>> JASON: Is it overly clever if… Can you just, like, sneak, like, a hidden field in between that only screen readers will see and be like, “Hey, FYI, I just skip this section because it’s disabled”? That’s like overly clever. [chuckles]
>> ALEX: So you actually cannot do that, because what will happen, it could do, is it will also be in the tab sequence for sighted users. So if they press tab on a hidden field, they’ll go, “What happened?”
>> JASON: Yes, it feels like a bad idea in general to kind of… just like when you’re developing for mobile, say, like, “Detect that I’m on mobile and only do this.” And it’s better to just make it look good on a screen that’s small because you don’t really know.
>> ALEX: Yes.
>> JASON: OK.
>> AMBER: Yes. So probably just don’t have the disabled field at all if it doesn’t apply.
>> ALEX: [inaudible] or what? That’s an associative label. Is there anything else on here that needs to be filled out?
>> AMBER: I mean, I think it’s all optional.
>> JASON: Yes, you’re on step two now, right? Or wait.
>> AMBER: Yes we’re still in the first one. So below this, there’s also a link for skipping any link to exit the wizard and return to the dashboard, just so you know what else is on this page. So you could try that.
>> ALEX: See, this is me reading out of forms mode.
>> AMBER: You’re in forms mode right now?
>> ALEX: Yes. We will show the difference. Well, that worked well. So it looks like the checkboxes get red, but the combo boxes definitely don’t.
>> AMBER: Yes, [inaudible] those labels.
>> JASON: They’re probably all programmed the same.
>> ALEX: None of these are actually issues that block anybody from using this plugin though.
Yes, you’re definitely going to need some labeling on these links for context.
>> JASON: Mm-hmm.
>> AMBER: The other thing is, I bet you those links open in a new tab. Like the view docs, they probably opened your website in a new tab. So you’d probably want a warning about that, right Alex?
>> ALEX: Actually, I’ve always been kind of one of the ones on the fence about that. It’s never really bothered me as much. But if it’s really easy to say, opens in new tab, just do it.
>> JASON: OK. Does the screen reader automatically, like, translate that little new tab icon people put at the end of links?
>> ALEX: No.
>> JASON: No, it’ll probably just say something silly. Yes [chuckles]
>> ALEX: Or it just don’t [crosstalk ].
>> JASON: I don’t know what the icon is called. Yes, OK.
>> AMBER: Yes, so you put it, like, on an ARIA label typically, or you can screen reader type, but typically ARIA label.
>> JASON: OK.
>> ALEX: But you want to be careful of those that you make sure you get your spacing right, because if you don’t, you’ll get something like docs open a new window,
>> AMBER: Window space in between. [chuckles]
>> ALEX: Window space. And that is actually more annoying than just links that actually open new windows.
>> AMBER: So I think we talked about editing, like, if you wanted to add a membership level. So you are in the settings now for Paid Memberships Pro.
>> ALEX: A heading two. We’re doing so good.
>> JASON: You skipped the tabs [background noise ].
>> AMBER: Yes, I don’t think you’re at the top of the page.
>> ALEX: Oh, interesting. So that is a navigation landmark. But, again, there’s no heading here, so that illustrated perfectly how you can miss this.
I’m not seeing anything obvious there on where I would go to add a new membership.
>> AMBER: So let me open it.
>> JASON: Do you want me to cheat and tell you??
[laughter]
>> AMBER: Do you want to keep exploring?
>> ALEX: I guess that’s pretty simple, but it feels like this panel might eventually go away.
>> AMBER: Why do you say that?
>> ALEX: Because of the way the buttons indicate the business of moveable widget. I don’t know. This page feels a little weird to me. It’s like it’s trying to replicate the WordPress dashboard.
>> AMBER: Yes, that’s what those are right? [inaudible].
>> JASON: Yes.
>> ALEX: OK. Well, it’s pretty clear where the “View membership levels” is, and where we need to go.
Oh, sorry. Now everyone’s going to get here my phone speak away.
So this page had a heading level one again? Hold on. All right, so…
>> AMBER: That’s OK. My phone did it too.
>> ALEX: Looks like this uses the WP table class, or at least, some form of it. Unless you all actually did make a custom table for this. But either way, it does work.
That’s kind of going to be a problem though. I’m not sure how you’re going to get around that.
>> AMBER: What? Oh, the drag and drop.
>> ALEX: Going to need some menu buttons: move up, move down.
>> JASON: Yes.
>> ALEX: OK, I don’t know where are you going to add a new…
>> JASON: It’s [inaudible]. It jumped right past the links. It’s interesting. I’ll figure out why that’s happening.
>> AMBER: Yes. I’m inspecting it.
>> ALEX: There’s no heading. See, we just keep highlighting this. I’m doing this on purpose. All right. Well, OK, so it’s not up here.
>> AMBER: Alex, there is a link that is the first link after the H1 for membership levels. I can tell you the text on it if you want. Oh, wait, I bet I know why. OK, it doesn’t have an href. It has JavaScript colon add level. Does that make it not focusable?
>> ALEX: It shouldn’t.
>> JASON: Is this coding very similar to, like, [background noise ]?
>> ALEX: OK, so our answer for this is probably going to be CSS. I think it’s hidden somehow.
>> AMBER: OK. Can I say something real quick?
>> ALEX: Yes.
>> AMBER: So Glen Walker in the chat said he thinks it’s a placeholder link. If it doesn’t have an href, then it’s not going to be tagged focusable. I think if you put a hashtag in there, and then you had your JavaScript on it, then it would be focusable.
He did share a link to HTML specs about this in the chat. But I think that’s why it’s not focusable because it has the JavaScript inside the “a tag”.
>> ALEX: Wow, that is…
>> AMBER: If you’re in browse mode, can you get to it and trigger it, just for now to see?
>> ALEX: No. There’s no way to get to that link. I don’t think there is a way to that link. Let’s see.
It shows up here so… Oh, now it’s there. Does it appear on some type of focus event or something?
>> AMBER: So can I tell you what happened? When you triggered that link – so actually, this should be a button, not a link – it opened a modal. However, it did not shift your focus into the modal. It looks to me like you’re still tabbing behind the modal, Alex.
>> ALEX: Oh, yes, I am sure that’s what’s happened, but I’m just really confused as to why the link is now there.
>> JASON: It looks like it’s active, so I don’t know.
>> ALEX: That’s very strange.
OK, so first we had the close link which is not accessible because it’s an icon. All right, I’ll select at three.
Hey, look, “required attributes.” This makes me very happy.
So this description is not read on this checkbox. So you can fix that attribute called aria-describeby. That takes the ID of this description text if it should indeed be associated with this checkbox.
>> JASON: Yes, it’s for the text field above it.
>> ALEX: No, it’s for this. Oh, you mean the checkboxes for the text field above it?
>> JASON: Yes, it’s like the checkbox relates to that text field above it, and then they use placeholder variable messages for the text box there too.
>> AMBER: So the other thing about this is, so this uses I think TinyMCE is like the default classic editor in WordPress to be able to write those messages and the description. Did it clearly communicate to you as you were going through, like, what the first TinyMCE was for, and then what the second one was for?
>> ALEX: About as clear as it’s going to, in WordPress.
>> AMBER: OK, so that’s done the best it can within WordPress, because…
>> JASON: We were talking about tables and this earlier, and this is using table for layout because WordPress lays out some other fields. I don’t know if they still do that on core pages.
>> AMBER: Yes, where the message is in the first column, and then the setting.
>> JASON: Yes. So it’s kind of a table of settings. But we did it just to be as close to WordPress HTML as possible, even though it felt a little icky.
>> ALEX: Well, I approve.
>> JASON: OK, nice.
>> AMBER: [laughs] Yes.
>> ALEX: There it is.
>> AMBER: So how can that announcement to tell you that it was added be improved? Focus on it when the page loads?
>> ALEX: If this is using the admin notices hook in core, there is no real easy way to improve this because core admin notices are not that accessible, to begin with. It’s a project problem.
>> AMBER: What about, like, skipping WordPress notices and using a browser alert?
>> ALEX: That would work perfectly fine.
>> AMBER: Because then it would pop up the browser button and be, like, “This has been successful.” And then they could, like, close that and then be in the page.
>> ALEX: I think most users would find that highly annoying, but it would work great for us.
[laughter]
>> AMBER: Yes. And I guess it depends on how frequently people are coming to these pages and adding new memberships. Do you know what I mean? Like, if you’re doing it all the time, you might find that annoying; but if it’s, like, once or twice, maybe, like, “OK, here’s my success message”, and I close it.
>> JASON: That’s something we thought about too. We moved around our menus and the dashboard, like, a few years ago, and we got some complaints from folks around, like the editing of membership levels being harder to find or something like that. And we tried to emphasize the stuff that site owners do every day, like orders and members and reports, and the stuff that they do once kind of gets de-emphasized.
But still, Alex was trying to find that “add level” button that was invisible and configure out the navigation of the main settings. Those are things that we can improve. But that’s a good point about how often you see that.
>> AMBER: So we have about 15 minutes left. I thought it might be really interesting to go look at your reports tab.
>> ALEX: Oh, yes. Sure.
>> AMBER: Alex, do you want to go find out how much money you made on your website? [laughs]
>> ALEX: And in real life, I’ll be paying somebody to tell me how much money I made. [laughter] Just throwing that out there.
OK, so the first thing to point out is that the heading level one on this page… well, there isn’t one. What the heading level one should be on this page is the page catalog reports. Instead, we have the first title, heading title of…
>> AMBER: [inaudible].
>> ALEX: It’s clear enough, but it would be nice if it said “report” somewhere.
Context is everything. That’s what I tell people. Context is everything.
That is an empty column heading. I would prefer that one to be hidden. It is perfectly accessible.
>> AMBER: I think there is something that is missing, actually, on these, which is if you went to, like, column two, row three, what context would you have for that?
>> ALEX: Column two, row three.
>> AMBER: So you know what, I actually did it. I wasn’t sure if it was going to read out. But no, you do have scopes of rows on your headers there, so that’s great.
>> ALEX: Yes. Tables are definitely not a problem in this plugin. That was the one thing that was consistently done right.
>> AMBER: Well, not the one thing.
[laughter]
>> ALEX: I mean, the one thing consistently with no errors anywhere. Not that this plugin is a mess or anything, because as I said earlier –
>> JASON: I’m not going to lie, this is great.
>> ALEX: – there are no blocking issues that I’ve found in this plugin with the exception of that “add link,” which seems to appear and disappear whenever it chooses to.
>> AMBER: Yes. So most of the problems you found are things that you can work around. They should be improved and made better, but it wouldn’t stop you necessarily from using this plugin.
>> ALEX: No, it would definitely not stop a user from using this plugin. It might frustrate users. But I don’t think we’re at a point where a lot of users would leave a website after encountering this plugin.
>> JASON: Nice.
>> AMBER: Yes.
>> JASON: The next widget, the sales and revenue widget, has, like, clever hide/show things. [inaudible].
>> ALEX: So what are the buttons for?
>> AMBER: So you want to have a more clear label on that. That’s, like, “Expand all sales for today,” or something like that? I don’t know what it does. You haven’t triggered it yet.
>> ALEX: Nothing. Yes, this is really confusing. I would just break this into different sections. It’s not worth trying to make this work in a table. Just one table. Just break this into multiple tables, make this much easier.
>> AMBER: Basically, what it is, is it’s like a table nested in a table, I guess?
>> ALEX: Yes, something like that.
>> JASON: It tries to break it down by price point and show you the individual sales by price point.
>> AMBER: Oh. I thought it was individual purchases. [laughs]
>> JASON: Oh, no.
>> AMBER: So I’ll say that was confusing for me also.
>> JASON: Yes.
>> AMBER: I mean, probably if I like was using it all the time, then I would have gotten that, right?
>> JASON: yes, I think you’ll get a handle on what that is if you’re looking at it every day. But it’s interesting it’s not labeled well, definitely for screen readers or even for sighted folks, like what’s going on here.
>> ALEX: I mean, my problem with this specifically, is if you had hundreds of sales, this is going to turn into a nightmare very quickly.
>> JASON: It does limit to three or five unless you override. It shows the most popular sales price points in that period. But that’s a good point.
>> ALEX: I mean, this could just grow out of control so quickly.
>> JASON: We shared a thing on Twitter. We’ve been running our own site on paid memberships pro for over 10 years. And I did, like, the all-time thing and I forced it to show every single price, not just the top five. And there was, like… I forget what it was, but, like, 30 or 50 different price points that we’ve sold our membership stuff added over. It includes every discount code, every sale we ever ran, and stuff like that. So it’s kind of interesting, and it broke it down and it showed how much we made for each one. It was kind of interesting to see over time.
>> AMBER: Go to the details on this tab. It’s after the table.
So you want to have that link, to be more clear because there are multiple details buttons on that page.
>> JASON: Oh, yes. Contacts and details. [inaudible] general note, to just scan the whole plugin for stuff like that.
>> ALEX: Whoa. You have to love inline styling for fields not. I wish all those were block-level. It would read so much better. And these labels are also not associated, so it seems to be an absolute nightmare to figure out.
>> AMBER: So go below all these filters.
>> ALEX: Yes, I think [inaudible].
>> JASON: This is Google Charts. I don’t know.
>> AMBER: Yes. So do you know what it is, Alex?
>> ALEX: Well, it said it was a chart. That’s about the only useful information I got from it.
>> AMBER: So when you encounter something like this, so this is, like, the ability to see revenue across a month, I think that is what this is currently, would you want to have a verbose paragraph summary? Would you rather just have a table that’s below the chart? Like, what would be most helpful? Or like an “Export to CSV” option, which may be they have as an add-on, right? Like, so you can get it into Excel. What do you think would be the solution for making a bar graph easily understood?
>> ALEX: Definitely a table. And I’m honestly surprised users haven’t already requested “Export to CSV.”
>> JASON: Yes. There is “Export to CSV”. It might be one of those hidden buttons. It’s next to the heading.
>> AMBER: Oh, Yes. Hidden meaning [background noise ] it’s behind the [background noise ].
>> ALEX: Oh, I can focus it with tab. So the link is definitely… It must be something with CSS that you’re doing because it’s in the DOM.
>> JASON: Oh, OK. It might be that JavaScript thing. I’ll play around… because this link is actually an href. And it goes to a URL that kicks off the CSV. The new level one is like a JavaScript that generates the modal and [background noise ]
>> ALEX: It doesn’t even get read by the screen reader until I manually focus it. [Crosstalk ].
>> JASON: That’s interesting. And this, this isn’t a problem. Maybe the CSS is a little different. The HTML is based on the posts table heading, and then there’s a button that says “New posts,” to squeeze that button in. So I don’t know if that’s a problem. If it’s a problem with WordPress, then we can try to fix it in WordPress as well. But I’m assuming when you go to the posts table –
>> ALEX: Oh, no. That looks fine.
>> JASON: – you find that new post button. Yes, it’d be interesting to figure out why it’s different.
>> ALEX: So interesting. There’s already a table here. It’s past the chart.
This table isn’t as accessible as the last one because it doesn’t tell you which state you’re looking at; it just announces the row number.
Yes, so if you brought this table more in line with what you had on the previous page, it should work well.
>> AMBER: So you know what’s interesting? So for us, that visually was the bar chart that you were going through. So I think that’s Google Charts’ attempt to make an accessible bar chart, which actually, having a non-screen reader tested this, I’m really impressed because I was assuming you were just going to get a chart and literally nothing else. Oh, sorry. What were you going to say, Alex?
>> ALEX: We’re going to see if sending screen reader focus through this does something different. No, the tab key skips the whole thing. Interesting. So yes, it’s just pure HTML. No keyboard events or anything.
>> AMBER: Mm-hmm.
>> ALEX: Yes, Google Charts. Not sure about that.
>> JASON: We’ve had folks ask to have these reports inline as a table, and I think we have custom code to do something like that. But I always say just export to CSV. Like, when the request comes in I’m like… [laughs].
>> AMBER: Probably outputting it visually on the page.
>> JASON: Yes. But it sounds like maybe Alex was, like, “Hey, I like CSV. That’s good.” Or if like having some kind of toggle-like table View chart view on here. [crosstalk ] kind of thing. Yes. It’s worth working on. Cool.
>> AMBER: So we’re at an hour and a half mark. Do you have any final questions, Jason, for Alex?
>> JASON: I don’t. Actually, here’s maybe a question. I feel like Alex might have reached out at some point, or we had, like, a really short chat a few years ago about getting an accessibility review. And I was, like, hesitant to do it. We’re hesitant, in general, to hire experts to give us advice on anything, like SEO, because we want to make sure that we’re ready to enact on the advice as soon as we get it. Otherwise, it kind of is a little bit of noise.
Maybe there’s some kind of, like, personal… Like, I was a little nervous, like, you have the roles. And I’m, like, “Oh, my god, I’m going to…” And there are people on social media who talk about accessibility and they’re very kind of fiery about it. And, like, I get where it would come from too.
So this was like a crazy, useful, entertaining, interesting experience. So I’m going to be your advocate and definitely try to hit you guys up for advice when we build the 3.0 features. I forget what we said we were going to do. Oh, the multi-step checkout, yes, which should be optional as well. So maybe that’s an answer too, is, like, make it one page. But that would be good to review and try to make it as accessible as possible later. And also just tell other folks that this is an awesome process and they should come on the show, or hire you guys.
So I appreciate it.
>> AMBER: Yes, thank you.
>> ALEX: No problem.
>> AMBER: Yes. There was, I think, one question a while back, but I didn’t want to interrupt Alex. Let me scroll back and see if I can find it, unless… yes.
So just a follow-up on when you use the role alert, a screen reader will often say alerts. And Glenn was wondering, Alex, if you find that annoying, rather than using a simple aria-live with polite, which will just announce the text. Like, does hearing the word “alert” bother you?
>> ALEX: It depends on the importance. So if they’re doing that every time a page loads, yes, that would become very annoying. But sometimes, aria-live set to polite is very easy to have your speech interrupt that. So if it is a useful error message that you might have just moved to something else and your screen reader didn’t have a chance to read it, then you miss out on the information.
It’s a mixed bag. Don’t overdo it; don’t overdo it.
>> AMBER: And I’ll also just say there were quite a few people in the chat, Alex, saying thank you, and that it was really cool to watch. And someone said, “Thank you, Jason, for having the courage to let him test drive your plugin.” And I second that. And being interested in making accessibility a priority. And I also say your Settings pages and stuff, while there are some things, like, there’s a lot of… I’ve seen plugins where you can’t do anything in the settings stage at all. So I think that’s great.
>> ALEX: I will never come after anyone who wants an accessibility review. But where I’ll start to draw the line is the companies who would knowingly do bad. Like, if they’re brought to their attention and they just continued to ignore.
>> JASON: Yes, so it’s like simple fixes. I mean, this is time… I have a list. There are like 30 or maybe more bullet points in here, and they’re all a little bit. But in my opinion, it’s straightforward, like, not… There was a couple that was, like, “What do we do here? Move it? How are we going to move the H1 above the menu and make it look the same way?” But it’s fairly straightforward. So yes, that’s annoying.
So it’s very popular for folks to use React to build their settings pages? Is that just generally more or less accessible when people are using React as a framework for their pages instead of… We use kind of like the older school WordPress settings format, you know? It’s just HTML generated by PHP.
>> ALEX: React is more accessible in the JS world compared to frameworks. Like VueJS, V-U-E.
>> JASON: OK.
>> ALEX: But as far as more accessible than this? Absolutely not. Oh, my gosh. Developers have no idea what they’re doing in React for accessibility. And I’ll just blanket statement that. I mean, that’s the truth. Nobody knows what they’re doing in React for accessibility.
I mean, there are things that look great visually, and then it just doesn’t translate the, “Oh, that user might not see that up here all the way down the DOM if they’re blind.”
>> JASON: Yes. It’s like the core to React. It is like stuff is updated everywhere, all at the same time. And that’s definitely confusing to screen readers.
>> ALEX: We can do a whole case study and test on Gutenberg to prove that point.
>> JASON: Yes. OK. I feel like an old man sometimes, because I’m, like, “Isn’t just the textbox enough?” Or, “Can’t this just be more straightforward?” Or, like, “Does this really have to be as fancy as they think it is?” And I feel maybe that sentiment that I have, as long as I’m maintaining these plugins will kind of naturally make it a little more screen reader-friendly. And if we do some of these other things you are suggesting, I’m excited about how usable this will get.
>> ALEX: That’s what’s annoying to a point, though. It’s like React itself is not inaccessible. Developers just use it in highly inaccessible manners.
>> AMBER: Yes, well, I mean, that was the thing we were talking about pre-show [laughs], if you will, where over the weekend, I encountered a table that was totally fully built with divs. And it had, like, class of table, class of row, class of item. And I was just like, “Why?” [laughs]
>> JASON: One part of our settings that is probably the trickiest is the user fields, GUI, to add fields. And you shouldn’t get into it, because it probably would just take a while. But on your own time, I will hire you to look into that as well.
Not every site needs it. You can use custom code to, you know, kind of… We started off, like, you kind of have someone code up the fields that you need. It’s also a way to get fields on your page. But there’s a GUI for it. And it’s kind of like the most complicated UI and most recent. So it’d be interesting to look at that later.
>> ALEX: Yes, I can imagine that’s probably very interesting. It probably suffers from a lot of the challenges that used to be on the menus page under appearance.
>> JASON: Right. Yes, there’s just a tonne of stuff. It makes me think, when we think of features, most people will kind of just want this, click this button and you get the common fields. So things like that might help. Anyway.
>> AMBER: Well, thank you both. I really appreciate it. We’ll have the recording for you, Jason. And if you want, I can also get you the chat transcript with all the links that we shared.
>> JASON: Oh, perfect. That’d be helpful.
>> AMBER: I’m going to say goodbye, but I’m going to take a second before I actually hit the end button because I got to watch the captions and make sure that we fully captioned our goodbyes. So we do the smiling and wave and end quietly.
[Waving hands]
So do you each real quick just want to say where people can find you again if they want to follow up?
>> ALEX: You can find me at “Alex Stine” on LinkedIn. And “I am Alex Stine” on the make WordPress Slack. And if have a random slack, it’s here and there.
>> JASON: And I’m Jason Coleman. I’m on the WordPress slack. To contact me personally, Jason_Coleman on Twitter is a good way to poke me. And the plugin is a paid memberships pro. It’s in the WordPress repository for free, and also on the website, “PaidMembershipsPro.com.”
>> AMBER: OK. Well, thank you both. Have a great night, everybody.
[Jason and Amber waving]
>> JASON: Thank you.
>> ALEX: Thanks.
Links Mentioned
- Paid Memberships Pro Website
- Accessibility Weekly – The Admin Bar
- HTML required Attribute
- ARIA: alert role
- Text-level semantics: The a element
- aria-describedby
- Alex Stine on LinkedIn
- Meetup Chat
About the Meetup
Learn more about WordPress Accessibility Meetup.
Article continued below.
Stay on top of web accessibility news and best practices.
Join our email list to get notified of changes to website accessibility laws, WordPress accessibility resources, and accessibility webinar invitations in your inbox.
Summarized Session Information
In a comprehensive accessibility audit of the Paid Memberships Pro plugin, experts Amber Hinds and Alex Stine provided invaluable insights and recommendations to enhance the plugin’s usability for all users.
The session covered various aspects, from navigating the membership selection process and updating member profiles to addressing links and modals, form field accessibility, and admin notices. They also explored the transition to admin setting screens, exploring admin settings and tables, and evaluating reports and charts. Additionally, the session touched on the accessibility of settings pages built with React.
Key findings included the need for ARIA labels for contextual information, correcting heading structures, ensuring proper labels for form fields, using browser alerts for critical messages, and providing accessible alternatives for charts.
The session underscored the importance of continuous accessibility improvements and community feedback, with Paid Memberships Pro showing a strong commitment to enhancing their plugin’s accessibility.
Session Outline
- Introduction to Paid Memberships Pro
- Navigating the membership selection process
- Updating member profiles
- Addressing links and modals
- Form field accessibility and labels
- Admin notices and alerts
- Transition to admin setting screens
- Exploring admin settings and tables
- Reports and charts
- React and accessibility
- Conclusion
Navigating the membership selection process
Alex started the audit by navigating the pricing page to evaluate the membership selection process. He identified that the “Select” links were vague, making it difficult for screen readers to understand what was being selected. It was suggested that ARIA labels or hidden screen reader text, such as “Select Professional Membership” or “Select Beginner Membership,” be used to provide context.
Updating member profiles
Amber and Alex discussed the process of updating member profiles. Alex noted that the “Change” and “Cancel” links should provide specific context about what is being changed or canceled. Amber recommended using ARIA labels to add this context.
During the profile update process, Alex also pointed out that required fields lacked indicators, which could be improved by adding attributes like “required” or using ARIA roles.
Addressing links and modals
Alex encountered an issue with a placeholder link that had JavaScript instead of an href attribute, making it non-focusable. Using a hashtag in the href attribute was suggested to make it focusable. Amber noted that when the link was triggered, it opened a modal but did not shift focus into the modal, causing Alex to tab behind it. They agreed that the link should be a button and the modal should shift focus correctly.
Form field accessibility and labels
Alex found some fields lacked associated HTML labels, making them invalid for screen readers. Amber noted that adding the “for” attribute to labels would resolve this issue.
Additionally, Alex highlighted the problem with disabled form elements, which are not focusable for screen reader users. He suggested using “aria-disabled” instead of disabling the elements to provide context without removing focusability.
Admin notices and alerts
Amber and Alex discussed improving the announcements for admin notices. Alex explained that core WordPress admin notices are not very accessible. Amber suggested using a browser alert instead of WordPress notices for critical messages. Alex agreed but noted that frequent alerts could become annoying. They emphasized the importance of balancing usability for all users.
Transition to admin setting screens
Alex logged into the WordPress admin area, highlighting the efficient WP admin bar. They discussed the initial setup steps for Paid Memberships Pro, which redirected to a setup screen after activation. Alex critiqued the navigation and heading structure, recommending that the main heading (H1) be placed above the steps, with each step marked as a heading level two (H2) and its sections as heading level three (H3).
Exploring admin settings and tables
Alex navigated the admin settings to explore options for adding and managing membership levels. He pointed out that some links and buttons lacked proper labels or were hidden, making them inaccessible.
Amber and Jason discussed the importance of marking up steps as an actual list and ensuring that navigation elements are clearly labeled and accessible.
Alex reviewed the accessibility of tables used in the plugin, noting that some were correctly implemented with scopes on headers while others were not.
Reports and charts
Alex evaluated the reports tab and found it lacked a heading level one. He recommended that the main heading be “Reports” to provide context. Alex also found a Google Chart on the reports page that was not accessible. He suggested providing a table or an option to export data to CSV as alternatives for screen reader users.
React and accessibility
Jason asked about the accessibility of settings pages built with React. Alex explained that while React itself is not inherently inaccessible, developers often implement it in inaccessible ways. He emphasized that React can be used accessibly if developers follow best practices. They discussed the challenges and potential solutions for making React-based interfaces more accessible.
Conclusion
The session provided valuable insights into improving the accessibility of the Paid Memberships Pro plugin. Key recommendations included:
- Adding ARIA labels for contextual information on links and buttons.
- Correcting heading structures to enhance navigation.
- Ensuring form fields have proper labels and required attributes.
- Using browser alerts for critical messages instead of WordPress admin notices.
- Improving table markup for better context.
- Providing accessible alternatives for charts, such as tables or CSV exports.
- Following best practices when using React for settings pages.
Amber, Alex, and Jason’s collaborative approach highlighted the importance of ongoing accessibility improvements and the value of community feedback in creating inclusive web experiences. The session concluded with positive feedback from the audience and a commitment to implementing the recommended changes, demonstrating Paid Memberships Pro’s dedication to accessibility.