People love hitting those random posts. What better way is there to keep people on a website than by giving them a random post button to push. Pushing that button is like pulling a leaver on a slot machine: ya never know when you’re going to hit Jackpot. Add a random post button to your menu or random post buttons to your posts and sidebars with a couple of easy to use copy and paste code snippets.
In this How-To guide you see
- How to make a random post button shortcode
- How to add a random post button to your nav menu
We will keep the code and instructions simple. Read the notes in the code.
This method creates a button that links to a random post on each press. The target page uses the actual URL of the page. Other methods use a permalink rewrite that adjusts the URL of the randomly chosen page to include a virtual ‘random’ directory in the URL slug e.g. example.com/random/page/, which creates duplicate page content issues. That is bad for SEO. The method shown here at JournalXtra does not use URL rewrites and does not use a random post page template.
The JournalXtra method is SEO standards compatible.
Instructions for using the code
Add the code to your WordPress theme’s functions.php file or install a functionality plugin and add the code snippets to the configuration page of the plugin.
Code added to the functions.php file of a theme will stop working if the theme is deactivated. Code added to a functionality plugin will remain active for as long as the functionality plugin is active and for as long the code is valid.
Part 1: Generate the link to a random post
This code generates the URL to a random WordPress post.
Add this code to your functions.php file or functionality plugin then use one or both of the snippets below this code to add a nav menu button that loads a random page when pressed or to use a shortcode to display a ‘random post’ button in posts and widget areas.
<?php // Remove this line from pasted code. Copy and paste everything below this line.
/**
* Part 1: Get a link to a random post
**/
/**
* Random Post Function
*
* <?php vr_random_post_function() ?>
* See journalxtra.com
*
**/
function vr_random_post_function( $title='Random Post' ) {
// Get the URL of a random post and format it as a clickable link
$posts = get_posts('post_type=post&orderby=rand&numberposts=1');
foreach($posts as $post) {
$link = '<a href="' . esc_url( get_permalink($post) ) . '" title="' . $title . '">'.$title.'</a>';
}
// Return the link to wherever this function is called
return $link;
}Part 2: Random post button for menu bars
This code adds a random post button to the end of the primary navigation menu. The title of the menu tab is ‘Random Post’. Change the title by editing ‘Random Post’ in vr_random_post_function ( ‘ Random Post’ ). The menu bar the button is added to can be changed by editing the ‘if’ statement.
<?php // Remove this line from pasted code. Copy and paste everything below this line.
/**
* Part 2: Add the link to the random post to a menu (primary menu in this case)
* https://journalxtra.com
**/
/* Add the random post link to a menu */
add_filter( 'wp_nav_menu_items', 'theme_menu_extras', 10, 2 );
/**
* Filter menu items and append the random link.
*
* @param string $menu HTML string of list items.
* @param stdClass $args Menu arguments.
*
* @return string Amended HTML string of list items.
*/
function theme_menu_extras( $menu, $args ) {
// Change 'primary' to 'secondary' to add the random post button to the secondary navigation menu
if ( 'primary' !== $args->theme_location )
return $menu;
$menu .= '<li class="random-post">' . vr_random_post_function( 'Random Post' ) . '</li>';
return $menu;
}Part 3: Random post button shortcode
This code creates a WordPress shortcode that shows a button with the title ‘Random Post’. Each press of the button opens a random post link. Use the shortcode wherever you want a random post button to display.
<?php // Remove this line from pasted code. Copy and paste everything below this line.
/**
* Part 3: Random post button shortcode
* https://journalxtra.com
*
* [vr-random-post-button]
*
**/
function vr_random_post_button_shortcode() {
$content = '<div class="vr-random-post button">' . vr_random_post_function( 'Random Post' ) . '</div>';
return $content;
}
// Add the shortcode
add_shortcode('vr-random-post-button','vr_random_post_button_shortcode');
// The shortcode is [vr-random-post-button]Style the buttons
Use CSS to style the buttons.
The random post menu button has the CSS class ‘random-post’. The button generated by the shortcode has the CSS classes ‘vr-random-post’ and ‘button’. Some themes include CSS styles for .button{} which is the reason the button class is used.
.vr-random-post {
display: inline-block;
}
.vr-random-post a {
display: inline-block;
color:#000;
background-color: #FF3112;
border: 2px solid #000;
padding: 10px 12px;
}
.vr-random-post a:hover {
text-decoration: none;
display: inline-block;
color:#333;
background-color: #FF3112;
border-color: #333;
}Caveats
The random page button(s) gets cached by WordPress cache plugins and web browsers. Each page of your website will show a different link to a random page but the link shown on a specific page will refresh only when the site cache is refreshed. I will share a cache-buster workaround in a future post.
Over to you!
Leave comments and tips with the discussion form below.
