Reputation: 3
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();
Upvotes: 0
Views: 451
Reputation: 789
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
Upvotes: 0
Reputation: 26075
A shortcode cannot echo
a value.
It has to return
it.
See the Shortcode_API and do_shortcode
documentation.
Upvotes: 1