Based on the original Random Redirect, this plugin enables efficient, easy random redirection to a post. Supports setting a category for all random redirects, shortcodes to generate URLs that can override the default category, and setting your own redirector URL. Designed to scale to handle high-traffic websites with thousands of posts by using a more efficient strategy than most other redirection plugins employ.
Based on the original Random Redirect by Matt Mullenweg https://wordpress.org/plugins/random-redirect/
Special thanks to Tim Green for providing additional quality assurance testing on the popular rattle.com website.
Install as normal for WordPress plugins.
Another random post redirection script, really?
Yep, really. So many of the ones currently out there are not suitable for large websites with lots of traffic.
This is because many random redirect plugins rely on the
'orderby' => 'rand'constraint in WordPress, or directly use
'ORDER BY RAND()'in their MySQL queries. This results in notoriously poor performance and can really cause problems with your MySQL server if this operation is heavily repeated on a website with lots of eligible posts.
This plugin uses a more efficient approach, including transient caching of all eligible posts by category and their post counts to minimise the time it takes to pick a true random post.
How do I set the URL?
Go to Settings > Better Random Redirect and change the URL slug from the default of “random” to whatever you want it to be.
How do I make the randomiser use just one category for everything?
Select the category you want to use in Settings > Better Random Redirect. This will become the default category used for all subsequent random requests. It can be overridden, however using the cat= shortcode attribute or query string as described below.
How do I make the randomiser use just one post type for everything?
Select the post type you want to use in Settings > Better Random Redirect. This will become the default post type used for all subsequent random requests. It can be overridden, however using the posttype= shortcode attribute or query string as described below.
For random results in e.g. category ‘foo’, use the shortcode
[random-url cat="foo"]. The generated link will select a random post from that category.
Alternatively, use the URL you set up in the configuration above, and optionally append cat= as part of the URL query string.
For random results in e.g. post type ‘page’, use the shortcode
[random-url posttype="page"]. The generated link will select a random post from that post type.
Alternatively, use the URL you set up in the configuration above, and optionally append posttype= as part of the URL query string.
Use the shortcode
[random-url]anywhere you want to place the URL for a link to the randomiser, such as in text links or buttons. You can also use the cat= attribute to create a link to a randomiser that will only select random posts from a specific category, or the posttype= attribute to create a link to a randomiser that will only select random posts from a specific post type.
Alternatively, simply use the URL you set up in the configuration above as the link for the link or button, and optionally append cat= and/or posttype= as part of the URL query string.
You can use the URL you set up in the configuration, and optionally append cat= and/or posttype= as part of the URL query string.
Alternatively, for sidebar items, you can use the PHP Widget along with some php code like
<?php echo do_shortcode('[random-url]'); ?>to resolve the shortcode to a link that includes the r= attribute to defeat URL-based caching.
What is the r= parameter I see at the end of generated URLs?
This is a random integer in the range of possible index values for the relevant category. It is appended to the generated URLs to defeat URL-based caching, and also to give deterministic routing of results (i.e. the same r value and category combination will lead to the same post each time). This helps with services like Facebook that cache the resulting 302 redirect, to make sure they are caching accurate metadata on a link-by-link basis.
Contributors & Developers
“Better Random Redirect” is open source software. The following people have contributed to this plugin.Contributors
Interested in development?
- Fixed warnings under some rare cases
- Cleaned up user configurable options sanitization / validation
- Tested with 5.5.3
- Standardised cache headers
- Tested with 5.3
- Tested with 5.2
- Tested with 5.1
- Tested with 5.0
- Modular class-based filter approach for future use
- Towards a modular approach to adding filters
- Bug fix (incomplete refactoring)
- Refactored namespaces into classes with static methods to improve compatability with php 5.2 and below
- Improved queries related to qTranslate-X posts
- Added support for qTranslate-X
- Fixed bug related to Post Type settings (thanks to Naeem Noor)
- Display correct URL in admin on multisite
- Give example of posttype= parameters in admin
- Support for different post types
- More efficient routing
- Use of wpdb->prepare where applicable
- Expanded readme instructions and code comments
- Using mt_rand() instead of rand()
- Configurable global category
- Shortocde [random-url] with optional cat parameter for category override
- Deterministic routing and cache defeating using r= parameter on all generated URLs
- Initial release