LoginSignup
0
0

WooCommerce のマイページに独自のページを追加する方法

Last updated at Posted at 2023-05-23

マイアカウントページのメニューに新しい項目を追加

woocommerce_account_menu_items フィルターを使ってメニューを追加します。
追加方法は以下となります。
また、項目のキーとして、エンドポイントとして追加する名前を設定します。ここでは「my-new-page」とします。

functions.php
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番目にするとかは現状出来ないです。

functions.php
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」を指定します。

functions.php
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」を入れます。

functions.php
add_action( 'woocommerce_account_my-new-page_endpoint', 'add_custom_endpoint_content' );
function add_custom_endpoint_content() {
    // ここに表示したい内容を書きます。
}

ここで入る場所は <div class="woocommerce-MyAccount-content">***</div>***部分に出力される形になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0