Skip to content

Instantly share code, notes, and snippets.

@amitabhaghosh197
Forked from lukaszklis/gist:1247306
Last active September 9, 2017 15:06
Show Gist options
  • Save amitabhaghosh197/54793b6a43b967394997ae2ea36dbf99 to your computer and use it in GitHub Desktop.
Save amitabhaghosh197/54793b6a43b967394997ae2ea36dbf99 to your computer and use it in GitHub Desktop.
WordPress: check if a current page has children, if so display them, if not display all pages on the same level as current page #wordpress #has children
<?php

// Your functions.php content

function has_children() {
  global $post;
  
  $pages = get_pages('child_of=' . $post->ID);
  
  return count($pages);
}

function is_top_level() {
  global $post, $wpdb;
  
  $current_page = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE ID = " . $post->ID);
  
  return $current_page;
}


// Somewhere in your template

echo '<ul>';

  $base_args = array(
    'hierarchical' => 0
  );

  if (has_children()) {
    $args = array(
      'child_of' => $post->ID,
      'parent' => $post->ID
    );
  } else {
    if (is_top_level()) {
      $args = array(
        'child_of' => $post->post_parent,
        'parent' => $post->post_parent
      );
    } else {
      $args = array(
        'parent' => 0
      );
    }
  }
  
  $args = array_merge($base_args, $args);
  
  $pages = get_pages($args);
  
  foreach ($pages as $page) {

    echo '<li><a href="' . get_permalink($page->ID) . '">' . $page->post_title . '</a></li>';

  }
  echo '</ul>';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment