March 13, 2014

For episode 15, we discuss the many new enhancements coming to WordPress 3.9 to be released next month as well as things we’ve been working on.

Show Notes:

Photo credit: michael dornbierer

Transcript
PIPPIN: Welcome to Apply Filters, Episode 15. I’m Pippin Williamson, your host, along with my cohost, as usual, Brad Touesnard.

BRAD: Hey, everybody.

PIPPIN: Today we’re going to talk about — do our usual — talk a little bit about what we’ve been working on recently, some of our recent projects, and then we want to jump into WordPress 3.9 Beta, which was released a couple of days ago and has a couple of really cool new features, as well as some new developer tools that are pretty slick. So why don’t we go ahead and start with Mr. Brad. Take us away. Tell us what you’ve been doing recently.

BRAD: Not much. Just kidding! Busy as hell, as usual.

PIPPIN: Yeah?

BRAD: Yeah. Again, just kind of refining the renewal process because my renewals are coming up for Migrate DB Pro, and so I was working on an automatic login kind of system.

PIPPIN: I think I remember you mentioning that in a tweet or something somewhere. Maybe it was in another conversation we had.

BRAD: Yeah.

PIPPIN: Tell me about that. I’m intrigued.

BRAD: Yeah. So, well, the email, the renewal emails say, you know, renew now or whatever. And, I don’t know, you get these emails for other things that you’re subscribed to. And, oftentimes, when you click on them, you have to log in, and then you don’t have your password because you’ve forgotten it most likely, unless you’re —

PIPPIN: And then you drop out of the renewal process.

BRAD: And then you give up or, you know, someone interrupts you, and you forget what you’re doing or whatever. So I’m making this super simple. If you do a forget-your-password thing anyway, what does it do? It sends you an email, right? So there’s no security problem there if you just allow them to automatically log in.

PIPPIN: Right, because you already have access to the email inbox.

BRAD: Exactly. Exactly. Correct.

PIPPIN: It’s the theory that if a hacker or somebody malicious has access to that, well, they have access to anything they want anyway.

BRAD: Yeah. You better — I mean, you better have, you know, two-factor authentication set up on gmail, right?

PIPPIN: Yeah.

BRAD: If you don’t have that right now, I would suggest you do.

PIPPIN: So this auto login, is it the idea that when they go, when they click on the renewal link, it automatically logs them into their account so they can purchase easier?

BRAD: Exactly. Yep. And so you’ll get —

PIPPIN: That’s pretty cool.

BRAD: Yeah, you’ll get dropped off right at the checkout and, just a couple clicks later, you can be done.

PIPPIN: I would be really interested to know if this is something that you can test. Do some A/B testing with it where you have, say, half of your users get the non-auto login URL and the other half do, and then look and see what the difference is.

BRAD: Yeah. You definitely could.

PIPPIN: I mean, obviously it’s something that you’re not necessarily — you don’t necessarily really want to play with because you know that you’re probably putting money down the drain.

BRAD: Yeah.

PIPPIN: But it would be really fascinating to know.

BRAD: It would be. But, yeah, I’m not willing to do that. It’s like —

PIPPIN: If you ever decide that your pile of gold is too large and you want to test it, let me know.

BRAD: Yeah. Usually with A/B tests, you don’t look at something like, well, let’s try to make this worse —

PIPPIN: Right.

BRAD: — and see if it’s actually worse. Usually it’s like, let’s try and make this better, but test that it’s actually better.

PIPPIN: Oh, no. I know. I know. It still would be a cool, cool stat to know.

BRAD: Yeah, for sure. If you didn’t have a system, an auto log in system, and then you implemented it, that would be great.

PIPPIN: See, so that’s what I have right now because I don’t have an auto login system. So for me it would be really useful to go ahead and implement it and then say: Okay. Here’s our renewal rate before. What is it now?

BRAD: Yeah. And you never know with these things. There could be something that you could never even imagine. And for some reason the auto login might be worse. You know what I mean?

PIPPIN: True.

BRAD: So that’s why you do the A/B testing. Right?

PIPPIN: Yeah. Anything else you’ve been working on?

BRAD: Yeah, so for Migrate DB Pro, we were looking at ways to exclude plugins from loading on certain requests, which sounds crazy, right? So the way

PIPPIN: Walk me through that.

BRAD: So Migrate DB Pro makes ajax requests to accomplish the migration, right? And so each one of those ajax requests loads like everything for, you know, WordPress Core and all the plugins and your theme, everything.

PIPPIN: Right.

BRAD: Right? Which is a lot of overhead for each request, especially since we’re

PIPPIN: So is the idea to create like a short load process?

BRAD: Kind of. What we figured out is that we could have a must use plugin in there that basically says we don’t want to load any — like have a list of plugins that we don’t want to load, and it won’t load them, but only for those requests, only for ajax requests. So any request to the site or anything like that, all the plugins still load just fine for those.

PIPPIN: Interesting.

BRAD: So it’s kind of —

PIPPIN: So is that an mu-plugin that when you’re doing a migration, you have to go in and install the mu-plugin and then any request that you make after that will have those plugins excluded?

BRAD: That’s right. Yeah, so what’s going to happen is, you’d be able to check off a little option. And then, when you do that, a little popup will come up saying we want to automatically install this tiny mu-plugin. And if you say okay, then it’ll do that. And cancel, it won’t do that. So it’s like, you know, it’s asking for permission to do that. And the plugin will be bundled with Migrate DB Pro and stuff.

PIPPIN: That’s cool.

BRAD: So it should be — the reason we have to do an MU is because the plugins are loaded so early on, we have to get ahead of it.

PIPPIN: Right.

BRAD: And you need an mu-plugin to do that.

PIPPIN: And the mu-plugins are loaded before normal plugins, right?

BRAD: That’s right, exactly. So that’s how you are able to basically say we don’t want to activate any of these plugins afterwards.

PIPPIN: Right.

BRAD: Yeah. It was an interesting problem to look at and try to solve though.

PIPPIN: Was the ultimate goal here just to speed up request times because of timeouts on larger sites or just trying to improve performance?

BRAD: That’s one thing. But we actually started it because there’s a number of plugins that are repeat offenders that keep getting, causing problems for our customers.

PIPPIN: Right, blocking request or modifying the data in some way?

BRAD: Yeah, and other weird things too.

PIPPIN: Doing other strange things. Sure.

BRAD: Yeah, so we’ve — so this is kind of the first step. The next step will be to maintain a blacklist on our end and basically give them an alert when they have one of those plugins that are problematic and say, “This is a problem plugin. You may want to go disable this for any request to Migrate DB Pro.”

PIPPIN: There are two things I really like about this. Number one is being proactive and looking at these are support issues that we have that are raised by customers. What can we do to the code base to help prevent these support issues in the future? Even though it’s not necessarily a problem with your code, it’s saying we’re going to jump on the gun and account for these issues before they happen.

BRAD: Exactly.

PIPPIN: And I think that’s really cool and, two, is being aware of how your plugin interacts with other plugins and whether that means you adjust your behavior automatically to account for those, those known plugins, or you just simply tell the customer, “Hey, we know that there’s some conflicts here. This might happen.”

BRAD: Yeah, exactly. Exactly. Yeah.

PIPPIN: I really like both of those attitudes.

BRAD: Yeah, I mean, there’s — you know, we try our best to, you know, notify the authors when, and try to resolve the issues with them.

PIPPIN: Certainly.

BRAD: But it’s not always possible to do that. And people have old versions of plugins installed and haven’t updated. So there’s just —

PIPPIN: Yeah.

BRAD: We figure we just need another way of doing, tackling this problem. But anyways, what have you —

PIPPIN: Very cool.

BRAD: What have you been working on?

PIPPIN: Well, a lot of my usual. I’m doing, working on EDD version 2.0 right now, which is coming along. But I’ve had two things recently that I’ve been doing that are kind of outside my normal that I wanted to highlight because they were kind of cool.

Number one, I recently decided to try and install — I have a big, multisite install that I manage for a client. And I decided or they decided they were going to launch another site. But they want both sites to share the same user database so that they can have the same accounts between both sites.

BRAD: Right.

PIPPIN: And this is something I’ve known that you can do in WordPress for a long time. There’s a constant you can define in the wp-config file to set a custom table to be used as a user table, and a custom table to be used as a user metatable.

BRAD: Right. Can you do this —

PIPPIN: And this allows you to have —

BRAD: Can you do this with non-multisite as well?

PIPPIN: Yes.

BRAD: Right.

PIPPIN: Yep, it works the same way for both. In my case, I had both installs were going to be multisite installs, which just complicates things a little bit more, but not too much. The install process is the same. So it’s something I’d never tried to do, and apparently very, very few people try to do it as well because it turns out that right now you can’t do it. It’s literally impossible because there’s a bug in WordPress Core that does not let you go through the install process for the second site if you define a custom user table, which was kind of fun.

But it turns out there’s a ticket in Trac for it with a patch that works. And so I spent like an hour trying to figure out why in the world doesn’t this work? It seems very straightforward. And then, sure enough, I look it up, and there’s a Trac ticket on it, and it’s getting fixed probably for 3.9 would be my guess.

But anyway, so once I got them installed, it’s really cool because your user tables are completely synched between the sites, and so you can add a user on one site, and it’s automatically available on the other site as well. Each site —

BRAD: So does it synch. You just said the two user tables are synched or is it —

PIPPIN: They’re semi-synched. Let me clarify.

BRAD: Oh, okay. So it doesn’t just —

PIPPIN: They’re semi-synched. The user —

BRAD: It doesn’t just share one table.

PIPPIN: No, it does share one table.

BRAD: Oh, okay.

PIPPIN: So the users themselves, like the user name, their names, their email, their user meta, et cetera, is all synched and is identical, but their user roles are not.

BRAD: Oh.

PIPPIN: So the actual role of your user is set on a per site basis, which is pretty cool.

BRAD: Okay. Gotcha.

PIPPIN: So for this one, what we ended up having was two network installs that share the same user base, and then we also have site admins and network admins that may or may not be the same on both sites. But you can define the role that each user has for each site separately.

BRAD: Wow!

PIPPIN: So it’s a shared table, but they’re still slightly separate.

BRAD: Right.

PIPPIN: So that was fun. It was just kind of something I’ve always known that you can do, but I’ve never actually done it. And then once I got it up working and it works beautifully, it’s kind of a fun, little achievement.

BRAD: Right.

PIPPIN: The other thing that I’ve been working on, and this actually goes a little bit into what we were talking about a moment ago is A/B testing. So I’ve recently been playing with a service called Optimizely. It’s Optimizely.com.

BRAD: Yep.

PIPPIN: It’s amazing! It’s absolutely mind-blowing! What they allow you to do is to set up quick and simple A/B test for pretty much anything. They have a little JavaScript snippet they give you that you embed on your site. And then you can go and create an experiment.

Let’s say that I want to A/B test the color of a button on a page or the text of a button. I can simply go into a visual editor, click on my button and say I want to edit the HTML. And then you can — that’ll be a variation. And then you can create another variation if you want.

For me, I ran a test. I have a download button on the EDD homepage. And so I wanted to do a quick test that says, okay, which one is better: download, download now, or free download. And so I created these variations, and then it automatically distributes a version to each user that comes to the site, and then tracks the engagement of the user, the conversion rates, et cetera. And then it will give you all of the data. It’s really cool.

BRAD: Yeah. I’ve played with it a little bit, and it is super cool.

PIPPIN: It’s one of those ones that it’s almost like unbelievable that it’s so simple to do.

BRAD: Yeah, yeah.

PIPPIN: If you’ve ever tried to do A/B testing, and you wanted to try and, like, you thought it was really hard, just go play with Optimizely.

BRAD: Yeah. How does it — do you know how it works? So it’s a little JavaScript snippet, so the JavaScript must change your site, like content.

PIPPIN: It does. It edits the DOM live.

BRAD: Right.

PIPPIN: Before the page is loaded.

BRAD: So when you’re page — your page loads like what your site, like your Web server renders it.

PIPPIN: I don’t think so. I mean, I guess. I’ve never seen it happen though. Like I’ve never seen elements change on a page. So however they’ve done it, it works really well. It also works flawlessly, even with super aggressive caching, which is cool.

BRAD: Right. Like what do you mean super — like —

PIPPIN: Let’s say that you have really aggressive page caching, and so you can’t necessarily modify anything on the PHP level.

BRAD: Right.

PIPPIN: Or the server side level because it’s all page cache and it doesn’t ever hit the server.

BRAD: Right.

PIPPIN: If you have that kind of setup, their snippet still works perfectly because that snippet itself is also cached into the page.

BRAD: Yeah. I mean, if you were going to set up an A/B test yourself just using your own homegrown solution, in that situation with a page cache you’d have to use JavaScript most likely to show and hide things.

PIPPIN: Yep. And so that’s what theirs does. They use JavaScript to do it all.

BRAD: Right. I was going to try setting it up with Google Analytics because they have like a — there’s like an experiments.

PIPPIN: Yeah, I’ve seen theirs. I never played with it.

BRAD: Yeah.

PIPPIN: So I ran a couple of tests. I’ve actually run, I think, five or six now. Some of them were interesting. Some of them gave very little insight. But I did have one that gave a substantial insight that I thought was really cool.

I’ve always known, and I think anybody who is in ecommerce at least has a vague idea of this that the simpler your checkout process, typically the higher your conversion rate is. But it doesn’t necessarily just mean that, like your checkout process in terms of the form that they have to fill out, the customers, needs to be simple, but also means simplifying the environment around the checkout process, so removing distractions from a page. So I ran a simple test.

I want to know, does my checkout form convert better if I remove the navigation from my header. And it did. And I ran it over a course of about two weeks. And so we had several thousand hits to it. And we saw a 1.4% conversion improvement.

BRAD: Wow! That’s a huge —

PIPPIN: By removing the header.

BRAD: That is — in ecommerce, that is massive.

PIPPIN: In ecommerce, 1.4% is huge.

BRAD: Yeah.

PIPPIN: And I ran the numbers to see, like, how much is this worth to me a year, and it was not a small number. And to think that removing the links from my header improves my conversion rate on average by 1.4%, to me, like, that’s amazing.

BRAD: Yeah.

PIPPIN: Yeah, so it immediately validated all of the ideas around A/B testing, and so now I’m having fun going —

BRAD: Do you have numbers for your button change? I’m curious what the numbers were there.

PIPPIN: The button change made a really surprising difference.

BRAD: Really?

PIPPIN: And I do have those numbers. Give me a second, and I’ll actually pull the actual numbers up. I ran three tests. The default one that we have right now, it just says download. And so then I wanted to know what happens if I change it to download now or free download. We didn’t change the color. We didn’t change the position. We didn’t change anything else. I was really expecting free download to be substantially better.

BRAD: Right.

PIPPIN: Nope. It was 12.5% worse.

BRAD: Really?

PIPPIN: And download now was 26.6% worse.

BRAD: That is surprising.

PIPPIN: So the best option there was just download.

BRAD: The concise — yeah.

PIPPIN: This was based off of 1,000 visitors.

BRAD: Interesting.

PIPPIN: Yeah. I thought that was crazy.

BRAD: Maybe that’s — that’s a little bit small, that sample size, but still.

PIPPIN: It is a little small, but I think it’s large enough to give a pretty good indication of where it was going.

BRAD: Yeah.

PIPPIN: It started out, before we got past about like 500, 800 users that had viewed the experiment, the numbers were much closer. And the bigger, the more visitors that we had, the larger the decrease went.

BRAD: Oh, okay. Yeah.

PIPPIN: It got worse and worse and worse the more visitors we had.

BRAD: Right, so you shut it off.

PIPPIN: So it seemed like it was on a pretty clear trend.

BRAD: Right, right. Better shut this off.

PIPPIN: Yeah. Yeah.

BRAD: It’s not doing us any good.

PIPPIN: Yeah. A/B testing is crazy. I don’t remember who said it, but A/B testing makes the smartest people in the room look like idiots.

BRAD: Yeah.

PIPPIN: And it’s totally true. Oh, here’s another one that I ran that was fascinating to me.

BRAD: It’s because the smartest people in the room make logical statements that are often lost.

PIPPIN: And sometimes logic has nothing to do with it.

BRAD: I know! Exactly.

PIPPIN: So I ran another one that I thought was interesting. We had a banner on our extensions page, which is kind of like our main store page that says, “If you purchase three or more extensions, you will get an automatic 10% discount on your order.”

BRAD: Mm-hmm.

PIPPIN: And I always assumed that it worked really well. But I wanted to see, okay, does it actually work? And so I ran an experiment over, I think, two and a half weeks to see. And this was out of 2,500 unique visitors. And it turns out that removing the notice actually improved the engagement on the page. So in other words, it improves the number of people that go and click onto one of the store items by 9% by taking the notice off.

BRAD: What? What is going on?!

PIPPIN: Yeah! It’s crazy!

BRAD: It seems so illogical, right?

PIPPIN: It seems so backwards.

BRAD: Yeah.

PIPPIN: And so this is the kind of thing that I’ve been working on for the last three or four weeks that I’ve just been playing with, and so I’ve got a couple that are running right now. And actually, that three-plus, the extensions notice with the discount is actually still running right now, and so that’s where we’re currently at with 2,500 unique visitors and a 10% improvement by removing it.

BRAD: Right. Huh.

PIPPIN: So anyway, that’s what I’ve been doing.

BRAD: Cool.

PIPPIN: A/B testing is awesome.

BRAD: Yeah.

PIPPIN: And ridiculous.

BRAD: Yeah. I have yet to try it and actually follow through with it and set up some experiments.

PIPPIN: My brother had been doing some testing with their sites, and he was just showing me a couple of the experiments that they did, and it was — seeing a live demo of Optimizely was all I needed to immediately convince me to go purchase a paid account and just set something up immediately. It takes like ten minutes to set up an experiment.

BRAD: Yeah.

PIPPIN: And then you just let it run, and it’s super simple. And in one case it literally increased yearly revenue by thousands of dollars. Ten minutes was totally worth it.

BRAD: Yes. Definitely. It’s one of those things that I keep hearing about and people kind of droning on about, about how amazing it is, and I never do anything about it.

PIPPIN: All right. Tell you what. Today or tomorrow, or some time before the end of the week, do the exact same experiment that I did. Sign up for Optimizely and remove the header or any other distraction that you have on your checkout process and run it for two weeks. And so the next episode when we come back, I want to know what your improvement is.

BRAD: Damn it, Pippin! Fine! I’m adding it to my to-do list.

PIPPIN: All right. Hey, man, you might find out that you literally just increased your revenue by thousands of dollars a year.

BRAD: Damn it, Pippin!

PIPPIN: It’s crazy!

BRAD: Making my website better and making me more sales.

PIPPIN: Well, shall we get onto the actual subject for today’s episode before we run out of time?

BRAD: Yeah, let’s talk about WordPress 3.9.

PIPPIN: Yeah.

BRAD: What’s exciting?

PIPPIN: Well, 3.9 was the beta. The first beta was released like two days ago, three days ago, something like that. And if you’ve been following any of the development for WordPress 3.9, there’s a bunch of really cool things that are coming. This is the first beta, so there are still some things that are a little bit rough, but if you play with it, you can get a really good indication of what is going to be in for WordPress 3.9 and some of the cool features.

The first thing that they have on there — oh, by the way, there’s two really good posts that you can read to go read about what the new 3.9 features are. One of them is on WPBeginner, and the other one is at WordPress.org/news.

BRAD: Right.

PIPPIN: You just go to WordPress.org. You can find it.

BRAD: You don’t even have to read necessarily. There are a lot of screenshots in those posts.

PIPPIN: Yeah. The WPBeginner one has a lot of screenshots.

BRAD: Yeah.

PIPPIN: It’s really easy to see. So the first new feature that they’ve been working on, there’s been a lot of work with the theme customizer and live preview. And this is something that it’s not — I have never really worked with the customizer a lot, but I really like it. And so they’ve added the ability to modify, add, remove, rearrange your widgets live. So if you have a sidebar or any widget area on your site, you can now tweak those via the customizer with a live preview so that you can preview the changes to the widgets before you ever actually apply them, which is really cool.

BRAD: Yeah, that’s awesome.

PIPPIN: It works really well. The interface is pretty simple and intuitive. You can easily just go —

BRAD: I remember when I used to do client work, like the widgets were always a sticky point for customers. They always had the hardest time trying to figure out where to edit this piece of the site and to track down the widget thing, and then to manage the widgets there.

PIPPIN: You know, it probably didn’t help that it used to be a really big thing with themes to have like 20 widget areas.

BRAD: Yeah.

PIPPIN: Which just makes things really complicated.

BRAD: Yeah, and it’s not — you know, it’s not necessarily that intuitive that you would look for the — you know, you’d have to go into the widget thing —

PIPPIN: Right.

BRAD: — because most clients were looking at the page. You know, they’d go into the page menu and find the page.

PIPPIN: Well, I have something that shows on my about page. Why isn’t it on my about page?

BRAD: Exactly. Exactly.

PIPPIN: Yeah, totally.

BRAD: I think I’ve seen plugins that kind of link, that add like a link to the widget.

PIPPIN: Yeah. Or I’ve seen a couple have — like create a widget area on your page, and I think it allows you to actually like apply widgets from the page editor.

BRAD: Right.

PIPPIN: I’m not completely confident on that. I know there are ones that allow you to create widget areas that are specific to certain pages or posts. But I don’t remember if they give you an editor on that edit screen as well.

BRAD: Anyways, this is a pretty big improvement though.

PIPPIN: It is, especially if you like working with a theme customizer, which if you’re a theme developer, honestly I think you should. I know some people have mixed feelings on it. Overall, I like it.

BRAD: Right. Cool.

PIPPIN: The next thing that I’m really excited for, and this is something that we will actually make use of here on the Apply Filters website, is the new ability to have audio and video play list. So in WordPress 3.7, I think, native audio and video players were added. So you could just drop an audio file into your post or page, and it would automatically convert it to an audio player. Well, these have been taken a step further, and you can now have play lists as well, which is pretty cool. So you can, in the same way that you create a gallery of images, you can now create a gallery of audio files, and it will automatically displayed as a play list, and it will show all the track names and the times and allow you to choose each one you want to play.

BRAD: Yeah.

PIPPIN: It’s pretty slick.

BRAD: That is pretty slick. I like the improvement to adding sources for audio and video as well.

PIPPIN: Oh, yeah.

BRAD: If you want to add like a — so, you know, you upload an .mp3, but you also want to add an Ogg Vorbis audio file, you know, for those people that have a browser with Ogg support natively. Then you can just upload it through the uploader, and it just kind of automatically adds in the extra source tags, I guess, that it needs.

PIPPIN: Right.

BRAD: That’s pretty cool.

PIPPIN: It is.

BRAD: Which you had to do manually, you know, before this.

PIPPIN: Right.

BRAD: So it was still possible, but it —

PIPPIN: I used to, when I ran — I have a tutorial series on plugin development on my website called Plugin Development 101, and they would be videos. And I used to go and record my video and then convert it into three different formats, and then upload each one of those individual files to the site into a special meta field so that it would display for all browsers. And it was always a super pain in the ass.

BRAD: Yeah.

PIPPIN: Now I just use Vimeo, which works a million times better anyway. But the fact that it’s now native and that you — pretty cool.

BRAD: Yeah, very cool.

PIPPIN: The other thing is that the UI for creating a play list, whether it’s audio or video, is now exactly the same as creating a gallery. So it uses the really nice Backbone editor.

BRAD: Yeah.

PIPPIN: And it’s just really slick.

BRAD: I like that they’ve also added subtitle support, which is even crazier.

PIPPIN: Oh, yeah, that one is cool.

BRAD: So your video can have subtitles. I wonder if there’s a way — I’ve been wondering this actually since a while if there’s a way, like an official way to add our transcripts to the mark up of the audio player so that, you know, web crawlers and stuff come to the site, they kind of know that this is what the audio file says, you know, because like if Google comes along, the Google bot comes along and reads our post, they don’t necessarily know that the bottom half of our content is what’s in that audio file. Right?

PIPPIN: Yeah.

BRAD: I don’t see that here. Maybe if someone out there knows the answer to that, they can add a comment to this episode.

PIPPIN: Certainly. On a related note, the tiny MCE, a.k.a. the visual editor for images and other media, has been dramatically improved. And this one is probably my favorite enhancement to WordPress 3.9. I’ve been watching this progress over the last two months or so. I do all of my development on an SVN repo of WordPress Trunk, so I update it every couple days. And so, every now and then, I get a: see these in progress features. And so this one is really slick.

You’re probably familiar with, up until now, if you had inserted an image into a post or into a page, and you want to go edit that image, it’s a little tedious. Normally what you would do is you would just click the red cancel button or the delete button, remove the image, go modify the image in an external editor or make any changes, and then reinsert it. That is so much better in 3.9 now because you can now just click on the image, and it immediately gives you two options.

Number one, it gives you the scaling controls. So you can just drag an image to make it smaller or larger inside of the actual post editor without ever going to any edit screen. And then, two, if you click an edit button on the image, it will actually open up the media manager, the new, the Backbone one, and it’ll give you all of the abilities to edit the caption, the alternate text, change your alignment, change the URL that it’s linked to, change the size, so like thumbnail, medium, full size, et cetera. It also gives you a new option —

BRAD: That’s neat.

PIPPIN: Yeah, it’s really slick.

BRAD: You can also replace the image.

PIPPIN: Yeah. That’s one of my other favorite ones.

BRAD: Upload a different image. Yeah, that’s kind of neat.

PIPPIN: There used to be a plugin called, I think it was, Replace Image, and it did that same feature.

BRAD: Oh, yeah.

PIPPIN: That’s where this came from.

BRAD: Oh, is that right?

PIPPIN: It would allow you to actually replace an image. Well, actually, I think this one is a little bit different. The Replace Image plugin allowed you to actually replace the media file in the library itself. So if you had a new version of an attachment, and you wanted to just swap the file out, but you didn’t want the old one to still be on the server —

BRAD: Right.

PIPPIN: — but you wanted to use the same name, that plugin would allow you to do that. This one, I think it will just replace the image that’s used in the post content. It won’t actually replace the file itself.

BRAD: Okay.

PIPPIN: But it’s still really slick. And then the other thing that’s really cool with this is that, so WordPress for a while, since 3.1, 3.2 maybe, has had the ability to actually edit the image files themselves, so crop it, scale it, rotate it, et cetera. And that all used to be done via the, is it, attachment.php page, I think — post.php. And so it’d be like a post editor, but just for the image. And now that can all happen in line in the Backbone popup, so you never leave the post edit screen —

BRAD: Right.

PIPPIN: — which is really slick.

BRAD: That is cool.

PIPPIN: Yeah. Media is getting a lot better in 3.9.

BRAD: Definitely.

PIPPIN: I think media improvements have been a really consistent improvement over the last five or six WordPress versions. I mean, ever since they started revamping the media manager with Backbone and getting rid of ThickBox, every major release since then has had a really nice iteration on improving media.

BRAD: Right. I’m looking at 3.9 right now, and I’m seeing formats in my sidebar. Is that —

PIPPIN: Formats like post formats?

BRAD: Yeah. Where did that come from? Is that in 3.9?

PIPPIN: Like the standard post format option?

BRAD: Yeah.

PIPPIN: Like standard … image link?

BRAD: Yeah, yeah. Yeah, that stuff.

PIPPIN: No, those have always been there. Those are since like 3.3, 3.4.

BRAD: Oh, right, right. Right, but you have to add support in your theme, right?

PIPPIN: Right. So you may or may not see them depending on the theme that you have active. If you’re looking at like 2012, 2012 has support for them.

BRAD: Right. That must be why.

PIPPIN: Yeah.

BRAD: Yeah. And I was — yeah, I was thinking of the new UI that they pulled out as well.

PIPPIN: Right.

BRAD: Yeah. I think there’s a plugin that you can still get that back, can’t you?

PIPPIN: There is. I don’t remember what it’s called, but I’ve seen it.

BRAD: Cool.

PIPPIN: What’s the other, some other stuff that they’ve added that’s new? I believe you have something coming in 3.9, right?

BRAD: Yeah.

PIPPIN: Tell us about it. Those are pretty cool.

BRAD: My first actual contribution to WordPress Core, actually. It’s so when you make a call to add image size function, there’s the third parameter, I believe. Is that right?

PIPPIN: Mm-hmm. Yep, the crop.

BRAD: Yeah, usually it, or previously it was true or false, and that’s all you could do. But now you can actually add how you want it to crop automatically. So if, for example, it’s a headshot, you could put in an array that contained top center. And it would crop the image top and center, and actually show the person’s head rather than their chest, which was the previous default.

PIPPIN: Right.

BRAD: The default before was center-center, right?

PIPPIN: Mm-hmm.

BRAD: That’s probably the most typical example of when this is going to be useful. Before this, I had a bunch of code that I would drop in to make this happen, so it’s really awesome that now you can just fiddle with that parameter, and that’s it.

PIPPIN: It’s really slick. It’s definitely one of my favorite enhancements to 3.9 simply out of need and the extra flexibility that it gives. If you’ve ever done a client project or any site for your own that’s featured image heavy or image heavy in any way where you’re showing some image size in the content, you’re always going to end up with some image that just doesn’t quite crop right. And usually, you’re right, it’s like the person’s head.

BRAD: Yeah.

PIPPIN: Like the top of their head is missing or from the neck up.

BRAD: Yeah.

PIPPIN: And so this totally took care of that, so I’m really excited.

BRAD: Yeah. Well, for that situation, you could still use the editor, right, the WordPress Editor to crop the uploaded image —

PIPPIN: Right.

BRAD: — to how you wanted it.

PIPPIN: But it’s the auto-generated thumbnails that are the big one —

BRAD: Right.

PIPPIN: — where this really comes into play. Think of — let’s say that you have a page on your site, a template that’s showing thumbnails from all of these different post items, and it’s just showing the featured image. Those, while yes you can use the manual crop features to set them exactly how you want, it’s really tedious.

BRAD: Yes.

PIPPIN: If you just know that all of your images need to start from the top down or the top right or top left, this is going to be huge for that.

BRAD: Exactly. Yeah. Exactly, and that’s, yeah, that was the common kind of pushback again implementing this, I think, was that: why do you need this? Anyone can just crop using the manual crop tool. But like you just said, if you have got 200 images that all just need to be cropped top center, it’d be way easier if they just automatically did, right?

PIPPIN: I also really like this as an example, an example that shows how perseverance and keep working towards it pays off in the end. I mean, this was an enhancement that was proposed two years ago and finally got committed as a fix six days ago. And so it took two years to get this in even though it’s only like a 20-line patch.

And I think it just goes to show that even if you have an enhancement that seems really straightforward, like if you go back — I would encourage anybody who is listening to go back and read this ticket, which is 19393. We’ll put it in the show notes. Read this ticket for add image size because it really goes to show how discussions about minor enhancements can go in all sorts of different directions.

BRAD: Yeah. Yeah.

PIPPIN: Because there were a bunch of things that were proposed in this ticket, like one of the reasons why somebody was originally opposed to it was because they were thinking of completely revamping the UI for how images are edited.

BRAD: Yeah.

PIPPIN: And so maybe this shouldn’t be done. But it did get done, and that made me really happy.

BRAD: Yeah. There was —

PIPPIN: [Indiscernible]

BRAD: There was a lot of —

PIPPIN: It’s a major first commit for you, like that’s awesome.

BRAD: Yeah. I’m super pumped that it’s in there. And, yeah, we don’t have to deal with like working around the problem anymore, so it’s great. But yeah, you’re right that there’s a lot of, there was a lot of voices that got added to this that were trying to bring the ticket and add to the scope of it, right?

PIPPIN: Right.

BRAD: Which is kind of like attaching extra bills onto a bill to get it through Congress.

PIPPIN: Yep.

BRAD: It’s not going to happen. It’s better if it just remains slim, right, and kind of push it through as it is or don’t. And then start new issues for the other things, you know.

PIPPIN: Yep, absolutely.

BRAD: Yeah, so anyway. Anyway, it’s in.

PIPPIN: A couple other minor notes on things that are coming in WordPress 3.9 that are kind of cool, number one, the load process for multisite has gotten improved. I’m not super familiar with this ticket. I read through it a couple times. I think it improves the performance of how the load process works in multisite, which is cool. The database class is now going to be using the MySQLi database extension.

BRAD: Oh, really? Gees! I didn’t know that.

PIPPIN: Mm-hmm. Yep.

BRAD: That’s a big deal.

PIPPIN: It’s a big deal. The ticket on it is huge. I believe there’s — hold on. Let me load it up real quick — tons of voices on it. Here we go.

BRAD: Gees. Yeah, that’s crazy that I didn’t know that.

PIPPIN: Yeah. There are a lot of voices on it.

BRAD: Yeah. We actually used to use MySQLi in Migrate DB Pro in the very early versions of it because it supported some stuff that we needed to use. And then we abandoned it for other ways to do things. But this is good because it’s all in the title, right? It’s the MySQL improved database extension. That’s what the “i” stands for.

PIPPIN: Yep. That’ll be cool. Auto save has gotten some improvements via Heartbeat. I’m not too familiar with what those changes are, but supposedly they make a large difference in terms of auto saving the Heartbeat, et cetera. There have been some library updates. Primarily, Backbone was updated to 1.1. Underscores was updated to 1.6. And Masonry was updated to Masonry 3. And then it looks like PHPMailer, PLUpload, and TinyMCE all got updated.

BRAD: Mm-hmm.

PIPPIN: Oh, TinyMCE, that one actually is pretty large for anybody that does anything with TinyMCE because it got updated to version 4.0.

BRAD: Right, yeah.

PIPPIN: Which is a pretty large update.

BRAD: Well, it’s even noticeable in the UI. It’s a little bit nicer, I think, it seems.

PIPPIN: It is.

BRAD: Yeah, a little slicker.

PIPPIN: I’m not sure what kind of difference it makes for anybody who is using TinyMCE. There is some discussion in the Trac ticket for people who are using it. If you are using TinyMCE in your plugins or your themes, you might want to go take a look at it. I’ll put a link to it on the show notes.

BRAD: Right. You still have time. We’re still in beta.

PIPPIN: That’s right.

BRAD: Yeah.

PIPPIN: Actually, this is a good point where if you are using it and you have problems, either by 4.0 breaking your stuff or having trouble upgrading it to use the new version or whatever, now would be a great time to jump in on the ticket and put your voice in so that the lead devs are aware of it.

BRAD: Yeah, definitely.

PIPPIN: Because I think 3.9 is scheduled for release in, is it, April or May? I think it’s April.

BRAD: Yes.

PIPPIN: There is an official date set. I’m just not sure what it is.

BRAD: I don’t know. The post says next month, so I don’t know.

PIPPIN: Well, in that case I would say probably April.

BRAD: Yes.

PIPPIN: Here we go. Here’s an actual — April 15th is 3.9.

BRAD: There you go.

PIPPIN: So you have almost exactly one month to help get things fixed or get your updates in for your plugins.

BRAD: Definitely.

PIPPIN: Anything else that we want to throw in here about 3.9?

BRAD: No, I think that’s about it.

PIPPIN: I think that’s most of everything that’s in 3.9. I mean, obviously there are lots of small things. There’s a new — a couple other related functions for the add image size. There’s a has image size and a remove image size now as well.

BRAD: Did you say you have been contributing to this version a bit yourself?

PIPPIN: Yeah, 3.9 is the first time that I’ve — 3.9 is not my first commit to WordPress Core, but it’s the first time that I spent a couple of days actively working on Core. I spent a couple afternoons just working on a bunch of tickets, testing patches, committing some patches, et cetera, and it was really fun. I think it’s something that I want to get more into my daily schedule. Not necessarily my daily schedule, but my weekly schedule. I think it would be fun to be able to set aside one day of the week to be my WordPress Core day to just help work on tickets, both for giving back, but also because I think it makes me a better developer. It makes me a better plugin developer by being more in-tune with what’s going on with WordPress Core.

BRAD: Yeah.

PIPPIN: And by knowing more of how it works. And so aside from just giving back, it also contributes to my daily development abilities.

BRAD: Definitely.

PIPPIN: But for 3.9, I think I — I’ve got a couple of patches that have been committed, and then there were 10 or 20 tickets that I worked on, either just by leaving a little bit of feedback to testing a patch, things like that.

BRAD: Cool.

PIPPIN: But a really kind of fun bug, actually, that I think is in 3.9, it’s a really obscure one, but it’s a little serious. It turns out, like let’s say that you have a plugin. You’re on a WordPress multisite install. This is one of the patches that I worked on, so this is how I learned about it. Say you have a WordPress multisite install, and you activate a plugin on one site of that network. And then, later on, you decide let’s go network activate the plugin.

BRAD: Yeah.

PIPPIN: It turns out —

BRAD: We’ve been running into this with Migrate DB Pro.

PIPPIN: Oh, have you?

BRAD: Yeah.

PIPPIN: Maybe I — hold on. Maybe I should find you the ticket number then. Yeah, so if you network activate it, I think that’s the right way, it turns out that in some specific sequence it is absolutely impossible to then deactivate the plugin after that.

BRAD: Oh.

PIPPIN: Because it completely disappears —

BRAD: Right, yeah.

PIPPIN: — from the subsites. And so I think there is a patch and it works, and I think it’s going into 3.9.

BRAD: Okay, cool.

PIPPIN: But it’s kind of a —

BRAD: Now I don’t think that’s quite what we were running into, but it’s very —

PIPPIN: Okay. What do you run into?

BRAD: It wasn’t a bug in Core. It was a bug in our plugin.

PIPPIN: Okay.

BRAD: I think the problem was that it was showing up in the subsites’ activation lists when it shouldn’t have been.

PIPPIN: Got it.

BRAD: It should only ever show up at the network level, so I think that was fixed in the latest release that went out this week, so it’s done.

PIPPIN: Well, that’s good.

BRAD: Should we wrap things up?

PIPPIN: Yeah.

BRAD: Yeah.

PIPPIN: I think we’re about at that time.

BRAD: Yeah. I just want to mention that if you do subscribe to our podcasts through iTunes, it would be awesome if you could leave a review in iTunes for us. We currently have goose egg reviews right now — zero.

PIPPIN: Tell you what: anybody who leaves a review on a podcast, I will go leave a review on your plugin, and I will test it.

BRAD: Wow!

PIPPIN: And leave a review [indiscernible].

BRAD: Huge.

PIPPIN: So go for it.

BRAD: Nice.

PIPPIN: Also, Miami is coming up.

BRAD: Yes.

PIPPIN: And I believe you are speaking at Miami, right?

BRAD: I am. I was just recently accepted to speak in a couple months in Miami.

PIPPIN: Fantastic.

BRAD: Yeah, it’s pretty exciting. And you’ll be there.

PIPPIN: I will be there, as will a whole bunch of other people. I think Miami is definitely one of my favorite WordCamps.

BRAD: Yeah.

PIPPIN: And it’ll be fun this year. So if you’re in the Miami area, or not in the Miami area and you want to travel, it’s a good one to travel for.

BRAD: Yeah. And you’re speaking too, right?

PIPPIN: Yeah, I’ll be speaking on playing nicely with other plugins.

BRAD: Oh, nice. I’ll be speaking.

PIPPIN: That’s, I think, the title of my talk.

BRAD: I’ll be speaking on — that’s a good talk. I’m looking forward to that. I’ll be speaking on deployment.

PIPPIN: Sweet!

BRAD: So how to avoid ending up with two databases that are very different and then having to merge them together, which is a horrible situation, and just how to avoid that and techniques to avoid that.

PIPPIN: Awesome.

BRAD: So, yeah, I’m looking forward to sharing.

PIPPIN: I’ll be there.

BRAD: Cool. Well —

PIPPIN: All right.

BRAD: I guess that’s it for today.

PIPPIN: Thanks, everybody.

BRAD: Thanks, everybody.

PIPPIN: See you in two weeks.