Este shortcode permite listar qualquer página por ID dentro de páginas e postagens, é só informar o ID e pronto!

Pode ser um inferno interligar conteúdo em sites grandes, na maioria das vezes não é legal encher o menu com páginas e postagens, então o que faço é reunir páginas e postagens que têm relação e mostrar listas umas nas outras, listar em uma página principal e assim por diante.

Não crio muitos estilos para estes tipos de submenus, só para a classe extra de “página atual” (para diferenciar o item), mas você pode implementar este código com imagens, por exemplo, nomeadas a partir das IDs e coisas assim. Este shortcode funciona também para tipos de postagem! 😉

No arquivo functions.php adicione o seguinte:

function dkc_lista_paginas( $atts ) {
	extract( shortcode_atts( array('lista' => ''), $atts ) );
 
  $value = explode(',', $lista);
 
  foreach ($value as $page){
    if (is_page($page) || is_single($page)) {$walke = ' currrent-page-item';} else{$walke='';};
    $pages.='<li id="menu-item-'.$page.'" class="menu-item'.$walke.'"><a href="'.get_page_link($page).'">'.get_the_title($page).'</a></li>';
  }
 
  return  '<div class="submenu-page"><ul>'.$pages.'</ul></div>' ;
 
}
 
add_shortcode( 'lista_paginas', 'dkc_lista_paginas' );

Para usar este shortcode, informe as IDs das páginas, postagens ou tipos de postagem na ordem que quer mostrar na lista. (Use esta dica para adicionar uma coluna de ID nas tabelas de postagens e páginas!).
[lista_paginas lista="278,131,2"]
Isso vai criar uma lista de links:

<div class="submenu-page">
  <ul>
      <li id="menu-item-278" class="menu-item currrent-page-item"><a href="http://localhost/wp3/teste/">Teste</a></li>
      <li id="menu-item-131" class="menu-item"><a href="http://localhost/wp3/sobre/">Sobre</a></li>
      <li id="menu-item-2" class="menu-item"><a href="http://localhost/wp3/pagina-exemplo/">Página de Exemplo</a></li>
  </ul>
</div>

Veja que este shortcode não obtém páginas filhas automaticamente, quem sabe num próximo artigo!