Mit Kindseiten verschiedene Menüs anzeigen

  • Hallo,

    ich habe folgendes Problem. Ausgehend von einer statischen Startseite gelangt man zu 3 Projekten, die das gleiche Template (admired) beinhalten, jedoch verschiedene Menüs enthalten sollen. (WP Version 3.51)

    Link zur Hp:

    http://www.weiz-sozial.net

    Hierfür habe ich 3 Seiten mit den entsprechenden Kindseiten angelegt und in der functions.php 3 Menüs erstellt

    [size=8] //ein erstes Menü
    register_nav_menus( array(
    'primary1' => 'menue1'
    ) );

    usw.
    [/SIZE]
    Diese werden im Dashboard einwandfrei angezeigt.

    Folgende Funktion soll abfragen, ob es sich um Kindseiten handelt.

    [size=8]// functions.php[/SIZE]
    [size=8]// $page_slug = slug der Elternseite
    function is_child($page_slug)
    {
    global $post;
    $parent_page = get_page_by_path($page_slug);
    if( is_page() && ($post->post_parent == $parent_page->ID) ) {
    return TRUE;
    }
    return FALSE;
    }[/SIZE]

    Jetzt müsste ich noch mit einer if-Abfrage klären, dass bei einer entsprechenden Kindseite das richtige Menü angezeigt wird. (Derzeit werden nur die 3 Elternseiten im Menü in allen 3 Projekten angezeigt.)
    [size=10]if( is_child('slug-jugendwohlfahrt') ) {.....[/SIZE]


    Da ich mich mit php jedoch nicht so gut auskenne, weiß ich nun nicht weiter. Weiß vielleicht jemand Rat?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Danke für den Tipp. Hätte dann aber noch eine Frage. Um ein neues Template zu erstellen, brauche ich ja nur die page.php zu kopieren und zu benennen. Wie weise ich dem Template aber dann das jeweilige Menü zu?

    Die page.php sieht folgendermaßen aus:

    [size=8]<?php

    /*
    Template Name: startseite
    */

    /**
    * The template for displaying all pages.
    *
    * @since admired 1.0
    */


    ?>


    <div id="primary">
    <div id="content" role="main">

    <?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part( 'loop', 'page' ); ?>

    <?php if ( comments_open()):
    comments_template( '', true );
    endif; ?>
    <?php endwhile; // end of the loop. ?>
    </div><!-- #content -->
    </div><!-- #primary -->
    [/SIZE]

  • Die header.php sieht so aus:

    [size=8]<?php


    /**
    * The Header for our theme.
    *
    * @since admired 1.0
    */
    ?><!DOCTYPE html>
    <!--[if IE 6]> <html id="ie6" class="no-js" <?php language_attributes(); ?>> <![endif]-->
    <!--[if IE 7]> <html id="ie7" class="no-js" <?php language_attributes(); ?>> <![endif]-->
    <!--[if IE 8]> <html id="ie8" class="no-js" <?php language_attributes(); ?>> <![endif]-->
    <!--[if !(IE 6) | !(IE 7) | !(IE 8) ]><!-->
    <html class="no-js" <?php language_attributes(); ?>>
    <!--<![endif]-->
    <?php global $options;
    $options = get_option('admired_theme_options'); ?>
    <head>
    <meta charset="<?php bloginfo( 'charset' ); ?>" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php
    if ( !empty ($options['admired_hide_metainfo'])) {
    wp_title(''); /* this is compatible with SEO plugins */
    } else {
    /* Else Print the <title> tag.
    ----------------------------*/
    global $page, $paged;

    wp_title( '|', true, 'right' );
    bloginfo( 'name' ); // Name.
    $site_description = get_bloginfo( 'description', 'display' ); // Description
    if ( $site_description && ( is_home() || is_front_page() ) )
    echo " | $site_description";
    // Add page number:
    if ( $paged >= 2 || $page >= 2 )
    echo ' | ' . sprintf( __( 'Page %s', 'admired' ), max( $paged, $page ) );
    } ?> </title>
    <link rel="profile" href="http://gmpg.org/xfn/11" />
    <link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>" />
    <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
    <?php
    /* JavaScript for threaded comments.
    ----------------------------------*/
    if ( is_singular() && get_option( 'thread_comments' ) )
    wp_enqueue_script( 'comment-reply' );

    /* wp_head() before closing </head> tag.
    ---------------------------------------*/
    wp_head();
    ?>
    </head>

    <body <?php body_class(); ?>>
    <div id="head-wrapper">


    <?php /* ======== TOP MENU ======== */
    if ( isset ($options['admired_show_secondary_menu'])&& ($options['admired_show_secondary_menu'] != "") ) {
    get_template_part('top','menu'); } else { echo "";}?>
    <header id="branding" role="banner">
    <div id="header-group" class="clearfix">
    <div id="header-logo">
    <?php
    if ( ! empty( $options['admired_hide_title_discription'] ) && $options['admired_header_logo'] ) { ?>
    <a href="<?php echo esc_url( home_url( '/' ) ); ?>"><span id="header-link"> </span></a>
    <?php } ?>
    <hgroup>
    <h1 id="site-title"><span><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></span></h1>
    <h2 id="site-description"><?php bloginfo( 'description' ); ?></h2>
    </hgroup>
    <?php
    if ( isset ($options['admired_search_placement'])&& ($options['admired_search_placement'] == "Header") ) {
    get_search_form(); }
    if ( isset ($options['admired_show_social_icons'])&& ($options['admired_show_social_icons'] != "") ) {
    get_template_part('header','social');} else { echo "";}
    ?>
    </div>
    </div>
    </header><!-- #branding -->
    </div><!-- #head-wrapper -->
    <div id="page" class="hfeed">
    <?php /* ======== BOTTOM MENU ======== */
    get_template_part('bottom','menu'); ?>
    <div id="main">[/SIZE]

    Soviel ich da rauslese, ist das Menü in der bottom-menu.php gespeichert. Die sieht so aus:

    [size=8]<?php

    /**
    * Bottom Primary Menu.
    *
    * @since admired 1.0
    */
    global $options;
    $options = get_option('admired_theme_options'); ?>
    <div id="nav-bottom-menu">
    <div id="nav-bottom-wrap">
    <nav id="nav-menu2" role="navigation">
    <h3 class="assistive-text"><?php _e( 'Main menu', 'admired' ); ?></h3>
    <?php /* Allow screen readers to skip the navigation. */ ?>
    <div class="skip-link"><a class="assistive-text" href="#content" title="<?php esc_attr_e( 'Skip to primary content', 'admired' ); ?>"><?php _e( 'Skip to primary content', 'admired' ); ?></a></div>
    <div class="skip-link"><a class="assistive-text" href="#secondary" title="<?php esc_attr_e( 'Skip to secondary content', 'admired' ); ?>"><?php _e( 'Skip to secondary content', 'admired' ); ?></a></div>
    <?php /* Our navigation menu. */ ?>
    <?php if ( isset ($options['admired_remove_superfish']) && ($options['admired_remove_superfish']!="") )
    wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => '[COLOR=#b22222]primary[/COLOR]' ) );
    else
    wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => '[COLOR=#800000]primary[/COLOR]', 'menu_class' => 'sf-menu','fallback_cb' => 'admired_page_menu' ) );?>
    <?php /* Search in menu. */ ?>
    <?php if ( isset ($options['admired_search_placement'])&& ($options['admired_search_placement'] != "Menu") ) {
    echo '';
    } else{
    get_search_form(); } ?>
    </nav><!-- #nav-menu2 -->
    </div>
    </div>[/SIZE]

    Wenn ich die rot markierten Teile auf meinen 2. Menünamen ändere, wird das andere Menü angezeigt. Daher habe ich 2 weitere header.php und bottom-menu.php angelegt mit den Änderungen. Wenn ich dann allerdings das Template zuweise bekomme ich diese Fehlermeldung:

    Fatal error: Call to undefined function get_header2() in /home/.sites/384/site2614/web/wp-content/themes/admired/page_jugendwohlfahrt.php on line 13

    Was mache ich da falsch?

  • get_header() ist eine WP Funktion - du kannst nicht einfach get_header2() aufrufen ;)
    Du rufst andere php Dateien damit auf: http://codex.wordpress.org/Function_Refer…t_template_part
    also get_template_part('header2.php');

    Alles was du zu einem Page Template wissen musst, steht hier: http://codex.wordpress.org/Page_Templates

    Das Menü änderst du dann im jeweiligen Template wo eben das andere Menü erscheinen soll. Deine page.php schaut seltsam aus, da nie die header.php aufgerufen wird. Am einfachsten wär es nämlich, wenn du den Code von der header.php in die page.php kopierst anstelle des get_header(). Aber natürlich nur wenn das Menü in der header.php ist.

  • Danke für eure Hilfe. Hab jetzt einfach die .php wo mein Menü drin stand in die header.php kopiert und die dann in die page.php

    Jetzt funktioniert alles super!!! :razz:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!