• 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' );
Viewing 15 replies - 1 through 15 (of 25 total)
  • Is that the entire contents of your functions.php? The snippet you posted doesn’t have the opening PHP tag: <?php.

    Thread Starter CyberCobre

    (@cybercobre)

    @stephencottontail

    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 for functions.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?

    Thread Starter CyberCobre

    (@cybercobre)

    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.

    Thread Starter CyberCobre

    (@cybercobre)

    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.

    Thread Starter CyberCobre

    (@cybercobre)

    @stephencottontail

    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.

    Thread Starter CyberCobre

    (@cybercobre)

    @stephencottontail

    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.

    Thread Starter CyberCobre

    (@cybercobre)

    @ikaring Okay. Thank you. I’ll try it.

    Thread Starter CyberCobre

    (@cybercobre)

    @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' ),
    ) );
    Thread Starter CyberCobre

    (@cybercobre)

    @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' ),
    	) );
    
    }
    ?>
    Thread Starter CyberCobre

    (@cybercobre)

    @ikaring

    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.php

    1. 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
    }
Viewing 15 replies - 1 through 15 (of 25 total)
  • The topic ‘Add Custom Menu to Twenty Sixteen?’ is closed to new replies.