可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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 help me out?
回答1:
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>
回答2:
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>
回答3:
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.
回答4:
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 '';
}
回答5:
Apart from coding you can always use a plugin called Nav Menu Roles
回答6:
Have you tried changing ?php else if (!is_user_logged_in() )
to just ?php if (!is_user_logged_in() )
?
回答7:
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.
回答8:
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