01:講透WordPress 菜單開發(fā) – 在菜單中添加Tab選項卡

    本節(jié)詳細介紹了在頂級菜單中實現(xiàn) Tab 切換選項卡的每一步實現(xiàn)的思路,大家可以據(jù)此,寫出在子菜單中添加 Tab 切換選項卡功能。

    在上一節(jié)中,我們學習了如何在 WordPress 中添加菜單的操作,包括頂級菜單、子菜單、默認菜單下的子菜單等。

    相信你已經(jīng)可以按照自己的實際需求添加菜單了。

    本文主要解決如何在菜單中添加 Tab 選項卡的問題。

    問題詳解

    若單一菜單中內(nèi)容過多,加子菜單又嫌麻煩,可嘗試添加本節(jié)介紹的 Tab 選項卡菜單。

    他可以在當前頁面中展示多個選項卡,可以很方便的在當前菜單頁面中的各個 Tab 選項卡中進行切換,效果如下:

    01:講透WordPress 菜單開發(fā) - 在菜單中添加Tab選項卡

    流程和幫助

    流程如下

    01:講透WordPress 菜單開發(fā) - 在菜單中添加Tab選項卡

    感謝以下文章的幫助

    添加菜單

    根據(jù)上一節(jié)的內(nèi)容,我們先添加一個頂級菜單,在當前使用主題的 functions.php 文件底部添加以下內(nèi)容

    //創(chuàng)建一個Demo菜單
    function demo_create_menu_page()
    {
        add_menu_page(
            'Demo選項',                   // 此菜單對應頁面上顯示的標題
            'Demo',                      // 要為此實際菜單項顯示的文本
            'administrator',             // 哪種類型的用戶可以看到此菜單
            'demo_id',                   //  此菜單項的唯一ID(即段塞)
            'demo_menu_page_display',    // 呈現(xiàn)此頁面的菜單時要調(diào)用的函數(shù)的名稱
            'dashicons-smiley',          //圖標 - 默認圖標
            '600.1',                     //位置
        );
    } // end vuespa_create_menu_page 
    add_action('admin_menu', 'demo_create_menu_page');
    
    //Demo菜單的回調(diào)
    function demo_menu_page_display()
    {
    ?>
        <div class="wrap">
        Npcink
        </div><!--/wrap-->
    <?php
    }

    接下來的內(nèi)容,就是圍繞這個菜單回調(diào)函數(shù) demo_menu_page_display() 來操作的。

    添加選項卡

    WordPress 準備好了一套默認的樣式,我們直接使用即可。在回調(diào)函數(shù)中添加以下內(nèi)容

    <h2 class="nav-tab-wrapper">
        <a href="?page=demo_id&tab=display_options" class="nav-tab">Display Options</a>
        <a href="?page=demo_id&tab=social_options" class="nav-tab">Social Options</a>
    </h2>

    這里,我們手動構(gòu)造了兩個選項卡和選項卡的鏈接,通過點擊不同的選項卡,觸發(fā)不同的鏈接。

    注意 demo_id 部分,這里是用的頂級菜單的slug 的,需要注意憑借這個,才能找到我們需要的內(nèi)容

    菜單切換

    為了知道當前是哪個選項卡,我們需要添加以下函數(shù)

    <?php
    if( isset( $_GET[ 'tab' ] ) ) {
        $active_tab = $_GET[ 'tab' ];
    } // end if 
    ?>    

    編寫一個條件來檢查是否設(shè)置了查詢字符串值,如果是,則將其存儲在變量中。

    然后,為了讓用戶知道當前所在的菜單,我們需要進行判斷,

    • 若當前的 Tab 的值 是當前菜單,顯示選中狀態(tài)。
    • 若當前的 Tab 的值 不是當前菜單,顯示未選中狀態(tài)。

    修改上面的選項卡內(nèi)容

    <h2 class="nav-tab-wrapper">
        <a href="?page=demo_id&tab=display_options" class="nav-tab <?php echo $active_tab == 'display_options' ? 'nav-tab-active' : ''; ?>">Display Options</a>
        <a href="?page=demo_id&tab=social_options" class="nav-tab <?php echo $active_tab == 'social_options' ? 'nav-tab-active' : ''; ?>">Social Options</a>
    </h2>

    WordPress 也提供了對應的樣式,這里,我們通過三元運算符實現(xiàn)樣式切換。

    若當前鏈接顯示的是當前菜單選項,則添加樣式 nav-tab-active

    然后,初次進入菜單時,我們是拿不到 Tab 選項內(nèi)容的,此時,用戶還沒有點擊我們構(gòu)造的鏈接。

    這里需要設(shè)置一個默認展示的菜單。

    $active_tab = isset( $_GET[ 'tab' ] ) ? $_GET[ 'tab' ] : 'display_options';

    這樣,在初次進入菜單頁面時,如果拿不到 Tab 的值,就展示菜單 display_options 的值。

    內(nèi)容切換

    完成了菜單切換,我們還需要切換內(nèi)容的顯示,不同的菜單對應不同的內(nèi)容。

    我們添加以下代碼

    <?php
                //根據(jù)當前 Tab 展示對應內(nèi)容
                if ($active_tab == 'display_options') {
                ?>
                    <h3>Npcink 放置需要展示的內(nèi)容</h3>
                <?php
                } else {
                ?>
                    <h3>Npcink 放置準備展示的函數(shù)</h3>
                <?php
                    //展示設(shè)置字段和設(shè)置節(jié)
    
                } // end if/else
    ?>

    通過簡單的 if 判斷,就能根據(jù)不同的菜單 Tab 展示不同的內(nèi)容了。

    當然,若您有興趣了解的話,可以查查什么是設(shè)置字段和設(shè)置節(jié),

    一般情況下,這塊的內(nèi)容應該是這樣的

    <form method="post" action="options.php">
                <?php
                //根據(jù)當前 Tab 展示對應內(nèi)容
                if ($active_tab == 'display_options') {
                ?>
                    <h3>Npcink 放置需要展示的內(nèi)容</h3>
                <?php
                    //展示設(shè)置字段和設(shè)置節(jié)
                    settings_fields('sandbox_theme_display_options');
                    do_settings_sections('sandbox_theme_display_options');
                } else {
                ?>
                    <h3>Npcink 放置準備展示的函數(shù)</h3>
                <?php
                    //展示設(shè)置字段和設(shè)置節(jié)
                    settings_fields('sandbox_theme_social_options');
                    do_settings_sections('sandbox_theme_social_options');
                } // end if/else
    
                //保存按鈕
                submit_button();
    
                ?>
            </form>

    完整代碼

    前面詳細介紹了每一步的作用,這里給出完整代碼,供大家參考

    //創(chuàng)建一個Demo菜單
    function demo_create_menu_page()
    {
        add_menu_page(
            'Demo選項',                   // 此菜單對應頁面上顯示的標題
            'Demo',                      // 要為此實際菜單項顯示的文本
            'administrator',             // 哪種類型的用戶可以看到此菜單
            'demo_id',                   //  此菜單項的唯一ID(即段塞)
            'demo_menu_page_display',    // 呈現(xiàn)此頁面的菜單時要調(diào)用的函數(shù)的名稱
            'dashicons-smiley',          //圖標 - 默認圖標
            '600.1',                     //位置
        );
    } // end vuespa_create_menu_page 
    add_action('admin_menu', 'demo_create_menu_page');
    
    //Demo菜單的回調(diào)
    function demo_menu_page_display()
    {
    ?>
        <div class="wrap">
        <!--標題-->
            <h2>
                <?php echo esc_html(get_admin_page_title()); ?>
            </h2>
            <!-- 在保存設(shè)置時調(diào)用 WordPress 函數(shù)以呈現(xiàn)錯誤. -->
            <?php settings_errors(); ?>
    
            <?php
    
            //檢查URL中是否存在名為 "tab" 的GET參數(shù),并將其值分配給變量 $active_tab
            if (isset($_GET['tab'])) {
                $active_tab = $_GET['tab'];
            } // end if
    
            //設(shè)置默認值
            $active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'display_options';
            ?>
    
            <!--這里的鏈接手動構(gòu)造,注意,page=你填的菜單slug-->
            <h2 class="nav-tab-wrapper">
                <a href="?page=demo_id&tab=display_options" class="nav-tab <?php echo $active_tab == 'display_options' ? 'nav-tab-active' : ''; ?>">Display Options</a>
                <a href="?page=demo_id&tab=social_options" class="nav-tab <?php echo $active_tab == 'social_options' ? 'nav-tab-active' : ''; ?>">Social Options</a>
            </h2>
    
    
    
            <form method="post" action="options.php">
                <?php
                //根據(jù)當前 Tab 展示對應內(nèi)容
                if ($active_tab == 'display_options') {
                ?>
                    <h3>Npcink 放置需要展示的內(nèi)容</h3>
                <?php
                    //展示設(shè)置字段和設(shè)置節(jié)
                    settings_fields('sandbox_theme_display_options');
                    do_settings_sections('sandbox_theme_display_options');
                } else {
                ?>
                    <h3>Npcink 放置準備展示的函數(shù)</h3>
                <?php
                    //展示設(shè)置字段和設(shè)置節(jié)
                    settings_fields('sandbox_theme_social_options');
                    do_settings_sections('sandbox_theme_social_options');
                } // end if/else
    
                //保存按鈕
                submit_button();
    
                ?>
            </form>
        </div><!--/wrap-->
    <?php
    }

    注意,因為我們沒有配置設(shè)置字段和設(shè)置節(jié),所以,點擊保存按鈕會報錯,

    為了專注,這里僅做拓展介紹,并不提供相關(guān)實現(xiàn)內(nèi)容。

    總結(jié)

    這一節(jié),我們詳細的介紹了菜單 Tab 切換的每一步,

    您可以參考代碼,實現(xiàn)在子菜單中添加 Tab 選項內(nèi)容。

    下一節(jié),我們分享如何對菜單進行權(quán)限控制,僅允許指定人員訪問,以及僅在指定菜單中加載 JS 資源。

    最新文章

    • 后續(xù)文章持續(xù)撰寫中,點個關(guān)注,獲取平臺最新文章推送。
    • 技術(shù)有限,還望諸位協(xié)助勘誤,于評論區(qū)指出,
    • 常一文多發(fā),最新勘定和增補文章于下方鏈接給出
    • http://www.kartiktrivedi.com/277333.html

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學習交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請發(fā)送郵件至 1355471563#qq.com 或點擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 中文字幕视频一区| 91在线一区二区| 日本不卡在线一区二区三区视频| 91video国产一区| 糖心vlog精品一区二区三区 | 亚洲日本va一区二区三区 | 亚洲无圣光一区二区 | 久久无码一区二区三区少妇 | 一区二区在线免费观看| 精品国产福利一区二区| 日韩精品电影一区亚洲| 亚洲乱码一区二区三区在线观看 | 亚洲日韩AV一区二区三区中文 | 黑人大战亚洲人精品一区| 亚洲天堂一区二区三区| 一级毛片完整版免费播放一区 | 亚洲熟妇成人精品一区| 精品国产日产一区二区三区| 精品在线视频一区| 色噜噜狠狠一区二区三区| 国产精品毛片一区二区三区| 亚洲日本一区二区三区在线不卡| 在线精品国产一区二区三区| 一区视频在线播放| 国产精品成人国产乱一区| 欧美日韩精品一区二区在线观看 | 一区二区在线视频免费观看| 色一情一乱一区二区三区啪啪高| 日韩在线不卡免费视频一区| 一区二区视频在线| 亚洲午夜在线一区| 在线日产精品一区| 亚洲一区精彩视频| 精品乱码一区内射人妻无码 | 亚洲国产精品一区二区第四页 | 人妻视频一区二区三区免费| 精品欧洲av无码一区二区14| 国模少妇一区二区三区| 无码AV动漫精品一区二区免费| 免费无码一区二区| 国产综合无码一区二区三区|