マイアカウントページのメニューに新しい項目を追加
woocommerce_account_menu_items
フィルターを使ってメニューを追加します。
追加方法は以下となります。
また、項目のキーとして、エンドポイントとして追加する名前を設定します。ここでは「my-new-page」とします。
add_filter( 'woocommerce_account_menu_items', 'woo_my_page_add_menu_item' );
function woo_my_page_add_menu_item( $items ) {
$items['my-new-page'] = '新しいメニュー名';
return $items;
}
このままにすると一番下に追加されます。もし、上から2番目に入れたい場合は $items
の配列に入れ込む必要があります。
例えば、orders
のエンドポイントの上に入れる場合は、orders
の前に入れ込む処理を行えばいい。
もちろん、エンドポイント管理画面で変更できるので、変更していた場合は、変更したエンドポイントで対応する必要があります。単純に3番目にするとかは現状出来ないです。
add_filter( 'woocommerce_account_menu_items', 'woo_my_page_add_menu_item' );
function woo_my_page_add_menu_item( $items ) {
foreach($items as $key => $value ){
if($key == 'orders'){
$new_items['my-new-page'] = '新しいメニュー名';
}
$new_items[$key] = $value;
}
return $new_items;
}
新しいエンドポイントを追加
次に、新しく追加したメニュー項目に対応するコンテンツを表示するために、新しいエンドポイントを追加します。
先に設定したエンドポイント「my-new-page」を指定します。
add_action( 'init', 'add_custom_my_account_endpoint' );
function add_custom_my_account_endpoint() {
add_rewrite_endpoint( 'my-new-page', EP_ROOT | EP_PAGES );
flush_rewrite_rules();
}
flush_rewrite_rules()
はパーマリンクを更新する機能があるためにつけております。
なので、ページ表示速度を遅くしてしまう傾向があるので、この行を無くして、プラグインなどは register_activation_hook
関数の処理をしたり、テーマの場合は after_switch_theme
のアクションフックの処理でパーマリンクを更新するようにした方がいいです。
表示する内容を定義
最後に、新しいエンドポイントで表示する内容を定義します。
定義する action の名前は woocommerce_account_***_endpoint
となります。
***
の部分にはエンドポイント名が入りますのでここでは、「my-new-page」を入れます。
add_action( 'woocommerce_account_my-new-page_endpoint', 'add_custom_endpoint_content' );
function add_custom_endpoint_content() {
// ここに表示したい内容を書きます。
}
ここで入る場所は <div class="woocommerce-MyAccount-content">***</div>
の***
部分に出力される形になります。