I have this code that I use to show random posts that are cached using transients (obtained from here). I want to show it using a shortcode in a footer widget. Could anyone kindly help me with a function to create the shortcode out of this code? Thank you in advance.

<div class="gridcontainer">
<div class="widget-title">Trending Picks</div>
// Get any existing copy of our transient data
if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient
    $randargs = array('orderby' => 'rand', 'numberposts' => 20);
    $special_query_results = get_posts($randargs);
    set_transient( 'special_query_results', $special_query_results, 60*60*12 );

// Use the data like you would have normally...
$randomposts = get_transient( 'special_query_results' );
$randkey = array_rand( $randomposts, 5 );
$sixposts[0] = $randomposts[$randkey[0]];
$sixposts[1] = $randomposts[$randkey[1]];
$sixposts[2] = $randomposts[$randkey[2]];
$sixposts[3] = $randomposts[$randkey[3]];
$sixposts[4] = $randomposts[$randkey[4]];
$sixposts[5] = $randomposts[$randkey[5]];

global $post;
foreach( $sixposts as $post ) :  setup_postdata($post); ?>

<div class="gridcontent">
<div class="gridtext"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></div>
<?php endforeach; ?>

You want add_shortcode(). Read more about add_shortcode() in the Codex.

  • I need the full code that's why I asked. Had some errors coz of the div tgs.
    – user145284
    May 3 '19 at 21:59
  • The only change you need to make is to return all your output instead of writing it directly. Or, if you'd rather keep your code intact, try using output buffer. Set ob_start() at the beginning and return ob_get_clean() at the end. php.net/manual/en/function.ob-start.php May 3 '19 at 22:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy