summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/random-redirect.php')
-rw-r--r--plugins/jetpack/modules/random-redirect.php43
1 files changed, 43 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/random-redirect.php b/plugins/jetpack/modules/random-redirect.php
new file mode 100644
index 00000000..2c568dbf
--- /dev/null
+++ b/plugins/jetpack/modules/random-redirect.php
@@ -0,0 +1,43 @@
+<?php
+/*
+Plugin Name: Random Redirect
+Plugin URI: http://wordpress.org/extend/plugins/random-redirect/
+Description: Allows you to create a link to yourblog.example.com/?random which will redirect someone to a random post on your blog, in a StumbleUpon-like fashion.
+Version: 1.2-wpcom
+Author: Matt Mullenweg
+Author URI: http://photomatt.net/
+*/
+
+function matt_random_redirect() {
+ // Acceptables URL formats: /[...]/?random=[post type], /?random, /&random, /&random=1
+ if ( ! isset( $_GET['random'] ) && ! in_array( strtolower( $_SERVER['REQUEST_URI'] ), array( '/&random', '/&random=1' ) ) )
+ return;
+
+ // Ignore requests that include more than just the random parameter.
+ if ( ! empty( $_POST ) || ( isset( $_GET['random'] ) && count( $_GET ) > 1 ) )
+ return;
+
+ // Persistent AppEngine abuse. ORDER BY RAND is expensive.
+ if ( strstr( $_SERVER['HTTP_USER_AGENT'], 'AppEngine-Google' ) )
+ wp_die( 'Please <a href="http://en.support.wordpress.com/contact/">contact support</a>' );
+
+ // Use the post type of the current page as the context for the random lookup.
+ $post_type = get_post_type();
+
+ // /?random should always show a random post, even if the home page is a static page.
+ if ( '/' == $_SERVER['DOCUMENT_URI'] )
+ $post_type = 'post';
+ else
+ $post_type = get_post_type();
+
+ if ( ! $post_type )
+ $post_type = 'post';
+
+ global $wpdb;
+ $random_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_password = '' AND post_status = 'publish' ORDER BY RAND() LIMIT 1", $post_type ) );
+ $permalink = get_permalink( $random_id );
+ wp_safe_redirect( $permalink );
+ exit;
+}
+
+add_action( 'template_redirect', 'matt_random_redirect' );