建立和定製WordPress導航選單的深入淺出教程

建立和定製WordPress導航選單的深入指南

一個WordPress網站如果沒有選單和子選單,就不算什麼了。在WordPress內根據你的喜好定製這些選單也是很簡單的。因此,你的WordPress選單是一個 “front line”工具,以獲得一個高的搜尋排名,並保持訪問者在網站上。

WordPress內部的專用螢幕掩蓋了你的選單可以有多複雜。你也能夠在你的網站上的幾個位置顯示選單。如果你有編碼技能,你可以定製你的WordPress選單,幾乎有無限的可能性。

在這篇文章中,我們將給你一個建立WordPress選單的深入指南。我們還將向你展示如何利用該功能並以幾種不同的方式增強它。

  1. 剖析WordPress的選單
  2. WordPress選單結構的不同型別
  3. 如何建立一個自定義的WordPress選單(3種方法)
  4. 如何加強你的WordPress選單

剖析WordPress的選單

對於不熟悉的人來說,WordPress選單通常是一個連結(包括下拉)的集合。它是一個直接的功能,只是你的網站骨架中的一個 “椎體”。

WordPress網站選單示例

WordPress網站選單示例

我們將在下一節中更詳細地討論在網站上看到的選單。現在,你要知道,它們可以放在你想顯示的任何地方。你可能只有幾個預選的選項(基於小部件的區域)。不過,從技術上講,選單可以放在任何地方。

當然,WordPress的選單對於導航網站是最重要的。如果你有一個清晰明確的導航選單,這將有助於使用者在你的網站上瀏覽,它將使你的跳出率下降

它們也有另一個目的:你的選單有助於你的搜尋引擎優化(SEO)。優化WordPress選單以利於SEO,更多的是關於捨棄什麼,而不是放進什麼。對於初學者來說,你可以取消一些元素–如標籤雲–並保持你所包含的連結的數量較少。

雖然谷歌允許你在一個頁面上最多新增250個連結,但保持你的 “連結價值“是至關重要的。因此,減少外部連結的數量從長遠來看對你有好處。

WordPress選單結構的不同型別

你可能已經明白,根據你的應用程式的需要,你可以選擇不同的WordPress選單結構。

例如,標題選單是最常見的,因為它們處理的是主要的網站導航。你也會經常看到主導航上方的小選單,因為這是社交媒體圖示、搜尋欄等的絕佳位置。

SAU/CAL的網站有一個 “飛入 “選單,包括導航和社交連結:

SAU/CAL網站飛入式選單

SAU/CAL網站飛入式選單

這個選單表明,WordPress的選單有比導航網站更多的使用情況。使用WordPress的內建功能(後面會詳細介紹),你可以為你需要的幾乎任何東西建立一個選單。

與頁首導航一樣流行的是頁尾。你經常會用這個區域為向下滾動的使用者重複你的主要導航。此外,它也是為你的產品和服務提供更多基於上下文的連結的絕佳場所:

閃電博底部選單

閃電博底部選單

如果網站使用側邊欄,你還會看到側邊欄內的選單:

一個側邊欄導航的例子

一個側邊欄導航的例子

雖然在很多情況下你不會在這裡看到主要導航,但它是一個傳統的社交連結、部落格文章檔案和更多內容的地方。

如何建立一個自定義的WordPress選單(3種方法)

建立一個WordPress選單是一個簡單的過程,不管你的專業水平如何。有三種主要的方法來完成這項工作:使用WordPress的內建功能;安裝一個合適的外掛或用程式碼來弄髒你的手。

接下來,我們將向你展示如何使用這三種方法建立一個WordPress選單。

1. 使用WordPress的內建功能來建立你的選單

WordPress有內建的工具來幫助你建立一個選單。除了最新的使用者之外,WordPress管理中的一個專門螢幕對所有的使用者來說都是熟悉的。

WordPress的選單介面

WordPress的選單介面

當然,使用本地功能來建立你的WordPress選單有許多好處。首先,你與你的網站有完全的相容性。而且,你可以使用一個熟悉的介面和本地工具來建立你的選單。

要達到這個目的,請前往WordPress內的外觀>選單頁面:

WordPress的選單連結

WordPress的選單連結

這個螢幕分為幾個不同的部分。在頂部,你會發現選擇當前選單或建立一個新選單的選項:

選單選擇下拉

選單選擇下拉

如果你決定建立一個新的選單,給它起個名字,並檢視選單設定部分。

選單設定選項

選單設定選項

這裡有很多覈取方塊,但你有兩個主要決定要做:

  • 自動新增頂級頁面到選單中。 這裡的 “頂級 “是指你在WordPress中建立的不是其他頁面的子頁面的頁面。例如,一篇部落格文章不是一個頂級頁面,因為在許多情況下它會有一個父級檔案頁(例如/blog)。另一方面,一個聯絡頁面通常是頂級的,因為它通常不會有一個父頁面。
  • 選單位置。 每個主題都會有它的選單位置。除非你改變了主題的核心檔案,否則主題開發者已經硬編碼了這些選單位置。有些主題可能允許你通過其設定來定製它們。

一旦你準備好了,點選建立選單按鈕。螢幕將重新整理,並將顯示你在你的新選單中。接下來,看一下螢幕的左側:

選單項的手風琴式選單

選單項的手風琴式選單

這個螢幕列出了你網站上所有的帖子、頁面、分類法和其他可連結的資產。你通過勾選左邊的方框來建立你的選單,然後點選新增到選單按鈕。

這將把它們移到選單螢幕的中央部分:

在選單結構部分拖放專案

在選單結構部分拖放專案

在這裡,你可以把選單專案拖到合適的位置。如果你點選每個專案旁邊的擴充套件箭頭,你還可以為你的選單專案設定一個標籤,或者刪除它。

展開一個選單項

展開一個選單項

一旦你點選了儲存選單,你就可以開始了。不過,如果你展開螢幕頂部的螢幕選項選單,你可以對你的WordPress選單做更多事情:

顯示選項面板

顯示選項面板

顯示元素組可以讓你在左邊的側邊欄顯示選單元框。相比之下,顯示高階選單屬性組可以顯示列表項的連結目標、描述和CSS類。

選單螢幕還有一個值得注意的方面。自定義連結框讓你設定一個你選擇的連結,而不是你網站上預定義的頁面:

自定義連結框

自定義連結框

這個選項是你如何將社交媒體連結新增到你的WordPress選單中。該平臺將根據你選擇的網站為你拉出正確的圖示,讓你有機會為你選擇的網站提供顯示良好的標識。

2. 使用一個外掛來建立你的自定義WordPress選單

為WordPress新增功能的直接解決方案是通過外掛。上一節已經介紹了為什麼WordPress的原生選項幾乎是你所需要的全部,但是外掛可以擴充套件這個功能。

有一個問題是,你是否需要一個專門的(和額外的)外掛來建立一個WordPress選單,儘管這樣做有很多好的理由。對於初學者來說,你經常會根據你在預設設定下無法訪問的風格來製作一個選單。特定的響應式設計、”巨型選單 “等等,都可以通過外掛來實現。

更重要的是,你可以使用一個專門的編輯器建立選單,並在很多情況下從預設模板中選擇。再加上廣泛的定製選項,你有一個 “無程式碼 “解決方案,將提供一個適合你的網站的WordPress選單。

例如,Max Mega Menu外掛在你能實現的方面沒有任何意外:

Max Mega Menu外掛

Max Mega Menu外掛

一旦它被安裝和啟用,你會在WordPress內發現一個新的Mega Menu面板:

WordPress內的Menu Locations連結

WordPress內的Menu Locations連結

如果你看一下Menu Locations螢幕,你會發現有更多的自定義功能供你使用:

Max Mega Menu的選單位置螢幕

Max Mega Menu的選單位置螢幕

你還可以應用選單主題,並以類似於市場上一些最好的頁面生成器的範圍來編輯它們:

Max Mega Menu中的 "選單主題 "螢幕

Max Mega Menu中的 “選單主題 “螢幕

我們可以在這裡挖掘更多的東西,儘管我們會重複自己。我們鼓勵你檢視我們以前關於WordPress選單外掛的文章。我們詳細介紹瞭如何選擇適合你的外掛以及如何使用它。

3. 編寫程式碼來建立你的自定義WordPress選單

為你自己的WordPress選單編碼是一個可靠的方法,可以實現你的勇敢者的目標(或者如果你是一個建立新的WordPress主題的開發者)。當然,你不會每天都開啟一個程式碼編輯器來新增一個選單。為此,你會使用本地的WordPress工具(或者可能是一個外掛)。

也就是說,如果你想開發主題,學習如何為WordPress選單編碼是一個重要的要求。成功有四個部分

  • 註冊你的選單。
  • 在前端顯示WordPress的選單。
  • 在你的選單或其專案中顯示額外的內容。
  • 定義一個回撥。

我們假設你對程式碼編輯器很順手,你有一個可以工作的開發環境,而且你的技能很敏銳。如果你還沒有一個主題可以使用,你可以使用WordPress的預設選項,或者從我們的最快WordPress主題列表中挑選一個。

當你準備好的時候,你要開啟主題的 functions.php 檔案。注意,這與一般WordPress的同名檔案不同。在這裡,你需要註冊你的選單。換句話說,你必須告訴WordPress在外觀>選單頁面上顯示什麼。要做到這一點,你需要使用register_nav_menus()函式。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function register_my_menus() {
register_nav_menus(
array(
'header' => __( 'Header Menu' ),
'other' => __( 'Other Menu' )
)
);
}
add_action( 'init', 'register_my_menus' );
function register_my_menus() { register_nav_menus( array( 'header' => __( 'Header Menu' ), 'other' => __( 'Other Menu' ) ) ); } add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array(
'header' => __( 'Header Menu' ),
'other' => __( 'Other Menu' )
)
);
}
add_action( 'init', 'register_my_menus' );

這段程式碼告訴WordPress內的Manage Locations標籤顯示兩個選單:Header MenuOther Menu

在WordPress中註冊選單

在WordPress中註冊選單

接下來,你必須使用wp_nav_menu()函式來顯示你的選單。你要把它新增到與你想顯示選單的地方相對應的模板檔案中。在我們的例子中,我們要用頭,所以我們要在主題的header.php檔案中新增以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wp_nav_menu( array( 'theme_location' => 'header' ) );
wp_nav_menu( array( 'theme_location' => 'header' ) );
wp_nav_menu( array( 'theme_location' => 'header' ) );

可能是這段程式碼被包裹在 if 語句中,和你的其他一些選單一起,所以你要遵循你發現的慣例。

在這一點上,你可以像其他的選單一樣在WordPress中工作。雖然,你可能也想考慮為你的選單項新增額外的內容。例如,你可以擴大定義的陣列,以包括將在輸出時呈現的HTML標籤:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wp_nav_menu(
array(
'menu' => 'primary',
'link_before' => '',
'link_after' => '',
)
);
wp_nav_menu( array( 'menu' => 'primary', 'link_before' => '', 'link_after' => '', ) );
wp_nav_menu(
array(
'menu' => 'primary',
'link_before' => '',
'link_after' => '',
)
);

你在這裡的最後一項任務是定義一個回撥。預設情況下,當沒有找到指定的選單時,WordPress會顯示一個填充的選單。作為一種選擇,當沒有選擇自定義選單時,WordPress會顯示一個頁面的選單。如果這不是你想要的動作,你可以為 theme-location 引數設定一個不同的引數,也可以新增一個 fallback_cb 引數:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wp_nav_menu(
array(
'menu' => 'primary',
// do not fall back to first non-empty menu
'theme_location' => '__no_such_location',
// do not fall back to wp_page_menu()
'fallback_cb' => false
)
);
wp_nav_menu( array( 'menu' => 'primary', // do not fall back to first non-empty menu 'theme_location' => '__no_such_location', // do not fall back to wp_page_menu() 'fallback_cb' => false ) );
wp_nav_menu(
array(
'menu' => 'primary',
// do not fall back to first non-empty menu
'theme_location' => '__no_such_location',
// do not fall back to wp_page_menu()
'fallback_cb' => false
)
);

一旦你理解了如何建立一個WordPress選單,你就可以開始增強其功能。我們將在最後一節看一下這個問題,為WordPress建立一個自定義的選單元框。

如何增強你的WordPress選單

因為這一部分是高階的,我們在繼續之前會做一些假設:

  • 你知道如何用PHP建立一個WordPress選單。
  • 你的PHP技能足夠好,可以跟隨一些高階主題。
  • 你知道如何註冊和初始化一個WordPress外掛。

這超出了本文的範圍,但你可以使用WordPress外掛模板生成器來建立一個新的、標準化的外掛模板。

WordPress外掛模板生成器

WordPress外掛模板生成器

當你準備好了,建立並上傳你的外掛到WordPress:

在WordPress內安裝的一個新外掛

在WordPress內安裝的一個新外掛

接下來,導航到該外掛的資料夾,開啟主檔案。在這裡,新增以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/**
* Add menu meta box
*
* @param object $object The meta box object
* @link https://developer.wordpress.org/reference/functions/add_meta_box/
*/
function custom_add_menu_meta_box( $object ) {
add_meta_box( 'custom-menu-metabox', __( 'Authors' ), 'custom_menu_meta_box', 'nav-menus', 'side', 'default' );
return $object;
}
add_filter( 'nav_menu_meta_box_object', 'custom_add_menu_meta_box', 10, 1);
/** * Add menu meta box * * @param object $object The meta box object * @link https://developer.wordpress.org/reference/functions/add_meta_box/ */ function custom_add_menu_meta_box( $object ) { add_meta_box( 'custom-menu-metabox', __( 'Authors' ), 'custom_menu_meta_box', 'nav-menus', 'side', 'default' ); return $object; } add_filter( 'nav_menu_meta_box_object', 'custom_add_menu_meta_box', 10, 1);
/**
* Add menu meta box
*
* @param object $object The meta box object
* @link https://developer.wordpress.org/reference/functions/add_meta_box/
*/
function custom_add_menu_meta_box( $object ) {
add_meta_box( 'custom-menu-metabox', __( 'Authors' ), 'custom_menu_meta_box', 'nav-menus', 'side', 'default' );
return $object;
}
add_filter( 'nav_menu_meta_box_object', 'custom_add_menu_meta_box', 10, 1);

WordPress的add_meta_box()函式將在WordPress管理中註冊一個後設資料框。在官方文件中,有幾個引數你要參考。我們也使用nav_menu_meta_box_object()過濾器,因為nav-menus.php檔案中沒有動作可以掛接。這個語句決定了該函式是否為一個物件型別新增選單項的元框。當過濾器執行時,add_meta_box 註冊了自定義元框。

定義一個回撥函式

接下來,我們可以定義一個回撥函式來產生元框的HTML內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/**
* Displays a metabox for an author menu item.
*
* @global int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu
*/
function custom_menu_meta_box(){
global $nav_menu_selected_id;
$walker = new Walker_Nav_Menu_Checklist();
...
}
/** * Displays a metabox for an author menu item. * * @global int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu */ function custom_menu_meta_box(){ global $nav_menu_selected_id; $walker = new Walker_Nav_Menu_Checklist(); ... }
/**
* Displays a metabox for an author menu item.
*
* @global int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu
*/
function custom_menu_meta_box(){
global $nav_menu_selected_id;
$walker = new Walker_Nav_Menu_Checklist();
...
}

全域性變數記住了當前的選單ID,而 $walker 儲存了 Walker_Nav_Menu_Checklist 物件的一個新例項。這將建立選單項的HTML列表。

從這裡,我們必須確定自定義元框中的活動標籤。要做到這一點,我們設定 $current_tab 的值,在前面程式碼塊中設定的省略號內工作。

我們在這裡使用兩個標籤,但你可以根據你的需要新增更多的標籤:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$current_tab = 'all';
if ( isset( $_REQUEST['authorarchive-tab'] ) && 'admins' == $_REQUEST['authorarchive-tab'] ) {
$current_tab = 'admins';
} elseif ( isset( $_REQUEST['authorarchive-tab'] ) && 'all' == $_REQUEST['authorarchive-tab'] ) {
$current_tab = 'all';
}
$current_tab = 'all'; if ( isset( $_REQUEST['authorarchive-tab'] ) && 'admins' == $_REQUEST['authorarchive-tab'] ) { $current_tab = 'admins'; } elseif ( isset( $_REQUEST['authorarchive-tab'] ) && 'all' == $_REQUEST['authorarchive-tab'] ) { $current_tab = 'all'; }
$current_tab = 'all';
if ( isset( $_REQUEST['authorarchive-tab'] ) && 'admins' == $_REQUEST['authorarchive-tab'] ) {
$current_tab = 'admins';
} elseif ( isset( $_REQUEST['authorarchive-tab'] ) && 'all' == $_REQUEST['authorarchive-tab'] ) {
$current_tab = 'all';
}

The following line will get all users with write privileges and add many properties to the $authors object:

下面一行將獲得所有具有寫許可權的使用者,並向 $authors 物件新增許多屬性:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$authors = get_users( array( 'orderby' => 'nicename', 'order' => 'ASC', 'who' => 'authors' ) );
$admins = array();
/* set values to required item properties */
foreach ( $authors as &$author ) {
$author->classes = array();
$author->type = 'custom';
$author->object_id = $author->nickname;
$author->title = $author->nickname . ' - ' . implode(', ', $author->roles);
$author->object = 'custom';
$author->url = get_author_posts_url( $author->ID );
$author->attr_title = $author->displayname;
if( $author->has_cap( 'edit_users' ) ){
$admins[] = $author;
}
}
$removed_args = array( 'action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce' );
?>
$authors = get_users( array( 'orderby' => 'nicename', 'order' => 'ASC', 'who' => 'authors' ) ); $admins = array(); /* set values to required item properties */ foreach ( $authors as &$author ) { $author->classes = array(); $author->type = 'custom'; $author->object_id = $author->nickname; $author->title = $author->nickname . ' - ' . implode(', ', $author->roles); $author->object = 'custom'; $author->url = get_author_posts_url( $author->ID ); $author->attr_title = $author->displayname; if( $author->has_cap( 'edit_users' ) ){ $admins[] = $author; } } $removed_args = array( 'action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce' ); ?>
$authors = get_users( array( 'orderby' => 'nicename', 'order' => 'ASC', 'who' => 'authors' ) );
$admins = array();
/* set values to required item properties */
foreach ( $authors as &$author ) {
$author->classes = array();
$author->type = 'custom';
$author->object_id = $author->nickname;
$author->title = $author->nickname . ' - ' . implode(', ', $author->roles);
$author->object = 'custom';
$author->url = get_author_posts_url( $author->ID ); 
$author->attr_title = $author->displayname;
if( $author->has_cap( 'edit_users' ) ){
$admins[] = $author;
}
}
$removed_args = array( 'action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce' );
?>

這裡,get_users 返回一個由指定引數選擇的 $user 物件的陣列。 who引數將強制WordPress查詢資料庫中具有寫作許可權的使用者。

另外, $admins 陣列將儲存一個作者陣列,而 $removed_args 將儲存一個要刪除的查詢變數的列表。

現在你可以列印元框的標記了。要做到這一點,讓我們建立標籤和連結。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<div id="authorarchive" class="categorydiv">
<ul id="authorarchive-tabs" class="authorarchive-tabs add-menu-item-tabs">
<li <?php echo ( 'all' == $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-authorarchive-all" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'all', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-all">
<?php _e( 'View All' ); ?>
</a>
</li>
<li <?php echo ( 'admins' == $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-authorarchive-admins" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'admins', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-admins">
<?php _e( 'Admins' ); ?>
</a>
</li>
</ul>
<div id="authorarchive" class="categorydiv"> <ul id="authorarchive-tabs" class="authorarchive-tabs add-menu-item-tabs"> <li <?php echo ( 'all' == $current_tab ? ' class="tabs"' : '' ); ?>> <a class="nav-tab-link" data-type="tabs-panel-authorarchive-all" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'all', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-all"> <?php _e( 'View All' ); ?> </a> </li> <li <?php echo ( 'admins' == $current_tab ? ' class="tabs"' : '' ); ?>> <a class="nav-tab-link" data-type="tabs-panel-authorarchive-admins" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'admins', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-admins"> <?php _e( 'Admins' ); ?> </a> </li> </ul>
<div id="authorarchive" class="categorydiv">
<ul id="authorarchive-tabs" class="authorarchive-tabs add-menu-item-tabs">
<li <?php echo ( 'all' == $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-authorarchive-all" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'all', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-all">
<?php _e( 'View All' ); ?>
</a>
</li>
<li <?php echo ( 'admins' == $current_tab ? ' class="tabs"' : '' ); ?>>
<a class="nav-tab-link" data-type="tabs-panel-authorarchive-admins" href="<?php if ( $nav_menu_selected_id ) echo esc_url( add_query_arg( 'authorarchive-tab', 'admins', remove_query_arg( $removed_args ) ) ); ?>#tabs-panel-authorarchive-admins">
<?php _e( 'Admins' ); ?>
</a>
</li>
</ul>

記住要給元框元素分配正確的類名、ID和資料屬性;否則,選單就不能按預期工作。

add_query_arg 和 remove_query_arg 函式都是為 authorarchive-tabs 變數設定特定的標籤值,並刪除不必要的變數。

在這一點上,我們有一個定義了標籤的元組框:

作者元框內未填入的標籤

作者元框內未填入的標籤

我們的下一步是建立標籤的HTML內容。

為Meta Box標籤建立HTML內容

您需要在 custom_menu_meta_box() 函式中遵循上一節中的程式碼。要構建內容,請在上一節中編寫的 <div> 標記中使用以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<div id="tabs-panel-authorarchive-all" class="tabs-panel tabs-panel-view-all <?php echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>">
<ul id="authorarchive-checklist-all" class="categorychecklist form-no-clear">
<?php
echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $authors), 0, (object) array( 'walker' => $walker) );
?>
</ul>
</div>
<div id="tabs-panel-authorarchive-admins" class="tabs-panel tabs-panel-view-admins <?php echo ( 'admins' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>">
<ul id="authorarchive-checklist-admins" class="categorychecklist form-no-clear">
<?php
echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $admins), 0, (object) array( 'walker' => $walker) );
?>
</ul>
</div>
<div id="tabs-panel-authorarchive-all" class="tabs-panel tabs-panel-view-all <?php echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>"> <ul id="authorarchive-checklist-all" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $authors), 0, (object) array( 'walker' => $walker) ); ?> </ul> </div> <div id="tabs-panel-authorarchive-admins" class="tabs-panel tabs-panel-view-admins <?php echo ( 'admins' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>"> <ul id="authorarchive-checklist-admins" class="categorychecklist form-no-clear"> <?php echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $admins), 0, (object) array( 'walker' => $walker) ); ?> </ul> </div>
<div id="tabs-panel-authorarchive-all" class="tabs-panel tabs-panel-view-all <?php echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>">
<ul id="authorarchive-checklist-all" class="categorychecklist form-no-clear">
<?php
echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $authors), 0, (object) array( 'walker' => $walker) );
?>
</ul>
</div>
<div id="tabs-panel-authorarchive-admins" class="tabs-panel tabs-panel-view-admins <?php echo ( 'admins' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>">
<ul id="authorarchive-checklist-admins" class="categorychecklist form-no-clear">
<?php
echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $admins), 0, (object) array( 'walker' => $walker) );
?>
</ul>
</div>

簡而言之,每個標籤都包含一個覈取方塊的列表。walk_nav_menu_tree()函式使用三個引數來列印這個列表。  $items$depth, 和 $r  – 都是必須的。

$items 陣列儲存了一個管理使用者的陣列。 array_map() 函式將wp_setup_nav_menu_item()函式應用於 $admins,併為陣列元素新增選單項屬性。

使用者列表新增至作者meta框

使用者列表新增至作者meta框

到這裡,我們可以完成最後的步驟。

新增一個提交按鈕

自定義元框的大部分內容已經完成,儘管我們仍然需要新增一個提交按鈕和一個處理 “旋轉 “圖示。

這裡有一段簡短的程式碼,你可以直接放在前面的區塊之後:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<p class="button-controls wp-clearfix">
<span class="list-controls">
<a href="<?php echo esc_url( add_query_arg( array( 'authorarchive-tab' => 'all', 'selectall' => 1, ), remove_query_arg( $removed_args ) )); ?>#authorarchive" class="select-all"><?php _e('Select All'); ?></a>
</span>
<span class="add-to-menu">
<input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-authorarchive-menu-item" id="submit-authorarchive" />
<span class="spinner"></span>
</span>
</p>
</div>
<?php
}
<p class="button-controls wp-clearfix"> <span class="list-controls"> <a href="<?php echo esc_url( add_query_arg( array( 'authorarchive-tab' => 'all', 'selectall' => 1, ), remove_query_arg( $removed_args ) )); ?>#authorarchive" class="select-all"><?php _e('Select All'); ?></a> </span> <span class="add-to-menu"> <input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-authorarchive-menu-item" id="submit-authorarchive" /> <span class="spinner"></span> </span> </p> </div> <?php }
<p class="button-controls wp-clearfix">
<span class="list-controls">
<a href="<?php echo esc_url( add_query_arg( array( 'authorarchive-tab' => 'all', 'selectall' => 1, ), remove_query_arg( $removed_args ) )); ?>#authorarchive" class="select-all"><?php _e('Select All'); ?></a>
</span>
<span class="add-to-menu">
<input type="submit"<?php wp_nav_menu_disabled_check( $nav_menu_selected_id ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-authorarchive-menu-item" id="submit-authorarchive" />
<span class="spinner"></span>
</span>
</p>
</div>
<?php
}

在WordPress內完成的作者元框

在WordPress內完成的作者元框

有了這些知識,你可以為你的選單新增幾乎所有的功能!請注意,GitHub上也有一個公開的外掛Gist,可以免費下載。

小結

WordPress選單是你網站的一個重要方面。正因為如此,該平臺提供了一個原生的、強大的面板,可以讓你定製你網站上的每個選單。然而,它不會預設提供你所需要的一切。

幾個螢幕選項可以幫助你新增CSS標籤和更多。此外,安裝一個外掛將讓你把你的本地選單變成巨型選單,並使用增強的功能,使你的選單更具響應性(以及其他方面)。編碼也是一種可能性,雖然這對一個編碼新手來說是一項具有挑戰性的任務,但你可以在一個下午的時間裡把它放在一起。

你想定製你的WordPress選單嗎,如果是的話,你打算用什麼方法?請在下面的評論區分享你的想法和意見。

評論留言