querry posts parent and child
-
Sehr geehrte Community,
ich bräuchte unbedingt Hilfe. Ich habe natürlich bereits versucht diese Topic zu finden, allerdings ohne Erfolg.
Ich versuche ein One Page Layout zu basteln.
habe dafür auch bereits folgenden Seitenaufbau:<?php query_posts('post_type=page&order=ASC&orderby=header_menu'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="mainPage"> <h1 id="title_<?php the_ID(); ?>"><?php the_title(); ?></h1> <?php the_content(); ?> </div> <?php endwhile; endif; ?>
Allerdings würde ich gerne, dass die Childpages direkt unter den Parents aufgelistet werden, wie ich euch hier aufgezeichnet habe.
dH doof gesagt Parent Pages 100% width und wenn sie eine Childpage haben, die direkt drunter in 50% width.
Ich würde mich sehr über eine Hilfe freuen.
potthe
-
Starten wir damit, dass du
query_posts
nicht mehr benutzt, sondernWP_Query
:
https://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-postsDanach sollte es mit einer Überprüfung auf Childs relativ einfach möglich sein. Was machst du bei einer ungeraden Anzahl von Kind-Elementen in deinem Layout?
Gruß, Torsten
Puh ähm Danke 🙂 , ich versuche gerade erfolglos das auf wp_querry um zu stellen.. -.-
zu den Childs:
ich hatte mir das so gedacht, dass ich sie einfach hintereinander weg legen werde, mittels css: display-flex. würde dann in etwa so aussehenDanke, potthe
Sorry für den vorrigen, überschnellen Kommentar (..erfolglos..) -.-
Okay, nun konnte ich das schon einmal auf wp_query umstellen (Danke für den Hinweis!)<?php $ptth_query = new WP_Query('post_type=page&order=ASC&orderby=header_menu'); while($ptth_query->have_posts()) : $ptth_query->the_post(); ?> <div class="mainPage"> <div <?php post_class(); ?> id="title_<?php the_ID(); ?>"> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <?php the_content(); ?> </div> </div> <?php endwhile; ?> <?php wp_reset_postdata(); ?>
Wie kann ich dem nun noch das Anliegen mit den Childs hinzufügen?
Danke, potthe
- Diese Antwort wurde geändert vor 6 Jahren, 5 Monaten von potthe.
header_menu
ist keine gültige Eigenschaft für das Attributorder_by
. Probier malmenu_order
. (vgl. https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters)ja ich hatte da ein wenig herumprobiert. Aktuell sieht der Code wie folgt aus:
<?php $ptth_query = new WP_Query('post_type=page&order=ASC&orderby=menu_order'); while($ptth_query->have_posts()) : $ptth_query->the_post(); ?> <div class="mainPage"> <div <?php post_class(); ?> id="title_<?php the_ID(); ?>"> <h1><?php the_title(); ?></h1> <?php the_content(); ?> </div> </div> <?php endwhile; ?> <?php wp_reset_postdata(); ?>
Meine Problematik steckt auch eher dadrin, das Layout wie gewünscht hinzubekommen, dH wenn ein Parent Element ein Child Element hat, das dieses direkt dadrunter in 50% width angezeigt wird. Auch sollte es eine ungerade Anzahl an Childs sein, sollten diese einfach hintereinander gelegt werden, sodass sie sich einreihen (floaten, oder flex box).
Danach sollte es mit einer Überprüfung auf Childs relativ einfach möglich sein.
Wie stell ich das an?
Ich brauch echt Hilfe, danke.
pottheÜberprüfung auf Childs:
https://wordpress.stackexchange.com/questions/35724/function-to-return-true-if-current-page-has-child-pagesDie Frage enthält auch eine Abfrage zu is_subpage, die du zusätzlich nutzen kannst, um Unterseiten auszuschließen, so dass du keine Dopplungen hast.
Für eine ausführlichere Lösung habe ich leider gerade keine Zeit. Aber vielleicht kommst du oder jemand anders mit diesem Start schon weiter …
Gruß, Torsten
Ich danke dir, für deine Hilfe trotz deines eigenen strengen Terminkalenders.
Ich habe es ein wenig ausprobiert, weiss aber nicht ob dies die Sicherste und Ressourcen optimierteste Version ist -.- //scheint aber zu funktionieren..
Mag da vllt nochmals jemand rüber gucken und mir sagen obs passt, oder nicht..!? Wäre sehr nett, danke.Aktuell floate ich die Subpages, aber dieses Verfahren möchte ich noch mit flex box realisieren.
<?php $ptth_query = new WP_Query('post_type=page&order=ASC&orderby=menu_order&post_parent=0'); while($ptth_query->have_posts()) : $ptth_query->the_post(); ?> <div class="mainPage"> <div <?php post_class(); ?> id="title_<?php the_ID(); ?>"></div> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <!-- ptth_SubPages --> <?php $ptth_subpages = get_pages( array( 'child_of' => $post->ID, 'sort_column' => 'menu_order', 'sort_order' => 'asc' ) ); foreach( $ptth_subpages as $page ) { $content = $page->post_content; if ( ! $content ) continue; $content = apply_filters( 'the_content', $content ); ?> <div class="subPage"> <h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2> <?php echo $content; ?> </div> <?php } ?> </div> <?php endwhile; ?> <?php wp_reset_postdata(); ?>
Danke für eure Hilfe, potthe.
- Diese Antwort wurde geändert vor 6 Jahren, 5 Monaten von potthe.
Hm, Moin Moin again 🙂
Ich benötige echt Hilfe und ja ich bin nicht der Einzige 😀
Doof gesagt, will ich gar keine Arbeitsabnahme, Anstöße reichen mir schon!Folgender Code:
<?php $ptth_query = new WP_Query('post_type=page&order=ASC&orderby=menu_order&post_parent=0'); while($ptth_query->have_posts()) : $ptth_query->the_post(); ?> <div id="mainPage_<?php the_ID(); ?>" class="mainPage"> <div <?php post_class(); ?> id="title_<?php the_ID(); ?>"></div> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <?php global $post; dynamic_sidebar( 'pttheme_content_sidebar_'.$post->post_name ); ?> <!-- ptth_SubPages --> <?php $ptth_subpages = get_pages( array( 'child_of' => $post->ID, 'sort_column' => 'menu_order', 'sort_order' => 'asc' ) ); foreach( $ptth_subpages as $page ) { $content = $page->post_content; if ( ! $content ) continue; $content = apply_filters( 'the_content', $content ); ?> <div class="subPage"> <div <?php post_class(); ?> id="subtitle_<?php the_ID(); ?>"></div> <h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2> <?php echo $content; ?> </div> <?php } ?> </div><hr class="page_hr" /> <?php endwhile; ?> <?php wp_reset_postdata(); ?>
Folgendes !wichtiges! Anliegen:
Ich würde nun gerne, dass wenn eine Page die Beitragsseite ist, dass natürlich auch die Beiträge dann angezeigt werden.Letztere (eher unwichtigere) Anliegen:
ich habe bereits dem Content und der Sidebar ids gegeben, damit ich sie einzelnd ansprechen kann. Via der functions.php habe ich dann versucht zu sagen, dass wenn eine page eine sidebar aktiviert hat, dass der content (ich sag mal) width: 80%; und die sidebar dann width: 20%; ist. ich habe versucht das via js mit documentgetelemetbyid oder per php if(..) + css display: block/ none und wieder einbinden. Alles nicht geklappt.Ich weiss es gibt immer wichtigeres, aber ich würde mich wirklich sehr über eine Hilfe freuen.! (Wer nicht..)
In diesem Sinne, wünsche ich ein wunderschönes Wochenende.Peace, potthe
Okay, anscheinend dumme Frage gewesen,…
also ich gucke gerade, wie ich einen UND Operator einbinden kann, weil aktuell wird mir immer der hintere Wert angezeigt,
entweder: post type > page
hier: post type > post<?php $ptth_query = new WP_Query(array('post_type' => 'page','post_type' => 'post','order' => 'ASC','orderby' => 'menu_order','post_parent' => 0) );
Sorry und thanks 4 help..
Erstell mal eine Seite „Versuch“ und füge in deinem Child Theme ein neues Template
page-versuch.php
mit folgendem Inhalt hinzu:<?php get_header(); $args = array( 'post_type' => 'page', 'post_parent' => '0', ); $query = new WP_query( $args ); while ( $query->have_posts() ) : $query->the_post(); echo $post->ID . ':' . get_the_title() . '<br>'; // get their children $children = get_children( array( 'post_type' => 'page', 'post_parent' => $post->ID, ) ); foreach ( $children as $child ) { echo ' ' . $child->post_title . '<br>'; } // if posts page, get posts if ( get_option( 'page_for_posts' ) == $post->ID ) { $blog_posts = fetch_my_posts(); foreach ( $blog_posts as $single_post ) { echo ' ' . $single_post->post_title . '<br>'; } } endwhile; function fetch_my_posts() { $args = array( 'post_type' => 'post', 'post_status' => 'publish', ); return get_posts( $args ); } wp_reset_postdata(); get_footer();
Im Ergebnis solltest du auf der Seite „Versuch“ eine Auflistung der Seiten- und Beitragstitel sehen, die sinngemäß so aussieht:
Startseite (statische Startseite)
Unser Abteilungen
-Abteilung 1 (Unterseite)
-Abteilung 2 (Unterseite)
Über uns
Blog (Blog-Seite)
-Beitrags-Titel 1
-Beitrags-Titel 2
-Beitrags-Titel 3
ImpressumDamit werden
- Alle Seiten aufgeführt, die nicht Unterseite sind
- Unterseiten, wenn sie zu einer unter 1 aufgeführten Seite gehören
- Blogbeiträge, wenn die unter 1 aufgeführte Seite die Blogseite ist.
Ich habe bei dem Code-Beispiel erst einmal alle zusätzlichen Argumente und <div>-Tags rausgemschmissen, damit man überhaupt erstmal durchblickt. Das kannst du dann später wieder hinzufügen. Aus den gleichen Gründen habe ich auch nur die Titel und nicht den Inhalt ausgegeben.
Was die Aufteilung mit/ohne Sidebar angeht, würde ich unterschiedliche Seiten-Templates „volle Breite“ und „ohne Sidebar“ nehmen und dann in diesen Templates dem Inhaltsbereich eine entsprechende CSS-Klasse geben (.full bzw .with-sidebar).
Ou yeah man! Ich danke dir von Herzen!!, jetzt nur noch die Contents ausbringen ist ease!!
Peace, potthe
Besser wäre es, für den Abruf der Unterseiten und Blogbeiträge jeweils einzelne Funktionen zu schreiben. Im Moment ist das unnötig verschachtelt und damit unübersichtlich. Aber du machst das schon …
Sagst du? hmmmm..
Ich mach ma zu Ende und dann zeig ich ma was ich damit machen wollte, ist es ok wenn ich dir dann ne PM schicke?Hier im Forum können wir uns gerne austauschen,
dann haben vielleicht auch andere was davon. 🙂
- Das Thema „querry posts parent and child“ ist für neue Antworten geschlossen.