Hook/Filter for auto embed function of WP?
-
Hi,
sometimes, feeds do not show the embedded YouTube videos. In that case, I would like to automatically add a small text above the video that says:
“There should be an embedded flash video visible below. If it does not show in your feed reader, please visit the original post to view it.”
As I said, I would like to do that automatically and just when a feed is shown. I managed to integate that into the Kimili Flash Embed plugin. Does anyone know how I can accomplish this with the built-in (auto) embed function of WordPress where you only need the URL or the shortcode [embed]URL[/embed] to embed the video?
I wonder if there is a hook or filter for that function or where that function is being executed during the parsing of the content. Can anyone tell me where in the WordPress source (e.g. file and line number) I can find that function? Is there a difference in the function if it is a normal post or a feed?
Pointing me to the source code should be a great first step, thanks!
-
Not sure specifically what you need, but i’d suggest starting with a look at
wp-includes/class-oembed.phpYou’ll also find references to the embed class in
wp-includes/media.php.Hope that helps nudge you in the right direction… 🙂
Hi t31os_,
I think pointing me to the
wp-includes/class-oembed.phpwas a really good idea… in line 261f (WP 3.0), it says:// You can use this filter to add support for custom data types or to filter the result return apply_filters( 'oembed_dataparse', $return, $data, $url );I’d just have to use the add_filter()-function with
oembed_dataparse. It appears to me as if$datacontains the embed code. I’d just need to add some text before to leave the little note, like$data = "(note....) " . $data, but the problem is that I just want to do that in a feed. Maybe, I can check withis_feed()if a post or a feed is delivered?!I found something similar in the support forums:
http://ww.wp.xz.cn/support/topic/412206But there is another filter in
class_oembed.phpon line 99 as I just found out:return apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args );Could I use that, too, and if so, how?
Correction:
In
class-oembed.php, it says for the functiondata2html()(which provides theoembed_dataparsefilter) on line 233:* @return bool|string False on error, otherwise the HTML needed to embed.So, my solution could be something like this, right?
function add_video_embed_note($return, $data, $url) { /* Do nothing if an error occured while parsing */ if(!$return) return false; /* Add note if it is a video in a feed */ if(is_feed() && $data->$type=='video') { $note_to_add = "<p><small>There should be an embedded flash video visible below.<br />If it does not show in your feed reader, please visit the original post to view it.</small></p>"; $return = $note_to_add . $return; } /* Return the result */ return $return; } add_filter('oembed_dataparse', 'add_video_embed_note', 10, 3);Hmm… could it really be that simple? I have to try that out within the next days – could be turned into a little plugin… unfortunately, I have no time at the moment. Fortunately, I have written down the code here so I will remember. 😉
I’d say try it and see.. 😉
Let me know how you get on..
OK, I’ve tried it, but it doesn’t work. :’-(
Actually, it has to be
$data->typeinstead of$data->$type, I reckon, but that doesn’t make a difference, anyway.Even if I leave the
if-clause out (which leads to the result that the note should ALWAYS be shown, not only in a feed and not only with a video)… the content will not change – THERE IS NO NOTE!What am I missing?
Once again:
I use the “auto embed”-function, which means that I only put the YouTube-URL on its own on a single line – I do NOT use the [embed]-shortcode… but it should be the same, shouldn’t it?I also tried to use a class as suggested here:
http://ww.wp.xz.cn/support/topic/412206No note.
Does anyone know what’s wrong with my code?
After some searching, I found a different filter to use:
embed_oembed_htmlinwp-includes/media.php.Since it does not provide a
$data-object to check wether it is a video or an image, I had to use thestrpos-function to see if the generated html uses theembed-tags.And here is the actual working code:
function add_video_embed_note($html, $url, $attr) { if (is_feed() && strpos($html, "<embed src=" ) !== false) { return $note_to_add = "<p><small>There should be an embedded flash video visible below.<br />If it does not show in your feed reader, please visit the original post to view it.</small></p>" . $html; } else { return $html; } } add_filter('embed_oembed_html', 'add_video_embed_note', 10, 3);You can download a plugin here:
http://www.saphod.net/2010/07/06/auto-embedded-videos-and-rss-feeds/I need to get a title above an embedded youtube video. Is this possible? Can anyone help me? I tried what nootron said to do on http://ww.wp.xz.cn/support/topic/filter-hook-for-built-in-oembed-providers-eg-youtube but it didn’t work. Where do I put that code?
-Thank you!
The topic ‘Hook/Filter for auto embed function of WP?’ is closed to new replies.