短码下的两个不同的内部短码或内部短码的多个嵌套

时间:2020-01-27 作者:The WP Intermediate

<div class="eternal">
  <div class="one">
    [shortcode]Some text 1[/shortcode]    
    [shortcode]Some text 2[/shortcode]    
    [shortcode]Some text 3[/shortcode]    
    [shortcode]Some text 4[/shortcode]    
  </div>  
  <div class="two">
    [shortcodeanother]Some text 1[/shortcodeanother]    
    [shortcodeanother]Some text 2[/shortcodeanother]    
    [shortcodeanother]Some text 3[/shortcodeanother]    
    [shortcodeanother]Some text 4[/shortcodeanother]     
  </div>
</div>
我以前问过一个类似的问题,也得到了回答:Shortcode under a Shortcode Multiple times Possible?

但我的情况是,我需要用不同的HTML发布两个内部短代码。

在链接文本中建议的答案中,当我们打算发布两个内部短代码时,如果这在两种情况下不是唯一的,我们如何做到这一点:

return \'<div>\' . do_shortcode($content) . \'</div>\';
在目前的情况下,外部短代码很容易创建,但是我们如何使用两个内部短代码来创建呢?

或者如果可以嵌套短代码?

[shortcode]
  [shortcodenest1]
    [shortcodenest2]
    [/shortcodenest2]
  [/shortcodenest1]
[/shortcode]

1 个回复
SO网友:Antti Koskinen

是的,您可以继续嵌套短代码。只要继续使用do_shortcode() 直到到达最深处。https://codex.wordpress.org/Shortcode_API#Nested_Shortcodes

所以你可以这样做,

[container]
  [other_column class="extra-class"]
    [content]
      col 1
    [/content]
    [another]
      col 1-2
    [/another]
  [/other_column]
  [column]
    [another]
      col 2
    [/another]
  [/column]
[/container]
要实现这样的输出,

<div class="container">
  <div class="other-column extra-class">
    <div class="content">
      col 1
    </div>
    <div class="another">
      col 1-2
    </div>
  </div>
  <div class="column">
    <div class="another">
      col 2
    </div>
  </div>
</div>
如果您有这样的短代码函数。如果您需要,我提供了一个属性示例。

function container_shortcode($atts = array(), $content = null) {
  return \'<div class="container">\' . do_shortcode($content) . \'</div>\';
}
add_shortcode( \'container\', \'container_shortcode\' );

function column_shortcode($atts = array(), $content = null) {
  return \'<div class="column">\' . do_shortcode($content) . \'</div>\';
}
add_shortcode( \'column\', \'column_shortcode\' );

function other_column_shortcode($atts = array(), $content = null) {
  $defaults = array(
    \'class\' => \'\',
  );
  $atts = shortcode_atts( $defaults, $atts, \'other_column_shortcode\' );
  $class = (! empty($atts[\'class\']) ) ? \'other-column \' . $atts[\'class\'] : \'other-column\';
  return \'<div class="\' . esc_attr($class) . \'">\' . do_shortcode($content) . \'</div>\';
}
add_shortcode( \'other_column\', \'other_column_shortcode\' );

function content_shortcode($atts = array(), $content=null) {
  return \'<div class="content">\' . $content . \'</div>\';
}
add_shortcode( \'content\', \'content_shortcode\' );

function another_shortcode($atts = array(), $content=null) {
  return \'<div class="another">\' . $content . \'</div>\';
}
add_shortcode( \'another\', \'another_shortcode\' );