如何在这个Header.php中切换菜单位置?

时间:2018-05-08 作者:XaWin

我正在使用Divi主题by ElegantTheme。我一直在尝试切换二级菜单和主菜单的位置。

据我所知,我需要和header.php in a child theme, 像they do for another modification on the secondary menu.

但坦率地说,我不知道该怎么改变。。。

我已经阅读了这段代码,但我还不清楚它的作用和应该更改什么。有人有线索吗?

Accepted answer & chosen solution

从代码的角度来看,所需的更改并不简单,需要付出太多的努力。因此,我将保持主题现在的状态,不更改我的子主题中的任何内容。

目前,这个功能在我的开发中不是优先考虑的,我将使用二级菜单的视觉部分,而不是试图使其适合我的需要。

代码部件

header.php

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo( \'charset\' ); ?>" />
<?php
    elegant_description();
    elegant_keywords();
    elegant_canonical();

    /**
     * Fires in the head, before {@see wp_head()} is called. This action can be used to
     * insert elements into the beginning of the head before any styles or scripts.
     *
     * @since 1.0
     */
    do_action( \'et_head_meta\' );

    $template_directory_uri = get_template_directory_uri();
?>

    <link rel="pingback" href="<?php bloginfo(\'pingback_url\'); ?>" />

    <script type="text/javascript">
        document.documentElement.className = \'js\';
    </script>

    <?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php
    $product_tour_enabled = et_builder_is_product_tour_enabled();
    $page_container_style = $product_tour_enabled ? \' style="padding-top: 0px;"\' : \'\'; ?>
    <div id="page-container"<?php echo $page_container_style; ?>>
<?php
    if ( $product_tour_enabled || is_page_template( \'page-template-blank.php\' ) ) {
        return;
    }

    $et_secondary_nav_items = et_divi_get_top_nav_items();

    $et_phone_number = $et_secondary_nav_items->phone_number;

    $et_email = $et_secondary_nav_items->email;

    $et_contact_info_defined = $et_secondary_nav_items->contact_info_defined;

    $show_header_social_icons = $et_secondary_nav_items->show_header_social_icons;

    $et_secondary_nav = $et_secondary_nav_items->secondary_nav;

    $et_top_info_defined = $et_secondary_nav_items->top_info_defined;

    $et_slide_header = \'slide\' === et_get_option( \'header_style\', \'left\' ) || \'fullscreen\' === et_get_option( \'header_style\', \'left\' ) ? true : false;
?>

    <?php if ( $et_top_info_defined && ! $et_slide_header || is_customize_preview() ) : ?>
        <?php ob_start(); ?>
        <div id="top-header"<?php echo $et_top_info_defined ? \'\' : \'style="display: none;"\'; ?>>
            <div class="container clearfix">

            <?php if ( $et_contact_info_defined ) : ?>

                <div id="et-info">
                <?php if ( \'\' !== ( $et_phone_number = et_get_option( \'phone_number\' ) ) ) : ?>
                    <span id="et-info-phone"><?php echo et_sanitize_html_input_text( $et_phone_number ); ?></span>
                <?php endif; ?>

                <?php if ( \'\' !== ( $et_email = et_get_option( \'header_email\' ) ) ) : ?>
                    <a href="<?php echo esc_attr( \'mailto:\' . $et_email ); ?>"><span id="et-info-email"><?php echo esc_html( $et_email ); ?></span></a>
                <?php endif; ?>

                <?php
                if ( true === $show_header_social_icons ) {
                    get_template_part( \'includes/social_icons\', \'header\' );
                } ?>
                </div> <!-- #et-info -->

            <?php endif; // true === $et_contact_info_defined ?>

                <div id="et-secondary-menu">
                <?php
                    if ( ! $et_contact_info_defined && true === $show_header_social_icons ) {
                        get_template_part( \'includes/social_icons\', \'header\' );
                    } else if ( $et_contact_info_defined && true === $show_header_social_icons ) {
                        ob_start();

                        get_template_part( \'includes/social_icons\', \'header\' );

                        $duplicate_social_icons = ob_get_contents();

                        ob_end_clean();

                        printf(
                            \'<div class="et_duplicate_social_icons">
                                %1$s
                            </div>\',
                            $duplicate_social_icons
                        );
                    }

                    if ( \'\' !== $et_secondary_nav ) {
                        echo $et_secondary_nav;
                    }

                    et_show_cart_total();
                ?>
                </div> <!-- #et-secondary-menu -->

            </div> <!-- .container -->
        </div> <!-- #top-header -->
    <?php
        $top_header = ob_get_clean();

        /**
         * Filters the HTML output for the top header.
         *
         * @since ??
         *
         * @param string $top_header
         */
        echo apply_filters( \'et_html_top_header\', $top_header );
    ?>
    <?php endif; // true ==== $et_top_info_defined ?>

    <?php if ( $et_slide_header || is_customize_preview() ) : ?>
        <?php ob_start(); ?>
        <div class="et_slide_in_menu_container">
            <?php if ( \'fullscreen\' === et_get_option( \'header_style\', \'left\' ) || is_customize_preview() ) { ?>
                <span class="mobile_menu_bar et_toggle_fullscreen_menu"></span>
            <?php } ?>

            <?php
                if ( $et_contact_info_defined || true === $show_header_social_icons || false !== et_get_option( \'show_search_icon\', true ) || class_exists( \'woocommerce\' ) || is_customize_preview() ) { ?>
                    <div class="et_slide_menu_top">

                    <?php if ( \'fullscreen\' === et_get_option( \'header_style\', \'left\' ) ) { ?>
                        <div class="et_pb_top_menu_inner">
                    <?php } ?>
            <?php }

                if ( true === $show_header_social_icons ) {
                    get_template_part( \'includes/social_icons\', \'header\' );
                }

                et_show_cart_total();
            ?>
            <?php if ( false !== et_get_option( \'show_search_icon\', true ) || is_customize_preview() ) : ?>
                <?php if ( \'fullscreen\' !== et_get_option( \'header_style\', \'left\' ) ) { ?>
                    <div class="clear"></div>
                <?php } ?>
                <form role="search" method="get" class="et-search-form" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
                    <?php
                        printf( \'<input type="search" class="et-search-field" placeholder="%1$s" value="%2$s" name="s" title="%3$s" />\',
                            esc_attr__( \'Search &hellip;\', \'Divi\' ),
                            get_search_query(),
                            esc_attr__( \'Search for:\', \'Divi\' )
                        );
                    ?>
                    <button type="submit" id="searchsubmit_header"></button>
                </form>
            <?php endif; // true === et_get_option( \'show_search_icon\', false ) ?>

            <?php if ( $et_contact_info_defined ) : ?>

                <div id="et-info">
                <?php if ( \'\' !== ( $et_phone_number = et_get_option( \'phone_number\' ) ) ) : ?>
                    <span id="et-info-phone"><?php echo et_sanitize_html_input_text( $et_phone_number ); ?></span>
                <?php endif; ?>

                <?php if ( \'\' !== ( $et_email = et_get_option( \'header_email\' ) ) ) : ?>
                    <a href="<?php echo esc_attr( \'mailto:\' . $et_email ); ?>"><span id="et-info-email"><?php echo esc_html( $et_email ); ?></span></a>
                <?php endif; ?>
                </div> <!-- #et-info -->

            <?php endif; // true === $et_contact_info_defined ?>
            <?php if ( $et_contact_info_defined || true === $show_header_social_icons || false !== et_get_option( \'show_search_icon\', true ) || class_exists( \'woocommerce\' ) || is_customize_preview() ) { ?>
                <?php if ( \'fullscreen\' === et_get_option( \'header_style\', \'left\' ) ) { ?>
                    </div> <!-- .et_pb_top_menu_inner -->
                <?php } ?>

                </div> <!-- .et_slide_menu_top -->
            <?php } ?>

            <div class="et_pb_fullscreen_nav_container">
                <?php
                    $slide_nav = \'\';
                    $slide_menu_class = \'et_mobile_menu\';

                    $slide_nav = wp_nav_menu( array( \'theme_location\' => \'primary-menu\', \'container\' => \'\', \'fallback_cb\' => \'\', \'echo\' => false, \'items_wrap\' => \'%3$s\' ) );
                    $slide_nav .= wp_nav_menu( array( \'theme_location\' => \'secondary-menu\', \'container\' => \'\', \'fallback_cb\' => \'\', \'echo\' => false, \'items_wrap\' => \'%3$s\' ) );
                ?>

                <ul id="mobile_menu_slide" class="<?php echo esc_attr( $slide_menu_class ); ?>">

                <?php
                    if ( \'\' == $slide_nav ) :
                ?>
                        <?php if ( \'on\' == et_get_option( \'divi_home_link\' ) ) { ?>
                            <li <?php if ( is_home() ) echo( \'class="current_page_item"\' ); ?>><a href="<?php echo esc_url( home_url( \'/\' ) ); ?>"><?php esc_html_e( \'Home\', \'Divi\' ); ?></a></li>
                        <?php }; ?>

                        <?php show_page_menu( $slide_menu_class, false, false ); ?>
                        <?php show_categories_menu( $slide_menu_class, false ); ?>
                <?php
                    else :
                        echo( $slide_nav );
                    endif;
                ?>

                </ul>
            </div>
        </div>
    <?php
        $slide_header = ob_get_clean();

        /**
         * Filters the HTML output for the slide header.
         *
         * @since ??
         *
         * @param string $top_header
         */
        echo apply_filters( \'et_html_slide_header\', $slide_header );
    ?>
    <?php endif; // true ==== $et_slide_header ?>

    <?php ob_start(); ?>
        <header id="main-header" data-height-onload="<?php echo esc_attr( et_get_option( \'menu_height\', \'66\' ) ); ?>">
            <div class="container clearfix et_menu_container">
            <?php
                $logo = ( $user_logo = et_get_option( \'divi_logo\' ) ) && \'\' != $user_logo
                    ? $user_logo
                    : $template_directory_uri . \'/images/logo.png\';

                ob_start();
            ?>
                <div class="logo_container">
                    <span class="logo_helper"></span>
                    <a href="<?php echo esc_url( home_url( \'/\' ) ); ?>">
                        <img src="<?php echo esc_attr( $logo ); ?>" alt="<?php echo esc_attr( get_bloginfo( \'name\' ) ); ?>" id="logo" data-height-percentage="<?php echo esc_attr( et_get_option( \'logo_height\', \'54\' ) ); ?>" />
                    </a>
                </div>
            <?php
                $logo_container = ob_get_clean();

                /**
                 * Filters the HTML output for the logo container.
                 *
                 * @since ??
                 *
                 * @param string $logo_container
                 */
                echo apply_filters( \'et_html_logo_container\', $logo_container );
            ?>
                <div id="et-top-navigation" data-height="<?php echo esc_attr( et_get_option( \'menu_height\', \'66\' ) ); ?>" data-fixed-height="<?php echo esc_attr( et_get_option( \'minimized_menu_height\', \'40\' ) ); ?>">
                    <?php if ( ! $et_slide_header || is_customize_preview() ) : ?>
                        <nav id="top-menu-nav">
                        <?php
                            $menuClass = \'nav\';
                            if ( \'on\' == et_get_option( \'divi_disable_toptier\' ) ) $menuClass .= \' et_disable_top_tier\';
                            $primaryNav = \'\';

                            $primaryNav = wp_nav_menu( array( \'theme_location\' => \'primary-menu\', \'container\' => \'\', \'fallback_cb\' => \'\', \'menu_class\' => $menuClass, \'menu_id\' => \'top-menu\', \'echo\' => false ) );

                            if ( \'\' == $primaryNav ) :
                        ?>
                            <ul id="top-menu" class="<?php echo esc_attr( $menuClass ); ?>">
                                <?php if ( \'on\' == et_get_option( \'divi_home_link\' ) ) { ?>
                                    <li <?php if ( is_home() ) echo( \'class="current_page_item"\' ); ?>><a href="<?php echo esc_url( home_url( \'/\' ) ); ?>"><?php esc_html_e( \'Home\', \'Divi\' ); ?></a></li>
                                <?php }; ?>

                                <?php show_page_menu( $menuClass, false, false ); ?>
                                <?php show_categories_menu( $menuClass, false ); ?>
                            </ul>
                        <?php
                            else :
                                echo( $primaryNav );
                            endif;
                        ?>
                        </nav>
                    <?php endif; ?>

                    <?php
                    if ( ! $et_top_info_defined && ( ! $et_slide_header || is_customize_preview() ) ) {
                        et_show_cart_total( array(
                            \'no_text\' => true,
                        ) );
                    }
                    ?>

                    <?php if ( $et_slide_header || is_customize_preview() ) : ?>
                        <span class="mobile_menu_bar et_pb_header_toggle et_toggle_<?php echo esc_attr( et_get_option( \'header_style\', \'left\' ) ); ?>_menu"></span>
                    <?php endif; ?>

                    <?php if ( ( false !== et_get_option( \'show_search_icon\', true ) && ! $et_slide_header ) || is_customize_preview() ) : ?>
                    <div id="et_top_search">
                        <span id="et_search_icon"></span>
                    </div>
                    <?php endif; // true === et_get_option( \'show_search_icon\', false ) ?>

                    <?php

                    /**
                     * Fires at the end of the \'et-top-navigation\' element, just before its closing tag.
                     *
                     * @since 1.0
                     */
                    do_action( \'et_header_top\' );

                    ?>
                </div> <!-- #et-top-navigation -->
            </div> <!-- .container -->
            <div class="et_search_outer">
                <div class="container et_search_form_container">
                    <form role="search" method="get" class="et-search-form" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
                    <?php
                        printf( \'<input type="search" class="et-search-field" placeholder="%1$s" value="%2$s" name="s" title="%3$s" />\',
                            esc_attr__( \'Search &hellip;\', \'Divi\' ),
                            get_search_query(),
                            esc_attr__( \'Search for:\', \'Divi\' )
                        );
                    ?>
                    </form>
                    <span class="et_close_search_field"></span>
                </div>
            </div>
        </header> <!-- #main-header -->
    <?php
        $main_header = ob_get_clean();

        /**
         * Filters the HTML output for the main header.
         *
         * @since ??
         *
         * @param string $main_header
         */
        echo apply_filters( \'et_html_main_header\', $main_header );
    ?>
        <div id="et-main-area">
    <?php
        /**
         * Fires after the header, before the main content is output.
         *
         * @since ??
         */
        do_action( \'et_before_main_content\' );

1 个回复
最合适的回答,由SO网友:D. Dan 整理而成

据我所知,这将是菜单之一:

$et_secondary_nav = $et_secondary_nav_items->secondary_nav;
这是另一个:

$primaryNav = wp_nav_menu( array( \'theme_location\' => \'primary-menu\', \'container\' => \'\', \'fallback_cb\' => \'\', \'menu_class\' => $menuClass, \'menu_id\' => \'top-menu\', \'echo\' => false ) );
此处显示第一个菜单:

if ( \'\' !== $et_secondary_nav ) {
    echo $et_secondary_nav;
}
第二个:

$primaryNav = \'\';

$primaryNav = wp_nav_menu( array( \'theme_location\' => \'primary-menu\', \'container\' => \'\', \'fallback_cb\' => \'\', \'menu_class\' => $menuClass, \'menu_id\' => \'top-menu\', \'echo\' => false ) );
if ( \'\' == $primaryNav ) :
?>
<ul id="top-menu" class="<?php echo esc_attr( $menuClass ); ?>">
    <?php if ( \'on\' == et_get_option( \'divi_home_link\' ) ) { ?>
        <li <?php if ( is_home() ) echo( \'class="current_page_item"\' ); ?>><a href="<?php echo esc_url( home_url( \'/\' ) ); ?>"><?php esc_html_e( \'Home\', \'Divi\' ); ?></a></li>
    <?php }; ?>

    <?php show_page_menu( $menuClass, false, false ); ?>
    <?php show_categories_menu( $menuClass, false ); ?>
</ul>
<?php
else :
    echo( $primaryNav );
endif;
我认为更改显示它的两个代码段应该可以做到这一点,但这并不意味着在更改这些代码段后就不需要额外的样式。

结束