1. Istället för att köra unset($output) tycker jag du ska sätta $output till en tom array ($output = array();). Detta har ingenting med ditt problem att göra :) men din kod idag borde generera varningar med error_reporting satt till strict.
2. Efter din foreach-loop kollar du om $output innehåller något, om den gör det, skriv ut det på samma sätt som du gör inne i loopen när din if-sats uppfylls.
Detta borde fungera:
$the_children = get_pages($args);
$counter=0;
$output = array();
foreach ($the_children as $child) {
$counter++;
$output[]= '<div class="col-sm-3">';
$output[]= '<h2>'.$child->post_title.'</h2>';
$output[]= '</div>';
if($counter % 4 === 0) {
echo '<div class="row">'.implode('', $output).'</div>';
$output = array();
}
}
if (!empty($output)) {
echo '<div class="row">'.implode('', $output).'</div>';
}
