Geek, Software

Better living through WordPress filters

codex

Every now and then you find an interesting support question in the WordPress forums. A member wanted to take the HTML YouTube oEmbed code and modify it to suit his needs.

It was an easy set of requirements.

  1. Replace ?feature=oembed with ?wmode=transparent
  2. Append add wmode=”Opaque” to the end of the start iframe tag

My solution was to find all of the embeded YouTube <iframe…> tags in the post and modify the_content via a filter with some preg_match_all code.

You can see the code I came up with via this pastebin.com link.

It’s a nice enough solution and really highlights the point I was trying to make:

You do not have to hack existing code in WordPress to get the results you want.

Just use the available WordPress filters to modify the output as you need.

Jan? You do know you got that completely wrong right?

Yes. Yes I do. Well maybe not completely wrong but the code I posted was not the best solution.

I filtered the content because I’m used to playing in that space and it’s so easy to do. But my solution did not work for the person asking because what he was referring to did not output via the_content. He had to add another filter to make it work.

The original question was about how to modify oEmbed output. That’s a completely different filter and using the right one gets you a targeted solution that will work (should work anyways) at any place the oEmbed output is used.

Last year Mika Epstein posted a plugin called Rickroll that does exactly what it sounds like. It takes oEmbed video and replaces it with the Rickroll video.

You can learn a lot looking at other people’s code. It also has exactly what I needed to examine and make the modification to the YouTube oEmbed html.

Here’s the new code in a plugin.

add_filter('embed_oembed_html','mh_adjustyoutube',10,3);
function mh_adjustyoutube( $html, $url, $args ) {
if ( strstr($url, 'youtube.com') ) {
	// Replace ?feature=oembed
	$mh_new = str_replace( "?feature=oembed" , "?wmode=transparent" , $html );
	// Append wmode="Opaque"
	$mh_new = preg_replace( '/\><\/iframe>$/' , ' wmode="Opaque">' , $mh_new );
	$html = $mh_new;
}
// Modified or not return $html
return $html;
}

This has fewer lines, simpler logic, and it is a solution that specifically filters the oEmbed output. It directly addresses the original question and can be used where ever the oEmbed code gets outputted.

You can see an easier to read version via this new pastebin.com link.

The lesson I learned is this: using WordPress filters is a powerful feature but using them correctly is even better.

Standard
Geek, Software

Jetpack Carousel for Themify themes

This is probably documented somewhere but I’m posting it here so I don’t forget (again).

I wanted to give Jetpack’s Carousel module a spin but the built in Themify Pretty Photo lightbox kept getting used instead.

To disable the PrettyPhoto lightbox add these lines to your child theme’s functions.php file.

add_action('wp_enqueue_scripts', 'mh_remove_pretty_photo', 20);
function mh_remove_pretty_photo() {
        wp_dequeue_style( 'pretty-photo' );
        wp_dequeue_script( 'pretty-photo' );
        wp_deregister_script( 'themify-carousel-js' );
}

That will let another lightbox be used instead such as Jetpack’s Carousel. The 20 argument in the add_action() is to make sure my function gets queued after the parent theme function.

Standard
Family, Geek

Just don’t use it one handed

note-ii-phone

I’m not sure how it happened but my blog has been possessed by Android smart phone posts. I’m pretty sure I have an add_filter('the_content' , 'my_function') WordPress post in my head waiting to get out. Or at least a post about a small plugin.

When is a phone not a phone?

After Lily’s Note II came back to life we realized that her phone developed an odd condition. It stopped being able to make or receive phone calls. To fix this we called up Verizon on Sunday and spent way to much time with some nice people trying to make it work.

Did you know that Verizon’s tech support can with your permission remote desktop into your Android smart phone? I had no idea and it’s weird seeing someone else run apps and make menu selections. That didn’t really solve anything and eventually Lily and I were told that they’re escalating her problem to engineering.

Me: Engineering? That’s great, let’s get them on the call.

Verizon Support: Oh no sir. They will call you back in 24 to 72 hours.

That went over well. I asked them to create the ticket anyway and to see if we could visit a local Verizon store and swap out the LTE SIM card as that was suspected to be the problem. That didn’t solve anything but at least we got out of the house.

It’s all part of a Grand Plan, I’m just not privy to it

While at the Verizon store I took advantage of my upgrade option and purchased an iPhone 5. I then had them put my number on Lily’s not-a-phone Note II and she got the new iPhone 5. Seriously, that happened.

Lily and I commute into Manhattan together so as soon as she got her Note II smart phone I was playing with it. It’s got good battery life, the display is fantastic, and with a 1.6 Ghz quad core processor it is fast and zippy. I used it to tether my laptop during out commute and it worked fine. I told Lily that I’ll get one for myself from Costco.

Lily: That’s just not acceptable and we can’t have the same phone. Why don’t you get the iPhone 5?

Me: Sure I- What?? I’ll spray paint the back of it red. You’ll never mistake mine for yours. And I don’t want an iPhone.

Lily: You just don’t understand. Get the iPhone 5 and we’ll switch numbers.

Me: . . .

poor-marvin

I don’t claim to understand but years of conditioning have done me in. In another dozen years I’m going to be like Marvin in RED.

Monday morning I called Verizon back with “Nice one! Now when can you get me my replacement phone?” and on Thursday FedEx delivered it. This new one actually can makes and receive  phone calls.

Yeah but what about the Note II?

It’s a great smart phone. The one I had before it was an HTC Thunderbolt and it’s night and day in comparison. My old phone was giving me well deserved grief and was working very poorly. This one is fantastic and works like a charm.

There is one draw back though. This phone is ginormous. The screen is 5.5″ diagonally but that doesn’t convey it properly. Think of using the iPad Mini as phone  and you’ll get the idea. You have to operate it with both hands or you will either hurt yourself or drop the phone. It’s just too big and my hands are too small.

Standard
he-broke-it
Family, Geek

It’s the CURSE!

I’ve been complaining about my cell phone on Twitter and elsewhere for many months and have been contemplating getting a new phone. My choices have been narrowed down to the Samsung Galaxy Note II and the Motorola Droid Razr Maxx HD.

Lily got the Note II because she likes the big screen and battery life. I was leaning towards the Maxx HD (32 hour battery life!) but the Note II’s 4 core CPU makes the phone really zippy and the battery life is not bad even after abusing it.

So I took her phone with me to drop off the kids at Chinese school Saturday morning. That was her idea so I can see if it’s too large for my pocket (it’s not) and if I like using it (I do).

While there I saw a flower and took out her phone to take a quick snap. The Note II phone was dead. Dead as in 100% no lights, not responding, removing the battery did nothing. Naturally I did what most grown up men in my situation would do.

It’s important to appeal to the general public in case, you know, something unfortunate happens to me.

After getting home and apologizing to Lily profusely we found that removing the battery and SIM card (it’s an LTE phone and does have a SIM card) did bring it back to life.

he-broke-it

This is not the first time electronics have lost their mind around me but I wish my curse would remain localized to things that belong to me.

Standard
Geek

Maybe my phone problem IS my own fault

DSC_6302

I like to play with all of my toys and of course I rooted my HTC Thunderbolt phone long ago. I’ve done the whole gamut and have installed different ROMs including CyanogenMod, the unofficial ICS ROM from Team BAMF, and many flavors of Gingerbread. I’ve used apps that require root privileges, I’ve tethered and played with different radio code to get it all working well.

I’ve also created an unsupportable pile of poo that has been driving me nuts.

The damn phone loses data connectivity all the time. I have to baby it just to be able to read my Twitter feed. The battery life is embarrassing and I feel like my charger has become my lifeline. The phone crashes all the time and has spontaneously caught fire on more than one occasion.

That last part may have been an exaggeration but not by much. As sometimes it happens to people suffering in a crisis someone in my life intervened. Lily spoke those words that made me considered a new path filled with enlightenment:

“This happens to you with every phone you have. Maybe you are doing something wrong?”

She’s a smart woman. I’m lucky to have married her.

She is currently using an unmodified Samsung Galaxy SIII phone and except for the battery life not being as long as she’d like she hasn’t had any problems.

The real reason I hacked my phone (aside from the geek coolness factor) was to be able to run a tethering app. But now with the phone plan I have tethering comes with it at no additional charge. Instead of running a third party tethering app I can now just use the built in one from Verizon.

So last night I undid everything I did to my phone. I un-rooted it, I put it all back to the way it was from the factory and I’m now running the latest Verizon provided ROM on my phone. That includes the radio code as well and anyone looking at my phone would never be able to tell that I did anything to it.

I’ll still beat it to death and see if I can my phone to misbehave. I’ll also still get a new phone when I can as I’m up for getting new one, but maybe I’ll learn not to poke or break the next phone.

Standard