开发者

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

开发者 https://www.devze.com 2023-03-27 09:37 出处:网络
When a user is not logged in I am trying to show Support || Log In When they are logged out it should say

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 

Here is the code I tried to use to get this to work

    <div class="fr">
            <ul class="rss">

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

But it is not working can anybody he开发者_JAVA技巧lp me out?


Your code has a syntax error:

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

You should escape the double-quotes:

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


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> 


Use this code:

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

Your mistake is that you should not insert anything between closing } and else keyword. Also, in templates, oldschool if, while, foreach form should be used - see above.


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


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

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


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


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.


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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号