0

I have these two functions:

add_shortcode('section_block_container','dos_section_block_container');

function dos_section_block_container($atts, $content = null) {
    $content = do_shortcode($content);
    echo '<ul class="list-unstyled list-inline">' . $content . '</ul>';

}

add_shortcode('section_block','dos_section_blocks');

function dos_section_blocks($atts, $content = null) {

    // define attributes and their defaults
    extract( shortcode_atts( array (
        'first' => FALSE,
        'color' => '',
        'icon'  => '',
        'title' => '',
    ), $atts ) );

?>
    <li>
        <a href="" style="background-color: <?php echo $color; ?>" title="<?php echo $title; ?>" class="section-block show-grid col-12 col-sm-3 <?php // echo ($first == TRUE ? 'col-offset-3 ' : '') ?>col-lg-3">
            <h4><?php echo strip_tags ($title); ?></h4>
            <?php echo strip_tags($content); ?>
            <?php echo $icon; ?>
        </a>
    </li>

<?php

}

and in the wp editor this with a recursive [section_block]

[section_block_container]

[section_block color="#001e61" title="Lorem Ipsum" icon="" first="true"][/section_block]

[section_block color="#001e61" title="Lorem Ipsum" icon="" first="true"][/section_block]

[/section_block_container]

the problem is the the list does not appear inside the container but outside even with do_shortcode();

2 Answers 2

1

A shortcode cannot echo a value.
It has to return it.

See the Shortcode_API and do_shortcode documentation.

Sign up to request clarification or add additional context in comments.

Comments

0
function container($atts, $content = null) {
    $content = do_shortcode($content);
    return "<ul class='list-unstyled list-inline'>" . $content . "</ul>";
}

add_shortcode('section_block_containe','container');

function section_block_function($atts, $content = null) {

    // define attributes and their defaults
    extract( shortcode_atts( array (
        "first" => FALSE,
        "color" => '',
        "icon"  => '',
        "title" => '',
    ), $atts ) );

    $class = ($first)? 'col-offset-3 ':'';

    $li = 
      "<li>
         <a href='' style='background-color: ".$color."' title='".$title."' class='section-block show-grid col-12 col-sm-3 ".$class." col-lg-3'>
         <h4>".$title."</h4>
         ".$content."
         ".$icon."
         </a>
      </li>";
    return $li;
}

add_shortcode('section_block','section_block_function');

Friend his only mistake was that the action shortcode works with return

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.