it-swarm.com.de

Wie benutze ich die Abmeldefunktion bei benutzerdefinierten Menüverknüpfungen?

Alles

Ich verwende das benutzerdefinierte WordPress-Menü und es gibt ein Menü als Abmelden. Ich kenne die wordpress Logout Funktion <?php echo wp_logout_url(); ?>

Aber wie kann ich es im benutzerdefinierten Menü verwenden?

4
Ajay Patel

Nicht sicher, wie und wo Sie eine benutzerdefinierte Schaltfläche erstellen können, aber Sie können einen solchen Link pro Filter hinzufügen: Fügen Sie eine Filterfunktion zu 'wp_nav_menu_objects' hinzu und fügen Sie den Link dort ein, wo Sie ihn benötigen.

Hier ist ein einfaches Beispiel:

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;
}

Sie sollten den Code ändern:

  • Überprüfen Sie, ob Sie im richtigen Menü sind. Fordern Sie beispielsweise eine Klasse has_log_out_link für den Parameter menu_class in wp_nav_menu an und testen Sie $args->menu_class.
  • I18n für den Menütitel. ;)
  • Setzen Sie menu_item_parent auf eine andere Beitrags-ID als 0, wenn Sie den Link in einem Untermenü benötigen.
  • Es gibt mehr Parameter für den Link, siehe meine andere Antwort um diese zu überprüfen.
6
fuxia

Für den Fall, dass jemand anderes damit zu kämpfen hat, war die einfachste Möglichkeit, das Menüelement "Abmelden" mithilfe der benutzerdefinierten Linkoption genau dort hinzuzufügen, wo Sie es möchten. Machen Sie die URL zu etwas Einzigartigem wie logouturl und fügen Sie diesen Code einfach zu Ihrer functions.php-Datei hinzu oder wo immer Sie es vorziehen, benutzerdefinierten Code hinzuzufügen.

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;
}

Denken Sie daran, diesen ersten Parameter von str_replace in den im benutzerdefinierten Link der Menüeinstellungen verwendeten String zu ändern. Möglicherweise müssen Sie auch den Speicherort von theme_location vom primären zum entsprechenden Speicherort ändern.

0
hugmin42