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();

4

2 回答 2

1

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

See the Shortcode_API and do_shortcode documentation.

于 2013-08-07T15:47:16.187 回答
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

于 2016-02-27T19:38:31.003 回答