WordPress.org

Ready to get started?Download WordPress

Forums

Using do_shortcode() with variables? (13 posts)

  1. GWMO
    Member
    Posted 1 year ago #

    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 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.

  2. vtxyzzy
    Member
    Posted 1 year ago #

    Can you show an example of several of the shortcodes you would like to select and describe in words how you would select them?

  3. GWMO
    Member
    Posted 1 year ago #

    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.

  4. vtxyzzy
    Member
    Posted 1 year ago #

    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]);
    }
    ?>

  5. vtxyzzy
    Member
    Posted 1 year ago #

    Sorry, omitted the closing backtick.

  6. GWMO
    Member
    Posted 1 year ago #

    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 ]:

    <?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.

  7. vtxyzzy
    Member
    Posted 1 year ago #

    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]'); ?>
  8. GWMO
    Member
    Posted 1 year ago #

    [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?

  9. vtxyzzy
    Member
    Posted 1 year ago #

    The documentation I found for 'Allow PHP ... ' indicates that snippets are called like this, using 'function=id' instead of 'snippet=id':

    [php function=1]
  10. GWMO
    Member
    Posted 1 year ago #

    I'm actually using "PHP Code for Posts and Pages at:

    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/

    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.

  11. GWMO
    Member
    Posted 1 year ago #

    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.

  12. vtxyzzy
    Member
    Posted 1 year ago #

    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]");
    ?>
  13. GWMO
    Member
    Posted 1 year ago #

    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]");
    ?>

Topic Closed

This topic has been closed to new replies.

About this Topic