Vortrag von Peter Singewald
Erstellt in reveal.js von Hakim El Hattab / @hakimel
<?php /* Template Name: OnePager */ ?>
Wir legen eine Seite/ Page mit Text an (im folgenden MainPage genannt). Dieser Text wird später als Einleitungstext verwendet.
Außerdem werden von dieser Seite alle Einstellungen übernommen (z.B. Metainformationen) aber vor allem das angegebenen Template.
Wir wählen unser One-Pager-Template aus.
Wir legen beliebig viele Seiten mit Inhalt an. Die Überschriften sind unbedeutend.
Wir gehen in Design/ Menü und legen ein Menü mit MainPage als erstem Element an.
Alle weiteren Seiten werden als Kindelement von MainPage angelegt. Die Reihenfolge nach gut Dünken festlegen.
Das Template lädt nicht den Standard-Head des Themes, da es das Layout einschränken würde. Ist aber denkbar.
<!DOCTYPE html> <html <?php language_attributes(); ?> class="no-js"> <head> <meta charset="<?php bloginfo( 'charset' ); ?>"> <meta name="viewport" content="width=device-width"> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>"> <!--[if lt IE 9]> <script src="<?php echo esc_url(get_template_directory_uri());?>/js/html5.js"> </script> <![endif]--> <?php wp_head(); ?> <?php $post = get_post( ); ?> <style> html {margin-top: 0px !important;} body::before {width:0px;} .build-block {height:auto;border: 1px solid grey;overflow:hidden;} </style> </head>
Das Template lädt nicht den Standard-Head des Themes, da es das Layout einschränken würde. Ist aber denkbar.
<body> <div id="page"> <header id="masthead" role="banner"> <div> <?php echo $post->post_content; ?> </div> </header> <?php // get_sidebar(); ?>
Das Template lädt nicht den Standard-Head des Themes, da es das Layout einschränken würde. Ist aber denkbar.
die eigentliche Magie:
<?php $args = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true, 'update_post_term_cache' => false ); $items = wp_get_nav_menu_items( $post->post_title, $args ); $counter = count($items); if ($counter > 0){ $parentId = $items[0]->ID; $elItems = array(); $menu = array(); for ($i = 1; $i < $counter; $i++){ if ($items[$i]->menu_item_parent != $parentId) continue; $elItems[] = array ( 'id' => $items[$i]->object_id, 'title' => $items[$i]->title ); $menu[] = '<li><a href="#' . $items[$i]->title . '">' . $items[$i]->title . '</a></li>'; } echo '<ul>' . implode ('', $menu) . '</ul>'; } ?>
Das Template lädt nicht den Standard-Head des Themes, da es das Layout einschränken würde. Ist aber denkbar.
die eigentliche Magie:
<br /> <div id="content"> <?php foreach ( $elItems as $element ) : $post = get_post($element['id']); ?> <div class="post build-block"> <a name="<?php echo $element['title']; ?>"></a> <?php echo $post->post_content ?> </div> <div style="clear:all"></div> <br/> <?php endforeach; ?> </div>
Das Template lädt nicht den Standard-Head des Themes, da es das Layout einschränken würde. Ist aber denkbar.
<br /> </div> <footer id="colophon" class="site-footer" role="contentinfo"> </footer> </div><!-- .site --> <?php wp_footer(); ?> </body> </html>
Der Rest der Seite:
<?php wp_footer(); ?> ähnelt wp_head und ist ein hook für alles, was am Ende der Seite ausgegeben werden soll.