CC Child Pages Shortcode Guide
Overview
Last updated: 1st May 2026 for CC Child Pages version 2.1
The CC Child Pages shortcode allows you to display WordPress child pages in a flexible grid or list format. It is ideal for creating visual navigation sections, subpage indexes or site maps.
You can insert it in any page or post using the shortcode:
[child_pages]
CC Child Pages Pro adds premium layout skins, advanced grid behaviour and precise design controls to the free CC Child Pages plugin. Create magazine-style layouts, spotlight featured pages and fine-tune colours and spacing — all while keeping fast, server-rendered output.
Basic Usage
To display child pages of the current page:
[child_pages]
To show child pages of a specific parent (by ID):
[child_pages id="12"]
To display a list in two columns with thumbnails:
[child_pages id="12" cols="2" thumbs="true"]

How it works (default behaviour)
If you do not specify any attributes, the shortcode will:
- Display published child pages
- Of the current page
- One level deep (
depth="1") - Ordered by
menu_orderascending - In a responsive grid layout (typically 3 columns)
- With title, excerpt and Read more … link visible
- Results will be displayed using the Simple skin
Important behaviour: siblings and show_current_page
The siblings attribute switches the shortcode from listing children to listing siblings of the current page. To do this, it automatically uses the current page’s parent as the starting point.
By default, siblings mode excludes the current page so the page does not list itself. This is intentional and is the most common source of confusion when people first enable siblings mode.
Siblings (current page excluded by default)
[child_pages siblings="true"]
Siblings (include the current page in the results)
To include the current page when using siblings="true", set show_current_page="true":
[child_pages siblings="true" show_current_page="true"]
Full Attribute Reference
If attributes are not specified they will either be completely ignored or their default value will be used.
Parent and hierarchy
| Attribute | Description | Default |
|---|---|---|
| id | Parent page ID Valid values: positive integer value of ID for a particular page, or 0 to show all top-level pages | ID of the current page |
| page_ids | Include specific pages by ID. Valid values: comma-separated list of specific page IDs | |
| depth | Levels of hierarchy to include Valid values: positive integer declaring how many levels to return or -1 flat any depth, 0 nested any depth (list mode is most relevant) | 1 |
| siblings | Show sibling pages instead of children Valid values: string true or false | false |
| show_current_page | Include the current page in results Valid values: string true or false | false |
| exclude | Exclude specific pages by ID. Valid values: comma-separated list of specific page IDs | |
| exclude_tree | Exclude a page and all child pages underneath it. Valid values: positive integer value of ID for a particular page |
Sorting and limits / pagination
| Attribute | Description | Default |
|---|---|---|
| orderby | Sort field Valid values: string id, author, rand, date, modified, title, slug, menu_order | menu_order |
| order | Sort direction Valid values: ASC (ascending) or DESC (descending) | ASC |
| offset | Number of results to skip Valid values: 0 or positive integer | 0 |
| limit | Limit total number of pages displayed (-1 = no limit) Valid values: -1 or positive integer | -1 |
| posts_per_page | Items per page when paginating (-1 for no pagination) Valid values: -1 or positive integer | -1 |
| page | Force a specific page number for pagination (-1 = auto) Valid values: -1 or positive integer | -1 |
| ignore_sticky_posts | Ignore sticky posts Valid values: string true or false | true |
| post_status | Filter by status Valid values: string – any valid post_status that can be accepted by the WordPress WP_Query (note that this may expose deleted or not yet published posts and pages). publish – a published post or page.pending – post is pending review.draft – a post in draft status.auto-draft – a newly created post, with no content.future – a post to publish in the future.private – not visible to users who are not logged in.inherit – a revision. trash – post is in trashbin.any – retrieves any status except for inherit, trash and auto-draft. Custom post statuses with exclude_from_search set to true are also excluded. |
Layout and style
| Attribute | Description | Default |
|---|---|---|
| cols | Number of columns Valid values: integer from 1 to 6 | |
| skin | Visual style template Valid values: string: simple, red, green, blue, sleek, or bold | simple |
| list | Force list layout instead of grid Valid values: string true or false | false |
| class | CSS class on wrapper to allow custom design. If specified, skin styling won’t be applied but layout CSS will be. Valid values: string. Any valid HTML class name, e.g. my-child-pages-class | |
| use_legacy_css | Use classic stylesheet for compatibility Valid values: string true or false | false |
Content display
| Attribute | Description | Default |
|---|---|---|
| hide_title | Hide page title Valid values: string true or false | false |
| hide_excerpt | Hide excerpt Valid values: string true or false | false |
| hide_more | Hide Read more … link Valid values: string true or false | false |
| hide_wp_more | Ignore WP more tagValid values: string true or false | false |
| show_page_content | Show full page content Valid values: string true or false | false |
| truncate_excerpt | Truncate long excerpts Valid values: string true or false | true |
| words | Words to include in truncated excerpt Valid values: positive integer | 55 |
| thumbs | Show featured image Valid values: string true, false or any registered WordPress image size name (e.g. thumbnail, medium, large, full and custom sizes) | false |
| lazy_load | Use lazy loading for images Valid values: string true or false | false |
| link_thumbs | Make thumbnails clickable Valid values: string true or false | false |
| link_titles | Make titles clickable Valid values: string true or false | false |
| title_link_class | Class for linked titles Valid values: string containing a valid HTML class name, e.g. my-title-link-class | ccpage_title_link |
| more | Text for Read more link | Read more … |
| link_target | Target for links Valid values: string containing any valid HTML target, e.g. _self, _blank, _parent, _top | |
| link | Override link URL Valid values: string containing any valid URL, e.g. https://ccplugins.co.uk | |
| use_custom_excerpt | Use custom field for the excerpt, if custom field specified is not found it is ignored Valid values: string containing the name of any custom field | |
| use_custom_title | Use custom field for the title, if custom field specified is not found it is ignored Valid values: string containing the name of any custom field | |
| use_custom_more | Use custom field for the more text field, if custom field specified is not found it is ignoredValid values: string containing the name of any custom field | |
| use_custom_thumbs | Use custom field for the thumbnail, if custom field specified is not found it is ignored Valid values: string containing the name of any custom field | |
| use_custom_link | Use custom field for the link URL, if custom field specified is not found it is ignored Valid values: string containing the name of any custom field | cc_child_pages_link |
| use_custom_link_target | Use custom field for the link target, if custom field specified is not found it is ignored Valid values: string containing the name of any custom field | cc_child_pages_link_target |
| show_author | Show page author Valid values: string true or false | false |
| show_date_created | Show created date Valid values: string true or false | false |
| show_date_modified | Show modified date Valid values: string true or false | false |
| subpage_title | Custom heading above list/grid |
Tip: Most users only need id, cols, skin, and thumbs to create attractive page grids.
Examples
Display child pages of About page with thumbnails:
[child_pages id="25" thumbs="true" cols="3" skin="sleek"]
Show sibling pages of the current page:
[child_pages siblings="true"]
Show top-level pages (depth=1) sorted by title:
[child_pages list="true" depth="1" orderby="title"]

Shortcode attributes
Boolean values and formatting rules
- Most switch attributes accept
"true"or"false"strings, for examplehide_more="true". - Although values are handled case-insensitively, using lowercase (
true/false) keeps things consistent. - Some attributes are not strictly boolean. For example,
thumbscan be"false","true"or an image size name such as"medium".
1) Parent and hierarchy
id (parent page ID)
Displays child pages of a specific parent page.
Valid values: any numeric page ID
Default: current page ID
[child_pages id="25"]
page_ids (include specific pages)
Displays only the pages you list, regardless of parent/child relationships.
Valid values: comma-separated numeric page IDs
Default: empty
[child_pages page_ids="10,14,22"]
Important: page_ids overrides id, depth and siblings.
depth (levels of hierarchy)
Controls how deep into the page hierarchy the shortcode will go.
Valid values:
1= children only2= children + grandchildren3(or higher) = deeper levels0= unlimited depth (nested list output is most relevant)-1= unlimited depth (flat list output is most relevant)
Default: 1
[child_pages depth="2"]
[child_pages list="true" depth="0"]
[child_pages list="true" depth="-1"]
siblings (show sibling pages)
Shows pages at the same level as the current page, using the current page’s parent as the starting point.
Valid values: true | false
Default: false
[child_pages siblings="true"]
Note: In siblings mode, the current page is excluded by default.
show_current_page (include current page when using siblings)
Used to include the current page in results when siblings="true" is enabled.
Valid values: true | false
Default: false
[child_pages siblings="true" show_current_page="true"]
exclude (exclude specific pages)
Exclude specific pages by ID.
[child_pages exclude="12,15"]
exclude_tree (exclude a page and its descendants)
Exclude a page and all child pages underneath it.
[child_pages exclude_tree="33"]
post_status (filter by status)
Advanced option to include pages with specific statuses.
Common values: publish, private, draft
[child_pages post_status="private"]
2) Sorting and limits
orderby (sort field)
Valid values: menu_order, id, author, rand, date, modified, title, slug
Default: menu_order
[child_pages orderby="title"]
order (sort direction)
Valid values: ASC | DESC
Default: ASC
[child_pages orderby="date" order="DESC"]
offset (skip first items)
Valid values: integer
Default: 0
[child_pages offset="2"]
limit (maximum total results)
Valid values: integer, -1 for no limit
Default: -1
[child_pages limit="6"]
posts_per_page and page (pagination control)
Pagination is only relevant when you want to split long results into multiple pages.
posts_per_page sets how many items appear per page. page forces which page of results to show.
Default: posts_per_page="-1" (pagination off), page="-1" (automatic)
[child_pages posts_per_page="6"]
If you need to force a specific page number (advanced use), set page, for example:
[child_pages posts_per_page="6" page="2"]
ignore_sticky_posts
Valid values: true | false
Default: true
[child_pages ignore_sticky_posts="false"]
3) Layout and styling
list (list layout)
Forces list output instead of a card/grid layout.
Valid values: true | false
Default: false
[child_pages list="true"]
cols (columns)
Sets the number of columns for the output.
Valid values: 1 to 6
Important: cols works in both grid and list layouts. In list mode it uses CSS columns to format the list into multiple columns.
[child_pages cols="4"]
[child_pages list="true" cols="3"]
skin (predefined styles)
Valid values: simple, red, green, blue, sleek, bold
Default: simple
[child_pages skin="sleek" cols="3"]
class (use your own styling)
Adds a CSS class to the wrapper.
Important: If you set class, it overrides the skin styling so that only the structural layout is applied. This is ideal if you want to style the cards entirely yourself in your theme or custom CSS.
[child_pages class="my-custom-cards" cols="3"]
use_legacy_css (compatibility mode)
Valid values: true | false
Default: false
Only set use_legacy_css="true" if you are seeing layout issues, usually caused by existing CSS modifications on the site or theme CSS overriding the plugin’s modern styles.
Legacy limitation: Only the “classic” skins work with legacy CSS: simple, red, green, blue. Modern skins such as sleek and bold require the modern CSS system.
[child_pages use_legacy_css="true" skin="blue"]
subpage_title (heading above the output)
[child_pages subpage_title="More in this section"]
4) Thumbnails and links
thumbs (show featured images)
Valid values:
false(default)true(use the plugin’s default size)- Any registered WordPress image size name, for example
thumbnail,medium,large,fullor a custom size name registered by your theme or another plugin
[child_pages thumbs="true"]
[child_pages thumbs="medium"]
[child_pages thumbs="my-custom-size"]
link_thumbs (make thumbnails clickable)
Valid values: true | false
Default: false
Note: link_thumbs has no effect unless thumbs is enabled.
[child_pages thumbs="medium" link_thumbs="true"]
lazy_load (lazy-load thumbnail images)
Valid values: true | false
Default: false
[child_pages thumbs="medium" lazy_load="true"]
link_titles and title_link_class
Make page titles clickable, and optionally set a custom CSS class for those links.
[child_pages link_titles="true"]
[child_pages link_titles="true" title_link_class="my-title-link"]
link and link_target
link overrides the destination URL for all items (advanced use). link_target sets where links open.
[child_pages link="https://example.com"]
[child_pages link_target="_blank"]
5) Titles, excerpts and Read more
Hide elements: hide_title, hide_excerpt, hide_more
Valid values: true | false
Default: false for each
[child_pages hide_title="true"]
[child_pages hide_excerpt="true"]
[child_pages hide_more="true"]
more (change Read more … text)
[child_pages more="View details"]
show_page_content (show full content)
Shows the full page content rather than an excerpt.
[child_pages show_page_content="true"]
hide_wp_more (ignore the WordPress more tag)
[child_pages hide_wp_more="true"]
truncate_excerpt and words (excerpt length)
truncate_excerpt controls whether long excerpts are trimmed. words sets the word limit when trimming.
[child_pages truncate_excerpt="false"]
[child_pages words="20"]
6) Custom fields (per-page overrides): the use_custom_… attributes
The use_custom_... attributes let you use custom fields (meta keys) to replace output on a per-page basis. If a page has the specified meta key set, that page’s output will use the custom value instead of the default value.
Replace titles per page:
[child_pages use_custom_title="my_title_meta"]
Replace excerpts per page:
[child_pages use_custom_excerpt="my_excerpt_meta"]
Replace Read more text per page:
[child_pages use_custom_more="my_more_meta"]
Replace thumbnails per page:
[child_pages use_custom_thumbs="my_image_meta"]
Replace link URL per page:
[child_pages use_custom_link="my_link_meta"]
Replace link target per page:
[child_pages use_custom_link_target="my_target_meta"]
Defaults: use_custom_link="cc_child_pages_link" and use_custom_link_target="cc_child_pages_link_target"
7) Meta display
Show additional information for each page entry.
show_author
[child_pages show_author="true"]
show_date_created
[child_pages show_date_created="true"]
show_date_modified
[child_pages show_date_modified="true"]
Troubleshooting (shortcode)
No pages are displayed
- Confirm the parent page actually has published child pages (or siblings, if using siblings mode).
- If you used
id, double-check it is the correct page ID. - If you used
page_ids, confirm the IDs exist and are published. - If you used
siblings="true"on a top-level page (no parent), there may be no siblings to show.
Unexpected ordering
Try explicitly setting:
[child_pages orderby="menu_order" order="ASC"]
For an alphabetical list:
[child_pages orderby="title" order="ASC"]
Columns not behaving as expected
- Confirm you are using a valid column number:
1to6. - If your theme applies strong layout rules, test by temporarily switching theme or enabling legacy CSS (see below).
Layout looks incorrect after theme changes or custom CSS
If your theme or custom CSS overrides plugin styles and the layout appears broken, try legacy CSS mode:
[child_pages use_legacy_css="true"]
Reminder: legacy CSS supports only simple, red, green, blue skins.
Optional Reading
How Pagination Works
If posts_per_page is set to a positive integer greater than 0, CC Child Pages divides long lists of subpages into multiple pages with the number of items set by posts_per_page on each page.
FAQs
How do I show siblings and include the current page?
Siblings mode excludes the current page by default. Include it with show_current_page="true":
[child_pages siblings="true" show_current_page="true"]
How do I remove the Read more … link but keep the excerpt?
[child_pages hide_more="true"]
How do I show thumbnails only?
[child_pages thumbs="true" hide_title="true" hide_excerpt="true" hide_more="true"]
Why are my thumbnails not clickable?
You must enable link_thumbs="true", and thumbs must be enabled too:
[child_pages thumbs="medium" link_thumbs="true"]
Can thumbs be an image size like medium or large?
Yes. thumbs accepts "true", "false" or an image size name:
[child_pages thumbs="large"]
[child_pages thumbs="full"]
How do I show grandchildren (two levels deep)?
[child_pages depth="2"]
Can I list pages in multiple columns but keep list styling?
Yes. List mode supports columns (CSS columns):
[child_pages list="true" cols="3" depth="1"]
How do I exclude specific pages from the list?
[child_pages exclude="12,15"]
How do I exclude a page and all of its subpages?
[child_pages exclude_tree="33"]
How do I fully control the visual styling of the cards?
Use class. This applies the grid structure but disables skin styling so you can style everything yourself:
[child_pages class="my-custom-cards" cols="3" thumbs="medium"]
My columns look fine on desktop but odd on mobile. Is that normal?
Yes, responsive layouts often reduce columns on smaller screens to keep content readable. If your theme overrides responsive rules, you may need custom CSS or legacy mode.
[child_pages use_legacy_css="true"]
Can I make the output alphabetical?
[child_pages orderby="title" order="ASC"]
Why does the shortcode work on some pages but not others?
- Those pages may have no published child pages (or siblings).
- They may be excluded via
excludeorexclude_tree. - They may have different templates or custom CSS that affects layout.
Can I show the full page content instead of excerpts?
[child_pages show_page_content="true"]
If you only want shorter content, use excerpts with words instead.
How do I stop excerpts being shortened?
[child_pages truncate_excerpt="false"]
Can I change the Read more … text?
[child_pages more="View details"]
Does the shortcode work in widget areas?
Yes. Paste the shortcode into a text/HTML widget, or use the dedicated CC Child Pages widget.
