Add Custom Menu to Twenty Sixteen?
-
I tried adding custom menus by adding the code found at https://codex.www.ads-software.com/Navigation_Menus in a functions.php file in my child theme but on live preview it shows the code across the top, and, daring to, I activated, but that broke the install and I had to reset by removing the child via FTP. What am I doing wrong? Thanks for any help or clues.
function register_my_menus() { register_nav_menus( array( 'header-menu' => __( 'Header Menu' ), 'extra-menu' => __( 'Extra Menu' ) ) ); } add_action( 'init', 'register_my_menus' );
-
Is that the entire contents of your
functions.php
? The snippet you posted doesn’t have the opening PHP tag:<?php
.No. I have this at the top of the child theme functions.php file and
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); } ?>
I’m absolutely a chump at php, by the way. Strictly like html and css, but this is necessity breeding hazards. Sorry I’m not smarter.
You should remove the closing PHP tag from the other snippet you just posted (
?>
). It’s not necessary forfunctions.php
to work properly and it can cause issues like the one you’ve just experienced. Was the original code snippet you posted to add the new navigation menus after the closing PHP tag?Thanks so much, @stephencottontail
Yes. Here’s the one I uploaded.
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); } ?> function register_my_menus() { register_nav_menus( array( 'topnav-menu' => __( 'TopNav Menu' ), 'footer-menu' => __( 'Footer Menu' ) ) ); } add_action( 'init', 'register_my_menus' );
Should it look like this, instead?
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); function register_my_menus() { register_nav_menus( array( 'topnav-menu' => __( 'TopNav Menu' ), 'footer-menu' => __( 'Footer Menu' ) ) ); } add_action( 'init', 'register_my_menus' ); } ?>
Or this?
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); function register_my_menus() { register_nav_menus( array( 'topnav-menu' => __( 'TopNav Menu' ), 'footer-menu' => __( 'Footer Menu' ) ) ); } add_action( 'init', 'register_my_menus' );
Either of the last two would be acceptable, although the last one is considered best practice.
Because you can mix HTML and PHP within the same file, all PHP code must be within the tags
<?php
and?>
or it won’t be parsed properly.Thank you so much, @stephencottontail. Sorry I didn’t get back sooner, but I had unsheduled company descend. Trying it with toes and fingers crossed. Thank you for your patience and expertise.
Okay. Used the last version and got this: Parse error: syntax error, unexpected end of file in /home/dlkeur/grimace-and-giggle.com/best-novels/wp-content/themes/grimgiggle/functions.php on line 14
Dumping the child theme again and going to try to bring WordPress back up.
Tried the other version with the close tag and got it to come up, but the child theme only has the original custom menus available, not the two I want to add. Any ideas?
There is a comment on functions.php of Twenty Sixteen.
/** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which * runs before the init hook. The init hook is too late for some features, such * as indicating support for post thumbnails. * * Create your own twentysixteen_setup() function to override in a child theme. * * @since Twenty Sixteen 1.0 */
You can just copy twentysixteen_setup() and paste on functions.php of your child theme, and modify register_nav_menus.
@ikaring Okay. Thank you. I’ll try it.
@ikaring Nope. It still just shows the two twentysixteen menu locations as available. I tried changing the parts now marked ‘twentysixteen’ to my child theme name and also changing my two and then all of them to grimgiggle, but that didn’t work, either.
'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => __( 'TopNav Links Menu', 'twentysixteen' ), 'footer' => __( 'Footer Menu', 'twentysixteen' ), 'social' => __( 'Social Links Menu', 'twentysixteen' ),
Please check that you have whole twentysixteen_setup function block, and add_action is not necessary to add.
function twentysixteen_setup() { ... }
In register_nav_menus, you dont need to add translation code for your own menus.
( You can add language files, but forget it for now. )register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => 'TopNav Links Menu', 'footer' => 'Footer Menu', 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) );
@ikaring Again, thank you for your patience and help. This is the code I have in the child functions.php at the moment:
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); // This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => __( 'TopNav Links Menu', 'twentysixteen' ), 'footer' => __( 'Footer Menu', 'twentysixteen' ), 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) ); } ?>
Should it be like this instead?
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); function twentysixteen_setup() { // This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => __( 'TopNav Links Menu', 'grimgiggle' ), 'footer' => __( 'Footer Menu', 'grimgiggle' ), 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) ); endif; // twentysixteen_setup } ?>
PS: I was editing this before your last post. The last one is close, but check below pls.
Not at all.
Follow these steps to modify your child functions.php1. As @stephencottontail mentioned, you can delete last
?>
.
2. Delete these lines:// This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => __( 'TopNav Links Menu', 'twentysixteen' ), 'footer' => __( 'Footer Menu', 'twentysixteen' ), 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) );
3. Copy function twentysixteen_setup from functions.php of Twenty Sixteen, they are line 47 -115.
4. Paste it at the end of your child functions.php. (You can hit some RETURN key before pasting for readability. )
5. Modify register_nav_menus section like so:
register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => 'TopNav Links Menu', 'footer' => 'Footer Menu', 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) );
Now your functions.php should look like this.
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); } function twentysixteen_setup() { //some code block register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'topnav' => 'TopNav Links Menu', 'footer' => 'Footer Menu', 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) ); //some code block }
- The topic ‘Add Custom Menu to Twenty Sixteen?’ is closed to new replies.