Niedawno jeden z naszych czytelników zapytał nas, jak wyświetlić strony podrzędne strony WordPress?
Jeśli organizujesz swoją witrynę internetową WordPress ze stronami nadrzędnymi i podrzędnymi, możesz chcieć wyświetlać swoje strony podrzędne lub podstrony na głównej stronie nadrzędnej. Możesz również chcieć wyświetlić stronę główną na każdej stronie podrzędnej, aby ułatwić przeglądanie.
W tym artykule pokażemy, jak łatwo wyświetlić listę stron podrzędnych dla strony nadrzędnej w WordPress.
Kiedy trzeba wyświetlić listę stron podrzędnych?
WordPress zawiera dwa domyślne typy treści zwane wpisami i stronami. Wpisy są treścią bloga i zazwyczaj są zorganizowane za pomocą kategorii i tagów.
Strony to jednorazowe lub samodzielne treści, które są wiecznie zielone, takie jak na przykład strona „O nas” lub „Skontaktuj się z nami”.
W WordPressie strony mogą być hierarchiczne, co oznacza, że można je organizować za pomocą stron nadrzędnych i podrzędnych.
Przykładowo, możesz utworzyć stronę produktu ze stronami podrzędnymi dla funkcji, cennika i pomocy technicznej.
Aby utworzyć stronę podrzędną, postępuj zgodnie z naszym przewodnikiem na temat tworzenia stron podrzędnych w WordPress.
Po utworzeniu twojej strony nadrzędnej i podrzędnej, możesz chcieć wyświetlić listę stron podrzędnych na głównej stronie nadrzędnej.
Teraz, łatwym sposobem na zrobienie tego jest ręczna edycja strony nadrzędnej i dodanie listy odnośników indywidualnie.
Będziesz jednak musiał ręcznie edytować stronę nadrzędną za każdym razem, gdy dodasz lub usuniesz stronę podrzędną. Czy nie byłoby lepiej, gdyby można było po prostu utworzyć stronę podrzędną i automatycznie pojawiałaby się ona jako odnośnik na stronie nadrzędnej?
Biorąc to pod uwagę, przyjrzyjmy się innym dynamicznym sposobom szybkiego wyświetlania listy stron podrzędnych na stronie nadrzędnej w WordPress. Pokażemy ci trzy metody, abyś mógł wybrać tę, która jest dla ciebie najlepsza:
Metoda 1. Wyświetlanie stron podrzędnych na stronie nadrzędnej za pomocą wtyczki
Ta metoda jest łatwiejsza i zalecana dla wszystkich użytkowników.
Najpierw należy zainstalować i włączyć wtyczkę Page-list. Aby uzyskać więcej informacji, zobacz nasz przewodnik krok po kroku, jak zainstalować wtyczkę WordPress.
Po włączaniu należy edytować stronę nadrzędną i po prostu dodać następujący krótki kod w miejscu, w którym ma być wyświetlana lista stron podrzędnych.
[podstrony]
Możesz teraz zapisać swoją stronę i podglądnąć ją w nowej karcie przeglądarki. Powiadomienie wyświetli prostą, wypunktowaną listę wszystkich stron podrzędnych.
Jeśli chcesz, możesz dodać własny CSS, aby zmienić wygląd listy. Oto przykładowy kod CSS, który można wykorzystać jako punkt wyjścia.
ul.page-list.subpages-page-list {
list-style: none;
list-style-type: none;
background-color: #eee;
border: 1px solid #CCC;
padding: 20px;
}
Po zastosowaniu własnego CSS możesz wyświetlić podgląd strony nadrzędnej. Tak to wyglądało na naszej testowej witrynie internetowej WordPress.
Wtyczka udostępnia szereg parametrów krótkiego kodu, które pozwalają ustawić głębokość, wykluczyć strony, liczbę elementów i nie tylko. Szczegółowa dokumentacja znajduje się na stronie wtyczki.
Metoda 2. Lista stron podrzędnych dla strony nadrzędnej przy użyciu kodu
Ta metoda jest nieco zaawansowana i wymaga dodania kodu do twojej witryny internetowej WordPress. Jeśli nie robiłeś tego wcześniej, zapoznaj się z naszym przewodnikiem na temat kopiowania i wklejania kodu w WordPress.
Aby wyświetlić listę stron podrzędnych pod stroną nadrzędną, musisz dodać następujący kod we wtyczce fragmentów kodu lub w pliku functions.php twojego motywu:
function wpb_list_child_pages() {
global $post;
if ( is_page() && $post->post_parent )
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
if ( $childpages ) {
$string = '<ul class="wpb_page_list">' . $childpages . '</ul>';
}
return $string;
}
add_shortcode('wpb_childpages', 'wpb_list_child_pages');
W WPBeginner zawsze zalecamy dodawanie kodu w WordPressie za pomocą wtyczki WPCode.
WPCode umożliwia łatwe dodawanie własnego konfiguratora bez edytowania plików motywu, dzięki czemu nie musisz się martwić, że zepsujesz swoją witrynę.
Najpierw należy zainstalować i włączyć darmową wtyczkę WPCode. Aby uzyskać instrukcje krok po kroku, zobacz ten przewodnik na temat instalacji wtyczki WordPress.
Po włączeniu wtyczki, przejdź do Code Snippets ” Add Snippet z twojego kokpitu WordPress. Następnie najedź kursorem myszy na opcję „Add Your Custom Code (New Snippet)” i kliknij przycisk „Use snippet”.
Następnie dodaj tytuł dla twojego fragmentu kodu i wklej powyższy kod w polu „Podgląd kodu”.
Nie zapomnij wybrać „Fragmentu kodu PHP” jako rodzaju kodu z rozwijanego menu po prawej stronie.
Następnie wystarczy przełączyć przełącznik z „Nieaktywny” na „Aktywny” i kliknąć przycisk „Zapisz fragment kodu” u góry strony.
Ten kod najpierw sprawdza, czy strona ma nadrzędnego lub czy sama strona jest nadrzędna.
Jeśli jest to strona nadrzędna, wyświetla powiązane z nią strony podrzędne. Jeśli jest to strona podrzędna, wyświetla wszystkie inne strony podrzędne strony nadrzędnej.
Wreszcie, jeśli jest to tylko strona bez strony podrzędnej lub nadrzędnej, kod po prostu nic nie zrobi. W ostatnim wierszu kodu dodaliśmy krótki kod, dzięki czemu możesz łatwo wyświetlać strony podrzędne bez modyfikowania twoich szablonów stron.
Aby wyświetlić strony podrzędne, wystarczy dodać następujący krótki kod na stronie lub w widżecie tekstowym na panelu bocznym:
[wpb_childpages]
Nie zapomnij zapisać swoich zmian i podglądnąć ich na karcie przeglądarki. Tak to wygląda na naszej witrynie testowej.
Możesz teraz nadać styl tej liście stron za pomocą własnego kodu CSS. Oto przykładowy kod CSS, który można wykorzystać jako punkt wyjścia.
ul.wpb_page_list {
list-style: none;
list-style-type: none;
background-color: #eee;
border: 1px solid #CCC;
padding: 20px;
}
Metoda 3. Dynamiczne wyświetlanie stron podrzędnych bez krótkiego kodu
Korzystanie z krótkich kodów jest wygodne, ale problem z nimi polega na tym, że będziesz musiał dodać krótkie kody na wszystkich stronach, które mają strony nadrzędne lub podrzędne.
Może się zdarzyć, że będziesz mieć krótki kod na wielu stronach, a czasem nawet zapomnisz go dodać.
Lepszym podejściem byłoby edytowanie pliku szablonu strony w twoim motywie, aby mógł on automatycznie wyświetlać strony potomne.
Aby to zrobić, musisz edytować szablon strony
głównej .php
lub utworzyć własny szablon strony w twoim motywie.
Możesz edytować swój główny motyw, ale zmiany te znikną, jeśli zmienisz lub zaktualizujesz swój motyw. Dlatego lepiej będzie, jeśli utworzysz motyw potomny, a następnie wprowadzisz w nim swoje zmiany.
W pliku szablonu twojej strony musisz dodać ten wiersz kodu w miejscu, w którym chcesz wyświetlać strony podrzędne.
<?php wpb_list_child_pages(); ?>
To wszystko. Twój motyw będzie teraz automatycznie wykrywał strony potomne i wyświetlał je na zwykłej liście.
Możesz dostosować style za pomocą CSS i formatowania. Oto przykład tego, jak witryna OptinMonster wyświetla stronę nadrzędną i strony podrzędne:
Mamy nadzieję, że ten artykuł pomógł ci stworzyć listę stron podrzędnych dla strony nadrzędnej w WordPress. Warto również zapoznać się z naszym przewodnikiem na temat najważniejszych stron, które należy utworzyć w nowej witrynie internetowej WordPress, a także z naszym porównaniem najlepszych kreatorów stron WordPress typu „przeciągnij i upuść ” do tworzenia własnych układów bez żadnego kodu.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Syed Balkhi
Hey WPBeginner readers,
Did you know you can win exciting prizes by commenting on WPBeginner?
Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
You can get more details about the contest from here.
Start sharing your thoughts below to stand a chance to win!
Denise
For third level pages (grandchild), I want to show the same menu that is seen on the child pages (all the child links of the parent). With this snippet, when on a grandchild page, I only see the other grandchild pages in the menu. How would this code need to be modified to show the all child links even when on grandchild pages?
vicky
how to get child page ids not the granchild ids…………….pls help im a bigginner
Meredith L
I’m relatively new to blogging and I recently switched over to the Kale WordPress theme. I have been trying to do page attribute pages (under the parent page Recipes) so I can have separate categories for appetizers, desserts, etc. Everything seems to go through on the admin part but then on the site itself there are no page attributes/drop down form the Recipes category. What am I doing wrong? It is all set to public so I’m not sure what the problem is.
Daves
Thank you for this code. But I don’t want this to be shown on the homepage (static page), just on the parent pages only. Please how can it be done?
Thank you.
Boris Budeck
I am using Generatepress Theme (created a child theme from it for customizing) and I can’t get this to work. The shortcode is displayed in the output page, it seems it is not even ercognized as being a shortcode. I use Elementor widgets and neither text nor shortcode widgets work.
Any idea of how to make it work when using elementor widgets?
WPBeginner Support
Hi Boris,
Please try adding this code to your theme’s functions.php file or a site-specific plugin.
1-click Use in WordPress
Administrator
Frederic
a great post, it’s exactly what I’m looking for since many hours ! and it works like a charm, just adding the code in the function.php of the theme then adding the short code in the page where I want the sub pages to appear, and voilà!!!
wonderful, thanks a lot for your generosity !!
WPBeginner Support
Hi Frederic,
Glad you found it useful You may also want to subscribe to our YouTube Channel for more WordPress video tutorials.
Administrator
Mariano
Hi!
Thanks for the code. How can I display the featured image of each child page?
Ron
Like with so many of the snippets we find, one has to go through all the comments in order to get it to work. What’s wrong with testing what you write?
Alicia
Can you do a drop down menu for parent/child pages on wordpress.com, or does it have to be the .org version?
Razvan
What if I want to display child posts, not child pages?
Rudy
Using this code ends up displaying the parent page along with the child pages, which is redundant. As I understand it, what we really need is to display only the child pages, not the parent page. Any suggested modification that can do this?
Michael Feske
Great, but it works not
add_shortcode is correct or must it be add_filter https://www.wpbeginner.com/wp-tutorials/how-to-use-shortcodes-in-your-wordpress-sidebar-widgets/ ?
with add_shortcode is error Fatal error: Uncaught Error: Call to undefined function add_shortcode()
with add_filter is no error but it works nort
Milos
On plugins update, for some strange reason I always get an error:
Fatal error: Cannot redeclare wpb_list_child_pages() (previously declared in …/wp-content/themes/pagelines/functions.php:25) in …/wp-content/themes/pagelines/functions.php on line 34
Jeffrey Fry
How can you also display the date of the child page?
ethann
Hello great article,
Can you please help me creating a dropdown of child pages in parent page.I need this functionality for one of my wordpress project and i am totally newbie to wordpress.
Alex
Am I the only one that cannot get it to work?
I have the following structure
About
— Page 1
— Page 2
— Page 3
When on the „About” or a child page (1, 2 or 3) I would like to have a list with my parent page (About) and all children (1, 2, 3) – Anyone got that working?
Thanks!
Kendra
OMG sorry this is annoying Please ignore my other posts. Didn’t realize you couldn’t paste code into the comments.
I was NOT able to get it to work with wpb_list_child_pages();
I WAS able to get it to work with echo do_shortcode( ‘[wpb_childpages]’)
And to get the title of the parent page, i inserted this above the child page list:
$current = $post->ID;
$parent = $post->post_parent;
$grandparent_get = get_post($parent);
$grandparent = $grandparent_get->post_parent;
PHP if ($root_parent = get_the_title($grandparent) !== $root_parent = get_the_title($current)) {echo get_the_title($grandparent); }else {echo get_the_title($parent);
Jean Bishop
I am using this code and it works great. Is it possible to also display categories in menus along with pages?
Michelle
Hi,
I want to do the following
Parent page must be either for sale and or for rent
Then I want the child for example a province (gauteng) to link to the for sale and the for rent parent.
How do I do that?
Michelle
Zakhar
How can i create shortcode with param, for example, [wpb_childpages id=”1″], where id=”1″ is an id of parent page?
Strand
Hi,
Is it possible to limit the links to a specific number such as maximum 12 child pages?
Thanks
Aander
Thank you,
Could you explain, please, how can I organize child pages in drop down list that would be accessible through the parent page? (I don’t want the visitors could see all child pages in a form of a blogroll.)
I.e., on the parent page I want to create drop down list (listbox) to which child pages would be added in predefined order (say in alphabetical order). After reading Introduction a visitor can proceed by choosing any page from the list at her wish (child pages has no logical connection so in any case she will search the exact page).
Is 'my dream’ realizable?
Thank you again.
Quantum-mecha
How do I add pagination for Child Page?
Thanks!
Astrid
Hi WPBeginner Staff,
I used the code you guys provided with the „short code option” and it worked (links to child pages). However, I wanted to use the permanent option, and that didn’t work.
When I added this line of code [ ] the parent page returns a 500 error and no child pages are displayed at atll.
What am I doing wrong?
On a side note if I wanted to display and excerpt with its respective image how would I go about it? Thanks!
Astrid
I was able to figure this out.
I added the code snippet then added this shortcode [wpb_childpages] to the parent page where I wanted the child pages displayed. Awesome!
Now in order to display excerpts and an image would I use the same queries– just like posts under a category.
Thanks in advance
Jade
Hey I was wondering what you meant by 'query’? How exactly did you get the excerpts and images to display in the parent page?
Thanks!
Mehar
Really useful. Thank you.
Pradeep
Could someone confirm that the example page used in this tutorial http://optinmonster.com/how-it-works/ uses this feature or not? To me it looks like it they are using tabs, instead of child pages.
If I’m right, could someone direct me to a resource to get that feature, as I’m desperately looking for a fluid solution like the one they have in that page?
Many thanks,
Pradeep
Andrew Roberts
For the non-shortcode option, you might want to let users know they need to either change
return $string;
toecho $string;
orin their page template echo out the function
echo page_list_child_pages();
Thanks to Erik for pointing this out above
Meredith Adams
Thank you!
Gaby
Thank you! I was wondering why the code wouldn’t work…
Howard
Hi, I can get this to work when I am visiting my domain with a subdirectory (e.g – example.com/home) but when viewing the site without this (example.com) the list of sub pages is not listed. Can anyone point me as to where I am going wrong?
Thanks in advance – very new to WordPress.
Emily Jennewein
How do you get this function to display the parent page itself at the top of the list along with the list of child and grandchild pages? On the child pages it does not list the parent page.
Michael
how can i customized this to just display the child page of a specific page?
Yester
How do u add a active class on the current ?
Jenny
Is there now a plugin that can do same ?
and also can we decide where the box with submenus pages will go in any are of the page not just top of page? Using a plugin
WPBeginner Staff
Yes it can be used for custom post types. Like this:
function wpb_list_child_pages() {
global $post;
if ( 'movie' == get_post_type() && $post->post_parent )
$childpages = wp_list_pages( 'post_type=movie&sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
$childpages = wp_list_pages( 'post_type=movie&sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
if ( $childpages ) {
$string = '' . $childpages . '';
}
return $string;
}
add_shortcode('wpb_childpages', 'wpb_list_child_pages');
Daniela
This is great! Is there a way to do the same for Custom Post Types that have child posts?
Caroline
Also wondering!
If anyone knows, please help!
dpc
Is there a way to modify this in order to print custom post type child posts on a custom post type post page? Thanks, it is very handy!
Sokeara
It’s very greate for me! Anyways I would like to know how can I display title and thumbnail of child page to parent page.
Ashley Bell
Hi, I have the same query. I really like how the list is styled on the Beginners Blueprint page but I have no idea how to start. Can someone recommend an article to read or give some advice, thanks.
Razvan Zamfir
Hello!
Nice snippet, but how do I list only grandchild pages?
Thank you!
amitabha197
There is an error in the pages which are not having child pages so I have slightly modified
if( count($childpages) != 0 ) {
$string = ” . $childpages . ”;
}
instead of
if( $childpages ){
$string = ” . $childpages . ”;
}
WPBeginner Staff
In order to execute a shortcode in WordPress templates you need to add it like this:
Matt Rock
I couldn’t get the template code „wpb_list_child_pages();” to work, but echo shortcode did the trick. Cheers!
Erik
Just change the „return $string” to „echo $string” (this will print out the pages).
fariha
thanks, it worked
Coen Siebenheller
I’ve added the code to the functions.php and when i add the [wpb_childpages] shortcode in side my text it works. But when try to add to one of my templates it doesn’t show a thing. Anybody knows what i’m doing wrong?
Elena Rapisardi
Great explanation!!
Is there a way to display always the parent pages?
Quin
This is brilliant, thanks.
Is there a way to adapt it so the Parent displays the Grandchild, and not the Child?
Dejan
Great function , thanks !
Richelly Italo
The great idea, thanks dude.
Steph
Can you tell us how to stop the list at the first level? I’d like to show all the subpages of that parent, but not the subpages’ children. Thanks.
Stefan
Just add &depth=1
sort_column=menu_order&title_li=&child_of=’ . $post->post_parent . '&echo=0&depth=1
Martin Capodici
Great. I love this idea of a site plugin and seeing the code you are adding (so you know it is clean and doesn’t do bad stuff) rather than relying on some plugin that could be installing anything.
For something as simple as listing child pages I agree it should be part of a larger plugin rather than just one plugin otherwise you end up with so many plugins it is hard to keep track.
Rishi Gangoly
This is great. I had a page on my website called „Services” and was manually linking the sub-pages, but not any more. Awesome. Thanks for this tip. Worked like a charm and did exactly what I was doing manually.
Bojan
This is great! Putting it in a plugin is great feature and great opportunity to extend functionality by adding:
– child page featured image (as thumbnail)
– child Title
– rest of the meta (author, date, comment count)
– styling in columns maybe
and so on
This way, we would have almost complete Portfolio plugin – portfolios made of Pages rather than just made of custom post types.
Thank you..
Ivica
The Best plugin for displaying child pages on a sidebar for those who want even faster and „cleaner” child-pages-navigation:
http://wordpress.org/plugins/child-page-navigation/
yousef mayeli
hi there
thanks it was very useful . but if you could show it by video it was very more useable.as tyler moor would do
thanks
yousef
Nancy
This is great! I have a lot of manually added links to child pages, and this is going to make maintaining our site MUCH easier. I’ve just been testing in my development environment, and I’d like to tweak the function a little bit, so that on a child page, when the shortcode is included, all of the children of the same parent are listed EXCEPT for the currently displayed page. I’m really still learning PHP, so while I’ll be trying to figure this one out on my own, I’d welcome any assistance in making that change to the code.