2

I want to convert this shortcode.

[list-style="one"]
a
b
c
d
[/list-style]

To ouput like this one (html form)

<ul class="one">
        <li>a</li>
        <li>b</li>
        <li>c</li>
        <li>d</li>
    </ul>
6
  • 5
    Just do it. There is nothing stopping you.
    – fuxia
    Sep 9, 2013 at 10:17
  • 3
    Have you read the shortcode api documentation? If so, can you post the code you have tried to implement? Also, whhich type of data will be a, b, c...:words, phrases, html,...?
    – cybmeta
    Sep 9, 2013 at 10:21
  • @toscho can we add shortcode parameter to change the <ul class="private"> private to anything [private='public'].Here public will be the new ul class.and my code add_shortcode( 'private', 'shortcode' ); function shortcode( $atts, $content = null ) { $return_string .= '<ul class="private">' . $content . '</ul>'; return $return_string; }
    – ashraf
    Sep 10, 2013 at 6:37
  • @ashraf Update your question with more details. Explain exactly where you got stuck. Do not hide important information in comments.
    – fuxia
    Sep 10, 2013 at 7:19
  • @toscho .The shortcode creates an ul class "private".I want to make this class dynamic.If i write [private='public']then I want to change the ul class to public that is <ul class="private">..
    – ashraf
    Sep 10, 2013 at 14:35

1 Answer 1

1

First off, your shortcodes are not formatted correctly for WordPress.

You need to have a tag for your shortcode and then define the attributes separately.

Instead of [list-style="one"][/list-style] it needs to be something like [list class="one"][/list]

The following code will add two shortcodes to your WordPress install. [list] and [li]

// shortcode for the list
function LIST_shortcode( $atts, $content ) {

    // get the options defined for this shortcode
    extract( shortcode_atts( array(
        'class'     => '',
        'id'        => '',
        'type'      => 'ul'
    ), $atts ) );

    // output a list and do_shortcode for <li> elements
    return '<' . $type . ' class="' . $class . '" id="' . $id . '">' . do_shortcode( $content ) . '</' . $type . '>';
}
add_shortcode( 'list', 'LIST_shortcode' );

// shortcode for the list items
function LI_shortcode( $atts, $content ) {

    // get the options defined for this shortcode
    extract( shortcode_atts( array(
        'class'     => '',
        'id'        => '',
    ), $atts ) );

    // return list element
    return '<li class="' . $class . '" id="' . $id . '">' . do_shortcode( $content ) . '</li>';
}
add_shortcode( 'li', 'LI_shortcode' );

You would then use these like so:

[list class="one"][li]A[/li][li]B[/li][li]C[/li][li]D[/li][/list]

My code also allows you to also..

Define an ID attribute: [list id="someid"]

Define the list type: [list type="ol"]

For this code to work, add it to your theme's functions.php file or create a plugin out of it.

Not the answer you're looking for? Browse other questions tagged or ask your own question.