Open main menu


MediaWiki extensions manual
OOjs UI icon advanced.svg
Release status: beta
Implementation Parser function
Description Embeds links using the service
Author(s) Jason
Latest version 1
License No license specified
Download See Below
Example {{#embed: your link here}}
Translate the NoEmbed extension if it is available at
Check usage and version matrix.

This extension takes a URL and attempts to embed the content into the page using the service at Many different websites are valid. Check [noembed website] for compatability, or to add more sites.


Grab the source code below. Create a folder in your extensions named NoEmbed. Place following files in that folder. Then in localsettings.php add the line:

require_once "$IP/extensions/NoEmbed/NoEmbed.php";


Then all you need to do is to run the command in the editor:

{{#embed: your url here}}

Which will generate on the page this HTML (dependant on which media provider you are trying to embed). Style the Div elements as you please.

 <div class="noembed-embed ">
   <div class="noembed-wrapper">
     <div class="noembed-embed-inner noembed-vimeo">
       <iframe src="//" width="1112" height="626"     frameborder="0" title="Coming Home" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
     <table class="noembed-meta-info">
         <td class="favicon"><img src=""></td>
         <td align="right">
           <a title="" href=""></a>

Source codeEdit


// Customize your secret key here!
$NoEmbedKey1 = "Here is a secret key!";
$NoEmbedKey2 = "This too is a key. Just in case...";

// Parser to allow easy embedding of media thanks to (great site by the way!)
// Usage:  {{#embed: url here }}
if ( !defined( 'MEDIAWIKI' ) ) {
	die( 'Not here...' );

$wgExtensionCredits['parserhook'][] = array(
   'path' => __FILE__,
   'name' => 'NoEmbed',
   'description' => 'A generic embedding function. Utilizing',
   'version' => 1,
   'author' => 'Jason Dixon',
   'url' => '',


// Register i18n.
$wgExtensionMessagesFiles['NoEmbed'] = __DIR__ . '/NoEmbed.i18n.php';

// Register hooks.
$wgHooks['ParserFirstCallInit'][] = 'NoEmbedSetup'; #grab text from parser
$wgHooks['ParserAfterTidy'][] = 'NoEmbedDecode'; # put it onto the page

// Scramble keys.
$NoEmbedKey1 = md5($NoEmbedKey1);
$NoEmbedKey2 = md5($NoEmbedKey2);

// Register Parser.
function NoEmbedSetup( &$parser ) {
   $parser->setFunctionHook( 'embed', 'NoEmbedURL' );
   return true;

// Encode the html.
function NoEmbedEncode( $html ){
	global $NoEmbedKey1, $NoEmbedKey2;
	$encode = base64_encode($html);
	return "$NoEmbedKey1$encode$NoEmbedKey2";

// Decode the html.
function NoEmbedDecode( &$parser, &$text ){
	global $NoEmbedKey1, $NoEmbedKey2;
	$text = preg_replace( "/$NoEmbedKey1([0-9a-zA-Z\\+].*?)$NoEmbedKey2/esm", 'base64_decode("$1")', $text );
	return true;

// Get embed information.
function NoEmbedURL( $parser, $url ) {
	$encodeMarkers = array();
	$noEmbed = ""; #Url for noembed service

	$result = json_decode(file_get_contents("$noEmbed$url"),TRUE);
	if($result && isset($result['html'])){
		return NoEmbedEncode($result['html']);
	} else {
		return $url;


// Check compatability (todo: get this working)
function NoEmbedCheck( $url ){
	$reg = json_decode(file_get_contents(""),true);
		foreach( $reg as $patterns){
			foreach( $patterns['patterns'] as $pattern){
				print $pattern;
				if(preg_match("/$pattern/i", $url)){
					return true;
	return false;


$magicWords = array();
// English
$magicWords['en'] = array(
	'embed' => array(0, "embed")

Feel free to add improvementsEdit

There are some things I'd like to add, such as universal sizing options. But otherwise the plan is to keep it super simple and utilizing the noembed service, super broad.