Title: Using do_shortcode() with variables?
Last modified: August 20, 2016

---

# Using do_shortcode() with variables?

 *  [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 8 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/)
 * Posting here as unable to post in Advanced forum:
 * I’m using the “PHP Code for Posts and Pages” plugin at
    [http://www.AvengersCollectibles.com/wp](http://www.AvengersCollectibles.com/wp)
   to echo a shortcode (Amazon list from “Azon Pro Shopping List” in this case) 
   if the in_category(Captain America) criteria is met and found 15 good product
   categories to offer. Unfortunately, Amazon limits API calls to something like
   2000/hr.
 * With that said, I’m trying to have the script randomly select one of 3
    shortcodes(
   3 lists with 5 product categories each). I think I’m on the right track but can
   not seem to get the code correct:
 * Currently works:
 *     ```
       <?php if (in_category('Captain America'))
       echo do_shortcode('[asle id=11]');
       ?>
       ```
   
 * Example of random selection:
 *     ```
       <?php
       $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
       $rand_keys = array_rand($input, 2);
       echo $input[$rand_keys[0]] . "\n";
       echo $input[$rand_keys[1]] . "\n";
       ?>
       ```
   
 * but not quite sure how to combine the two. Any and all suggestions will be greatly
   appreciated.

Viewing 12 replies - 1 through 12 (of 12 total)

 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 8 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048831)
 * Can you show an example of several of the shortcodes you would like to select
   and describe in words how you would select them?
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 8 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048837)
 * I thank you for your fast reply and apologize for not providing such information.
   The program I am currently using allows me to build custom lists of Amazon products
   and adds the list to posts and pages with the shortcode [asle id={list number}].
 * For the site mentioned [http://www.AvengersCollectibles.com/wp], I would like
   to show 5 different lists for each character/category (i.e. [asle id=1], [asle
   id=2], [asle id=3], [asle id=4], [asle id=5]) and idealy rotate them each time
   the visitor views a new post in that category (i.e. perhaps unset or similar 
   to show [asle id=1] at the bottom of the first post they view, [asle id=2] at
   the bottom of the next post etc. then back to [asle id=1] at the bottom of the
   sixth post but would settle for each of the five being randomly selected from
   the array to be shown at the bottom of each post.
 * Hope this helps to clarify and, thouh this is a for profit site, I will be using
   what I learn for our local Block Watch site, a church site, and a fundraising
   site for “Feed Your Neighbor” as well and thank you for any and all advice you
   may be able to offer.
 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 8 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048838)
 * I think what you want is this:
 * `<?php if (in_category(‘Captain America’)) {
    $id = 0; while ( ! $id ) { $id 
   = array_rand( array( 1, 2, 3, 4, 5 ), 1 ); } echo do_shortcode(“[asle id=$id]);}?
   >
 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 8 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048839)
 * Sorry, omitted the closing backtick.
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048862)
 * Apologies for the delay as I am just now recovering from that nasty “Rebound 
   Flu” going around. I copied the code into my “PHP Code for Posts and Pages” plugin
   and modified it for my site [ [http://www.avengerscollectibles.com](http://www.avengerscollectibles.com)]:
 *     ```
       <?php if (in_category('Captain America')) {
       $id = 0;
       while ( ! $id ) {
       $id = array_rand( array( 15, 16, 17, 19, 20 ), 1 );
       }
       echo do_shortcode("[asle id=$id]");
       }
       ?>
       ```
   
 * then called it with my “Add To Post” plugin:
 * `<?php do_shortcode('[php snippet=1]'); ?>`
 * but it’s not showing up for posts in the “Captain America” category.
 * I’ve also tried WP-Simple Insert for the PHP functionality but it still does 
   not seem to (parse?) appear below the post. Any and all suggestions would be 
   both welcome and appreciated.
 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048863)
 * I don’t know what `[php snipped=1]` is supposed to do, but most times shortcodes
   return a value and you must echo them to output the value to the screen. Try 
   this:
 *     ```
       <?php echo do_shortcode('[php snippet=1]'); ?>
       ```
   
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048865)
 * [php snipped=1] is the shortcode for the “PHP for Posts and Pages” plugin where
   I store:
 *     ```
       <?php if (in_category('Captain America')) {
       $id = 0;
       while ( ! $id ) {
       $id = array_rand( array( 15, 16, 17, 19, 20 ), 1 );
       }
       echo do_shortcode("[asle id=$id]");
       }
       ?>
       ```
   
 * I tried adding the echo as you suggested for my “Add to Post” plugin:
 * `<?php echo do_shortcode('[php snippet=1]'); ?>`
 * but it still does not seem to work. Perhaps the “Add to Post” plugin is not parsing/
   processing the PHP?
 * Beginning to wonder if it would be easier to mod a child of the single post template?
 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048866)
 * The documentation I found for ‘Allow PHP … ‘ indicates that snippets are called
   like this, using ‘function=id’ instead of ‘snippet=id’:
 *     ```
       [php function=1]
       ```
   
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048867)
 * I’m actually using “PHP Code for Posts and Pages at:
 * [http://wordpress.org/extend/plugins/php-code-for-posts/](http://wordpress.org/extend/plugins/php-code-for-posts/)
 * but the plugin you mention “Allow PHP in Posts and Pages” at:
 * [http://wordpress.org/extend/plugins/allow-php-in-posts-and-pages/](http://wordpress.org/extend/plugins/allow-php-in-posts-and-pages/)
 * appears to be far more robust and recommended. I’ll give it a try with the
 * `<?php echo do_shortcode('[php function=1]'); ?>`
 * call you recommended and let you know how it works.
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048868)
 * It still didn’t seem to work but I may have found the problem. To simplify things,
   I removed both the “Add to Post” and “Allow PHP in Posts and Pages” plugins and
   placed the PHP code directly into the single.php template of a child theme – 
   still didn’t work. However, when I tried just one of the shortcode options:
 * `<?php echo do_shortcode("[asle id=16]"); ?>`
 * it worked so the problem may be in the conditional or random portion of the code.
 * I’ve used WordPress conditional statements befor so that portion of the code 
   looks good to me. Any suggestions on the random array (i.e. if it needs to be
   changed when I place it into the template)?
 *     ```
       <?php if (in_category('Captain America')) {
       $id = 0;
       while ( ! $id ) {
       $id = array_rand( array( 15, 16, 17, 19, 20 ), 1 );
       }
       echo do_shortcode("[asle id=$id]");
       }
       ?>
       ```
   
 * Thinking that I will need to make an “If, Then, Else” for each of the 9 categories(
   characters) on my site – each with it’s own random array of 5 possible shortcodes.
 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048871)
 * I think you could code it like this:
 *     ```
       <?php $ids = array( 43, 15, 8 ); // Default
       if (in_category('Captain America'))
          $ids = array( 15, 16, 17, 19, 20 );
       elseif (in_category('Spiderman'))
          $ids = array( 35, 36, 37, 39, 50, 5, 70 );
       elseif (in_category('Green Hornet'))
          $ids = array( 75, 6, 22, 49 );
   
       $id = 0;
       while ( ! $id ) {
          $id = array_rand( $ids, 1 );
       }
       echo do_shortcode("[asle id=$id]");
       ?>
       ```
   
 *  Thread Starter [GWMO](https://wordpress.org/support/users/gwmo/)
 * (@gwmo)
 * [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048872)
 * I tried posting the following into my single page template, before using the 
   full code for all of the categories, but the list does not appear in the page:
 *     ```
       <?php if (in_category('Captain America'))
          $ids = array( 15, 16, 17, 19, 20 );
   
       $id = 0;
       while ( ! $id ) {
          $id = array_rand( $ids, 1 );
       }
       echo do_shortcode("[asle id=$id]");
       ?>
       ```
   

Viewing 12 replies - 1 through 12 (of 12 total)

The topic ‘Using do_shortcode() with variables?’ is closed to new replies.

 * In: [Fixing WordPress](https://wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 12 replies
 * 2 participants
 * Last reply from: [GWMO](https://wordpress.org/support/users/gwmo/)
 * Last activity: [13 years, 7 months ago](https://wordpress.org/support/topic/using-do_shortcode-with-variables/#post-3048872)
 * Status: not resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
