從 WooCommerce v2.6.0 起,WooCommerce 的 “我的帳户” 區域已經使用了所謂的 “端點” 。這意味着 WordPress 中只有 1 頁設置(像 “/ my-account”),其中的子頁面是動態加載的(如 “/ my-account / orders”)。這是 WooCommerce 實施的一個好方法,因為這意味着您不需要在 WordPress 管理員中管理多達幾頁; 基於 “端點”(在我們的示例中為 “訂單”)動態地加載該頁面的內容。
這樣做會增加一個新的子頁面到我的帳户區域有點複雜,但這絕對是可能的!看看它是如何做的
注意:我將在標準函數中編寫這個函數,您可以將其添加到主題的 functions.php
文件中,但我建議您創建一個功能插件,並在類中執行。
添加一個 “信息” 鏈接到我的帳户導航
首先,我們添加一個信息鏈接到我的帳户導航。
/** * Account menu items * * @param arr $items * @return arr */ function iconic_account_menu_items( $items ) { $items[‘information’] = __( ‘Information’, ‘iconic’ ); return $items; } add_filter( ‘woocommerce_account_menu_items’, ‘iconic_account_menu_items’, 10, 1 ); |
- 的
woocommerce_account_menu_items
過濾器接受 1 個參數:的導航項目陣列。 - 在
iconic_account_menu_item()
我們將 “信息” 鏈接添加到$items
數組的末尾。我們正在使用鍵/值對; 數組鍵是端點 URI(“信息”),該值是鏈接標題(“信息”)的可翻譯字符串。
添加一個 “我的帳户” 端點
在這個例子中,我們將添加一個名為 “Information” 的新頁面 my-account/information
。這意味着我們的終端是簡單的 information
,按照我們上面的自定義菜單鏈接。
/** * Add endpoint */ function iconic_add_my_account_endpoint() { add_rewrite_endpoint( ‘information’, EP_PAGES ); } add_action( ‘init’, ‘iconic_add_my_account_endpoint’ ); |
- 我們正在添加一個
iconic_add_my_account_endpoint
在該init
動作上調用的函數。 - 我們正在使用
add_rewrite_endpoint()
來添加我們的端點。這將需要您刷新固定鏈接(只需訪問設置 > 固定鏈接)。 add_rewrite_endpoint()
接受 2 個參數。第一個是我們的端點 URI,第二個是端點可用的位置。作為 “我的帳户” 是一個頁面,我們已經分配了我們的端點EP_PAGES
。您可以查看所有可用的 “鄰居” 的手抄本。
添加完畢後,/my-account/information
網址應返回常規帳户信息中心,而不是 404 頁面。
向我們的新端點添加內容
而不是使用自定義模板,我認為最好使用可用的鈎子。這樣我們可以保留默認帳户佈局,包括邊欄導航。 WooCommerce 為您的端點提供一個自定義鈎子,可以這樣訪問:
/** * Information content */ function iconic_information_endpoint_content() { echo ‘Your new content’; } add_action( ‘woocommerce_account_information_endpoint’, ‘iconic_information_endpoint_content’ ); |
我們正在使用該 woocommerce_account_information_endpoint
動作。這是一個自定義操作,您可以通過格式化它創建的任何端點使用 woocommerce_account_{your-endpoint-slug}_endpoint
。
添加一個 “端點?” 幫手
我們可以添加一個幫助函數來檢查當前查看的頁面是否是一個端點。我看不到 WordPress 中的任何本機功能(如果我錯了,請更正我),所以我為此寫了這個簡單的功能。
| /** * Helper: is endpoint */ function iconic_is_endpoint( $endpoint = false ) { global $wp_query; if( !$wp_query ) return false; return isset( $wp_query->query[ $endpoint ] ); } |
所以現在我們可以 if( iconic_is_endpoint('information') ) { ... }
用來檢查當前頁面是否是我們的端點。注意:您可以將任何端點傳遞到函數中。
結論
這應該讓您開始!顯然有幾行代碼添加,但是一旦您完成了,修改和演變就相當直接。如果您在 WooCommerce 網站上使用本教程,請告訴我們。我有興趣知道您添加了哪些標籤。