How to display different links for logged in and logged out users?

前端 未结 8 964
天涯浪人
天涯浪人 2021-01-26 02:23

When a user is not logged in I am trying to show

Support || Log In

When they are logged out it should say

Support || Log Out 
<         


        
相关标签:
8条回答
  • 2021-01-26 02:29

    Add this to functions.php in your theme or create a plugin. Change 'menu' to the menu location eg. 'primary-menu' in your theme. Change 'logged-in' to the name of the logged in menu and logged out respectively.

    <?php
      function my_wp_nav_menu_args( $args = '' ) {
    
        if( is_user_logged_in() ) { 
            $args['menu'] = 'logged-in';
        } else { 
            $args['menu'] = 'logged-out';
        } 
            return $args;
        }
        add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );
    ?>
    

    referenced from: WPBeginner

    0 讨论(0)
  • 2021-01-26 02:31

    Apart from coding you can always use a plugin called Nav Menu Roles

    0 讨论(0)
  • 2021-01-26 02:44

    Not sure about the result of your function, but to start you were not escaping properly. Secondly, why not just use one li to house the correct link as follows:

    <div class="fr">             
        <ul class="rss">                  
            <li><a href="http://example.com/go/wp-login.php">Support</a></li>                 
            <li><?php if (is_user_logged_in() ) { 
                    echo " <a href=\"" . wp_logout_url() . "\" title=\"Logout\">Logout</a>";
                }else{ 
                    echo " <a href=\"http://example.com/" title=\"Login\">Member Login</a>";
                } ?>
            </li>             
        </ul>         
    </div> 
    
    0 讨论(0)
  • 2021-01-26 02:44

    Another way to display content for users with a shortcode. Post this into functions.php

    // When member is logged in [memberin]
    
    add_shortcode( 'memberin', 'member_check_shortcode' ); 
    function member_check_shortcode( $atts, $content = null ) {
    function member_check_shortcode( $atts, $content = null ) {
      if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
    return $content;
    return '';
    }
    
    // When member is logged out [memberout]
    
    add_shortcode( 'memberout', 'member_check_shortcode_out' );
    function member_check_shortcode_out( $atts, $content = null ) {
      if (!is_user_logged_in() && !is_null( $content ) && !is_feed() )
    return $content;
    return '';
    }
    
    0 讨论(0)
  • 2021-01-26 02:45

    Have you tried changing ?php else if (!is_user_logged_in() ) to just ?php if (!is_user_logged_in() ) ?

    0 讨论(0)
  • 2021-01-26 02:45

    What about the following?

    <div class="fr">
        <ul class="rss">
            <li><a href="http://example.com/wp-login.php">Support</a></li>
            <?php if (is_user_logged_in() ) { echo " <li><a href=" . wp_logout_url() . " title=\"Logout\">Logout</a></li>";}?>
            <?php else if (!is_user_logged_in() ) { echo " <li><a href="http://example.com/wp-login.php" title=\"Logout\">Member Login</a></li>";}?>
        </ul>
    </div>
    

    I moved the php if statements so you don't get empty li elements. You should still do the escaping that others have noticed.

    0 讨论(0)
提交回复
热议问题