Question

I'm struggling a bit to get my head around how to create shortcodes with options for a theme i'm building.

The shortcode creates a container and I want a "style" parameter so the user could enter something like this:

[container style="white"]content[/container]

I have three styles: white, clear and color and each style should add the class style1, style2 and style 3 respectively to the container html. This is what I have so far in my php:

// Container

function container($atts, $content = null) {
   extract( shortcode_atts( array(
      'style' => 'style2',
     ), $atts ) );
    $return_string = '<section class="wrapper special container {$style}">'. do_shortcode($content) .'</section>';

    wp_reset_query();
   return $return_string;
}

I just wanted to make a start by getting it to register 1 style but I can't even get to that point yet, let alone the three different styles!

Currently this just outputs:

<section class="wrapper special container {$style}">[MY CONTENT]</section>

in the html - any help or advise would be great.

Was it helpful?

Solution

1] Try using a switch on the $style variable to echo out the corresponding $return_string depending on it's value.

2] Pay special attention to the default: case, as it is what will be displayed if $style is not set to clear or white. I set it to have no attribute, but you might want it to be different.

3] You can add as many cases as you need for the shortcode. Whatever the value of $style is will determine which $return_string is used.

function container($atts, $content = null) {
   extract( shortcode_atts( array(
      'style' => '',
     ), $atts ) );

    switch ($style) {

        case "clear":
        $return_string = "<section class=\"wrapper special container style1\">". do_shortcode($content) ."</section>"; // Adds style1 if clear
        break;

        case "white":
        $return_string = "<section class=\"wrapper special container style2\">". do_shortcode($content) ."</section>"; // Adds style2 if white
        break;

        default:
        $return_string = "<section class=\"wrapper special container\">". do_shortcode($content) ."</section>"; // No Attribute (default)
        break;

        }
   wp_reset_query();
   return $return_string;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top