Los shortcodes de Wordpress pasan una matriz de valores

Estoy creando algunos códigos cortos de WordPress destinados a proporcionar navegación interna en una página (una página con muchas secciones de contenido y su propio menú).

Esto es lo que tengo:

//menu
function internal_menu($atts) {
  extract(shortcode_atts(array(
   'href1' => '#jl1',
   'href2' => '#jl2',
   'href3' => '#jl3',
   'href4' => '#jl4',
  ), $atts));
  return '<div id="internalPageMenu">
    <ul>
        <li><a href="' . $href1 . '"><i class="fa fa-bars"></i>link 1</a></li>
        <li><a href="' . $href2 . '">link 2</a></li>
        <li><a href="' . $href3 . '">link 3</a></li>
        <li><a href="' . $href4 . '">link 4</a></li>
    </ul>
    </div>';
}
add_shortcode('internal-menu', 'internal_menu');

//menu target
function internal_menu_target($atts) {
  extract(shortcode_atts(array(
   'id' => 'jl1',
   'text' => '',
   ), $atts));
   return '<h3 id="' . $id . '">' . $text . '</h3>';
}
add_shortcode('internal-menu-target', 'internal_menu_target');

Y usando esto en mi panel de administración de Wordpress:

[internal-menu]
[internal-menu-target id="jl1"]
Some content
[internal-menu-target id="jl2"]
...etc...

¿Cómo hago que el menú sea dinámico (no limitado a la cantidad de elementos que puede tener)? Por ejemplo, el código corto sería:

[internal-menu targets="jl1, jl2, jl3, jl4, jl5, ...etc..."]

Respuestas a la pregunta(2)

Su respuesta a la pregunta