WordPress主题激活时创建菜单

WordPress主题激活时创建菜单

如果您正在 WordPress 中构建主题,并且希望在主题激活时自动生成导航菜单,您可以这样做:

我们需要两个函数来让我们更容易地自动生成导航菜单和菜单项:

Menu Item 创建函数:

function generate_site_nav_menu_item( $term_id, $title, $url ) {
   
    wp_update_nav_menu_item($term_id, 0, array(
        'menu-item-title'   =>  sprintf( __('%s', 'text_domain'), $title ),
        'menu-item-url'     =>  home_url( '/' . $url ),
        'menu-item-status'  =>  'publish'
    ) );
   
}

上面的函数会自动生成一个“自定义链接”,指向我们在 $url 参数中指定的页面。

Menu 创建函数:

function generate_site_nav_menu( $menu_name, $menu_items_array, $location_target ) {
   
    $menu_primary = $menu_name;
    wp_create_nav_menu( $menu_primary );
    $menu_primary_obj = get_term_by( 'name', $menu_primary, 'nav_menu' );
   
    foreach( $menu_items_array as $page_name => $page_location ){
        generate_site_nav_menu_item( $menu_primary_obj->term_id, $page_name, $page_location );
    }
   
    $locations_primary_arr = get_theme_mod( 'nav_menu_locations' );
    $locations_primary_arr[$location_target] = $menu_primary_obj->term_id;
    set_theme_mod( 'nav_menu_locations', $locations_primary_arr );
       
    update_option( 'menu_check', true );
   
}

示例

WordPress主题激活时创建菜单
WordPress主题激活时创建菜单

让我们创建两个标题菜单,菜单 1 将显示给登录用户,菜单 2 将仅显示给访问者

注册 2 个导航:

primary  和 secondary。

可以在 functions.php 添加代码。

注册导航:

function my_after_setup_theme() {

    /**
     * Register Navigations
     */
    register_nav_menus( array(
        'primary'   => __('Primary Navigation', 'text_domain'),
        'secondary' => __('Secondary Navigation', 'text_domain')
    ) );   
   
}
add_action( 'after_setup_theme', 'my_after_setup_theme') );

注册菜单:

/**
 * Runs when user switches to your custom theme
 *
 */
function my_after_switch_theme() {
    /**
     * Setup the site navigation
     */
    $run_menu_maker_once = get_option('menu_check');

    if ( ! $run_menu_maker_once ){
        /**
         * Setup Navigation for : Header Menu - Logged In
         */
        $primary_menu_items = array(
            'Listings'  =>  'listings',
            'Submit Ad' =>  'submit-ad',
            'Messages'  =>  'messages',
            'Account'   =>  'account',
            'Logout'    =>  'account?action=logout' // You need to setup your logout url using wp_logout()
        );
        generate_site_nav_menu( 'Header Menu - Logged In', $primary_menu_items, 'primary' );

        /**
         * Setup Navigation for : Header Menu - Logged Out
         */
        $secondary_menu_items = array(
            'Listings'  =>  'listings',
            'Submit Ad' =>  'submit-ad',
            'Register'  =>  'register',
            'Login'     =>  'login'
        );
        generate_site_nav_menu( 'Header Menu - Logged Out', $secondary_menu_items, 'secondary' );
    }
}
add_action( 'after_switch_theme', 'my_after_switch_theme');
  • 当您切换/激活主题时,将执行上述功能。
  • 仅在选项“MENU_CHECK”不等于1时才执行。

如何输出菜单?

<?php if( is_user_logged_in() ): ?>
    <?php wp_nav_menu( array('theme_location' => 'primary', 'fallback_cb' => 'fallback_menu_pages' ) ); ?>
<?php else: ?>
    <?php wp_nav_menu( array('theme_location' => 'secondary', 'fallback_cb' => 'fallback_menu_pages' ) ); ?>
<?php endif; ?>

如果您注意到我们添加了一个回调函数,这是在我们的菜单(主要/次要)不存在时调用的函数。将此回调函数添加到您的functions.php:

function fallback_menu_pages() {
   
    $list_pages = '';
    $args = array(
        'sort_order' => 'asc',
        'sort_column' => 'post_title',
        'hierarchical' => 1,
        'child_of' => 0,
        'parent' => -1,
        'offset' => 0,
        'number' => 5,
        'post_type' => 'page',
        'post_status' => 'publish'
    ); 
    $pages = get_pages( $args );
       
    foreach( $pages as $key => $page ){
        $list_pages .= '<li><a href = "' . get_permalink( $page->ID ) . '">' . $page->post_title . '</a></li>';
    }
   
    echo $list_pages;
   
}

给TA打赏
共{{data.count}}人
人已打赏
后端/架构技术活

在linux服务器下实现对网站测试压力

2021-9-12 10:52:53

后端/架构程序代码

使用 Pillow Python 库处理图像

2022-2-9 10:42:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索