it-swarm.xyz

Где определяется расположение темы для главного меню в шаблоне WordPress?

Я довольно новичок в WordPress (я из Joomla), и у меня есть следующие сомнения, связанные с Theme Location в главном меню.

Например, используя предустановленную тему Twenty Twelve , если в бэкэнде я захожу в: Внешний вид ---> Меню ---> Управление местоположением Я могу назначить свое главное меню только в определенное расположение темы named Основное меню .

Я думаю, что эта область находится в header.php файле темы Twenty Twelve (потому что мое главное меню отображается в заголовке страницы), но я не могу найти его, это header.php content:

<?php
/**
 * The Header template for our theme
 *
 * Displays all of the <head> section and everything up till <div id="main">
 *
 * @package WordPress
 * @subpackage Twenty_Twelve
 * @since Twenty Twelve 1.0
 */
?><!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" <?php language_attributes(); ?>>
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" <?php language_attributes(); ?>>
<![endif]-->
<!--[if !(IE 7) | !(IE 8)  ]><!-->
<html <?php language_attributes(); ?>>
<!--<![endif]-->
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
<?php // Loads HTML5 JavaScript file to add support for HTML5 elements in older IE versions. ?>
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
<?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>
<div id="page" class="hfeed site">
    <header id="masthead" class="site-header" role="banner">
        <hgroup>
            <h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
            <h2 class="site-description"><?php bloginfo( 'description' ); ?></h2>
        </hgroup>

        <nav id="site-navigation" class="main-navigation" role="navigation">
            <h3 class="menu-toggle"><?php _e( 'Menu', 'twentytwelve' ); ?></h3>
            <a class="assistive-text" href="#content" title="<?php esc_attr_e( 'Skip to content', 'twentytwelve' ); ?>"><?php _e( 'Skip to content', 'twentytwelve' ); ?></a>
            <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
        </nav><!-- #site-navigation -->

        <?php if ( get_header_image() ) : ?>
        <a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php header_image(); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a>
        <?php endif; ?>
    </header><!-- #masthead -->

    <div id="main" class="wrapper">

Где это Основное меню или как оно определяется в теме?

Tnx

Andrea

1
AndreaNobili

Расположение меню определяется в functions.php

Вы можете прочитать кодекс для получения дополнительной информации о том, как определить расположение меню в functions.php

Регистрация меню

Во-первых, в файле functions.php вашей темы вам необходимо написать функцию для регистрации имен ваших меню. (Вот как они будут отображаться на экране "Внешний вид -> Меню администратора".) Например, это меню будет отображаться в поле "Расположение тем" как "Меню заголовка".

function register_my_menu() {
  register_nav_menu('header-menu',__( 'Header Menu' ));
}
add_action( 'init', 'register_my_menu' );

И это приведет к появлению двух опций меню, меню заголовка и дополнительного меню -

function register_my_menus() {
  register_nav_menus(
    array(
      'header-menu' => __( 'Header Menu' ),
      'extra-menu' => __( 'Extra Menu' )
    )
  );
}
add_action( 'init', 'register_my_menus' );

Показать меню на тему

Как только вы это сделаете, ваша тема будет почти готова. Последний шаг подготовки - сообщить теме, где вы хотите, чтобы меню отображались. Вы делаете это в соответствующем файле темы. Так, например, мы могли бы хотеть, чтобы наше меню заголовка было в header.php. Так что откройте этот файл в редакторе тем и решите, куда вы хотите поместить свое меню. Здесь используется код wp_nav_menu, который нам понадобится один раз для каждого места в меню. Итак, добавьте этот код -

<?php wp_nav_menu( array( 'theme_location' => 'header-menu' ) ); ?>

Все, что вам нужно, это убедиться, что theme_location указывает на имя, которое вы указали для своего меню в коде functions.php выше. (Обратите внимание, что здесь используется меню заголовка, а не меню заголовка без дефиса. Заголовок меню - это имя, которое понимает код, меню заголовка - это удобочитаемая версия, которую вы видите на странице администратора.)

Чтобы завершить код, вы можете поместить ваше дополнительное меню в другом месте. Может быть, вы хотите меню на одной из ваших страниц, например, и вы могли бы даже хотеть, чтобы оно было немного озадачено содержащим DIV определенного класса -

wp_nav_menu( array( 'theme_location' => 'extra-menu', 'container_class' => 'my_extra_menu_class' ) );

Таким образом, вы поместите вышеперечисленное в шаблон страницы, и меню будет отображаться не только там, где вы его поместите, оно будет стилизовано как my_extra_menu_class, чтобы вы могли работать с этим в CSS.

7
Steve

Вы также можете подключить дополнительное меню из вашего дочернего файла functions.php без изменения каких-либо файлов родительских тем.

add_action( 'wp_head', 'add_extra_nav' ); 

function add_extra_nav() {

wp_nav_menu( array( 

'theme_location' => 'extra-menu', 

'container_class' => 'nav-menu' ) );

}

Просто измените класс контейнера на тот, который используется в вашей теме, и оберните функцию в существующий класс, который ваша тема использует для основного или дополнительного меню, чтобы вам не нужно было добавлять CSS. Обычно вы можете найти это в header.php.

Измените хук wp_head на любой другой хук для WordPress или темы.

0
Brad Dalton