Created
February 7, 2012 02:52
-
-
Save chrisguitarguy/1756834 to your computer and use it in GitHub Desktop.
Embed your recent posts anywhere as an iframe!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: iFrame Your WP | |
Description: Allow people to embed your latest posts in an iFrame | |
Author: Christopher Davis | |
Author URI: http://www.christopherguitar.me | |
License: GPL2 | |
*/ | |
register_activation_hook( __FILE__ , 'wpse32725_activation' ); | |
/** | |
* Activation hook to flush rewrite rules | |
* | |
* @uses flush_rewrite_rules | |
*/ | |
function wpse32725_activation() | |
{ | |
flush_rewrite_rules(); | |
} | |
add_action( 'init', 'wpse32725_add_rewrite' ); | |
/** | |
* Adds the rewrite rule for our iframe | |
* | |
* @uses add_rewrite_rule | |
*/ | |
function wpse32725_add_rewrite() | |
{ | |
add_rewrite_rule( | |
'^iframe$', | |
'index.php?iframe=true', | |
'top' | |
); | |
// shortcode for our iframe | |
add_shortcode( 'iframe-code', 'wpse32725_iframe_code' ); | |
} | |
add_filter( 'query_vars', 'wpse32725_filter_vars' ); | |
/** | |
* adds our iframe query variable so WP knows what it is and doesn't | |
* just strip it out | |
*/ | |
function wpse32725_filter_vars( $vars ) | |
{ | |
$vars[] = 'iframe'; | |
return $vars; | |
} | |
add_action( 'template_redirect', 'wpse32725_catch_iframe' ); | |
/** | |
* Catches our iframe query variable. If it's there, we'll stop the | |
* rest of WP from loading and do our thing. If not, everything will | |
* continue on its merry way. | |
* | |
* @uses get_query_var | |
* @uses get_posts | |
*/ | |
function wpse32725_catch_iframe() | |
{ | |
// no iframe? bail | |
if( ! get_query_var( 'iframe' ) ) return; | |
// Here we can do whatever need to do to display our iframe. | |
// this is a quick example, but maybe a better idea would be to include | |
// a file that contains your template for this? | |
$posts = get_posts( array( 'numberposts' => 5 ) ); | |
?> | |
<!doctype html> | |
<html <?php language_attributes(); ?>> | |
<head> | |
<?php /* stylesheets and such here */ ?> | |
</head> | |
<body> | |
<ul> | |
<?php foreach( $posts as $p ): ?> | |
<li> | |
<a href="<?php echo esc_url( get_permalink( $p ) ); ?>"><?php echo esc_html( $p->post_title ); ?></a> | |
</li> | |
<?php endforeach; ?> | |
<ul> | |
</body> | |
</html> | |
<?php | |
// finally, call exit(); and stop wp from finishing (eg. loading the | |
// templates | |
exit(); | |
} | |
function wpse32725_iframe_code() | |
{ | |
return sprintf( | |
'<code><iframe src="%s"></iframe></code>', | |
esc_url( home_url('/iframe/') ) | |
); | |
} |
And one thing that would be kool as well is a hook instead of a post list definition inside wpse32725_catch_iframe()
.
Did you ever submit this to the WordPress plugin repo?
I tried your code, but accessing http://localhost/mysite/iframe giving 404 , Can you please give me some idea, how I can make it work ?
UPDATE working for http://localhost/mysite/?iframe=true.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ah, I overread the shortcode - mea culpa.
@look at the source: Github strips the part after return print in the comment in my code lines above :)
@get_* and the_*: absolutely. A public API with "template tags" is always appreciated. If I'd use your plugin, i'd write one just to avoid the need to add the shortcode to every post I publish. Just check for the active plugin and then execute right before the comments loop.