web-dev-qa-db-ja.com

カスタムメニューリンクでログアウト機能を使用する方法

すべて

私はワードプレスのカスタムメニューを使用しています、そしてログアウトとして一つのメニューがあります。私はwordpressのログアウト機能を知っています<?php echo wp_logout_url(); ?>

しかし、どのように私はカスタムメニューでそれを使うことができますか?

4
Ajay Patel

カスタムボタンを作成する方法と場所はわかりませんが、フィルターごとにこのようなリンクを追加できます。 フィルター関数を'wp_nav_menu_objects' に追加し、必要な場所にリンクを挿入します。

基本的な例を次に示します。

add_filter( 'wp_nav_menu_objects', 'wpse_46547_add_log_out_link', 10, 2 );

function wpse_46547_add_log_out_link( $sorted_menu_items, $args )
{
    $link = array (
        'title'            => 'Log out',
        'menu_item_parent' => 0,
        'ID'               => '',
        'db_id'            => '',
        'url'              => wp_logout_url()
    );

    $sorted_menu_items[] = (object) $link;

    return $sorted_menu_items;
}

あなたはshouldコードを修正します:

  • 正しいメニューにいるかどうかを確認してください。たとえば、has_log_out_linkmenu_classパラメーターにクラスwp_nav_menuを必要とし、$args->menu_classをテストします。
  • メニュータイトルのI18n。 ;)
  • サブメニューのリンクが必要な場合は、menu_item_parent0以外の投稿IDに設定します。
  • リンクにはさらにパラメータがあります。それらを調べるには my other answer を参照してください。
6
fuxia

他の誰かがこれに苦労した場合、私が見つけた最も簡単な方法は単にカスタムリンクオプションを使ってあなたがそれを望むところにちょうどログアウトメニュー項目を追加することでした。 URLをlogouturlのようなユニークなものにして、単にこのコードを自分のfunctions.phpファイルに追加するか、カスタムコードを追加したい場所に追加します。

add_filter( 'wp_nav_menu_items', 'wp123e_loginout_menu_link', 10, 2 );

function wp123e_loginout_menu_link( $items, $args ) {
   if ($args->theme_location == 'primary') {
      if (is_user_logged_in()) {
         $items = str_replace('logouturl', wp_logout_url(), $items);
      }
   }
   return $items;
}

Str_replaceのこの最初のパラメータを、メニュー設定のカスタムリンクで使用されている文字列に変更することを忘れないでください。 theme_locationをprimaryから適切な場所に変更する必要があるかもしれません。

0
hugmin42