How to display different links for logged in and logged out users?
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
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
精彩评论