WordPress Anmelden / Abmelden Nur einzelnes Menü

Ich habe dieses Login / Logout für meine functions.php in meinem WordPress Theme geschrieben. Das Problem ist, es zeigt einen Login / Logout-Link in allen Menüs sowohl primäre als auch sekundäre. Gibt es eine Möglichkeit, es nur sekundär erscheinen zu lassen?

add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2); function add_login_logout_link($items, $args) { ob_start(); wp_loginout('index.php'); $loginoutlink = ob_get_contents(); ob_end_clean(); $items .= '
  • '. $loginoutlink .'
  • '; return $items; }

    Das habe ich am Ende benutzt:

     add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2); function add_login_logout_link($items, $args) { if( $args->theme_location == 'top-menu' ) { ob_start(); wp_loginout('index.php'); $loginoutlink = ob_get_contents(); ob_end_clean(); $items .= '
  • '. $loginoutlink .'
  • '; } return $items; }

    Solutions Collecting From Web of "WordPress Anmelden / Abmelden Nur einzelnes Menü"

    Ändern Sie den Filter-Hook in wp_nav_menu_{menu-name}_items , damit er nur in einem bestimmten Menü ausgeführt wird. Wenn der wp_nav_menu_secondary_items beispielsweise “Sekundär” lautet, verwenden Sie den Hook wp_nav_menu_secondary_items . Wenn der wp_nav_menu_secondary_items “Top Navigation” wp_nav_menu_top-navigation_items , verwenden Sie wp_nav_menu_top-navigation_items (Leerzeichen im wp_nav_menu_top-navigation_items durch Bindestriche ersetzen).

    Ihr aktualisierter Code würde unter der Annahme, dass der Menüname “Secondary” lautet (der Menüname, nicht der Themenort), wie folgt lauten:

     add_filter('wp_nav_menu_secondary_items', 'add_login_logout_link', 10, 2); function add_login_logout_link($items, $args) { ob_start(); wp_loginout('index.php'); $loginoutlink = ob_get_contents(); ob_end_clean(); $items .= '
  • '. $loginoutlink .'
  • '; return $items; }

    Wie Nilamber Suggessts:

     /** * Add Login/Logout to Menu */ function add_login_logout_link($items, $args) { if( $args->theme_location == 'primary' ) { $loginoutlink = wp_loginout('index.php', false); $items .= '
  • '. $loginoutlink .'
  • '; } return $items; } add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);

    Beachten Sie, dass theme_location mit dieser function nicht null sein darf. Die arg check negiert die Notwendigkeit, den Menünamen im Filter zu ändern.

    Wie von Nilamber vorgeschlagen, müssen Sie die in $ args definierten Parameter überprüfen. Der folgende Code wird funktionieren, aber Sie können es als Ihre Leichtigkeit ändern.

     add_filter( 'wp_nav_menu_items', 'add_loginout_link', 10, 2 ); function add_loginout_link( $items, $args ) { if (is_user_logged_in() && $args->theme_location == 'primary') { $items .= '
  • Log Out
  • '; } elseif (!is_user_logged_in() && $args->theme_location == 'primary') { $items .= '
  • Log In
  • '; } return $items; }