我有一个WordPress网站,使用Genesis主题和如下登录按钮:
<div class="header_right_section">
<a href="<?php echo (is_user_logged_in()) ? wp_login_url() : wp_logout_url(get_bloginfo('url')); ?>" class="fadegraybut"><?php echo (is_user_logged_in()) ? 'Log Out' : 'Log In'; ?></a>
<span id="telnum">PHONE</span>
</div>
现在,我对PHP不是很熟悉,所以我有点困惑这个按钮在做什么,但我希望它只是重定向到一个不同的URL(由于某种原因,它目前重定向到管理面板登录)。有人能解释一下这段代码中的逻辑流程吗?如果提供了足够的信息,解释一下我如何将其重定向到正确的页面(例如。https://example.com)?谢谢
我可能错了,但本例中的代码似乎具有向后登录和注销的预期操作。
请尝试这个:
<div class="header_right_section">
<a href="<?php echo (is_user_logged_in()) ? wp_logout_url('https://example.com') : wp_login_url() ; ?>" class="fadegraybut"><?php echo (is_user_logged_in()) ? 'Log Out' : 'Log In'; ?></a>
<span id="telnum">PHONE</span>
</div>
您的原始代码
这段代码混合了PHP和HTML,但逻辑由PHP控制,所以我们将重点关注PHP,即<?php
中的内容和以?>
结尾的内容。
这里的所有PHP行都以echo
命令开头,以便有一个输出。
总的来说,这里使用的是三元运算符?:
,而不是if语句来处理if/then逻辑,语法是
(condition) ? what to do if true : what to do if false;
这一点在第二部分中最为明显:
(is_user_logged_in()) ? 'Log Out' : 'Log In';
is_user_logged_in()
是一个WordPress函数,根据登录与否返回true或false- 如果用户已登录,则会显示
Log Out
。这是有道理的,如果用户已登录,那么您希望向Log Out
显示该选项 - 如果用户未登录,则会显示另一个选项:
Log In
。这是有道理的,因为如果用户还没有登录,那么您将向Log In
提供选项
相比之下,原始代码中的第一部分似乎具有向后的操作逻辑。它看起来像是制作的,所以如果你登录了,它会向你显示登录URL。但是,如果你已经登录,你不需要达到登录的方式,你应该已经登录了。同样的问题是,这也意味着如果注销,它会触发提供将你注销的URL。但是,如果您已经注销,则不需要执行注销操作。因此,我觉得你找到的代码一定是向后编码的。
解决方案
因此,我们将三元运算符结构中的代码重新排列为:
(is_user_logged_in()) ? wp_login_url() : wp_logout_url('https://example.com'));
wp_login_url()
是一个WordPress函数,returns the URL that allows the user to log in to the site.
参见wp_login_url()文档了解详细信息wp_logout_url()
是一个WordPress函数,它"返回允许用户注销网站的URL"。有关详细信息,请参阅wp_loguturl()文档wp_logout_url()
允许您指定成功注销后要重定向到的页面。由于您想要示例https://example.com
,我们已经将其放在那里了,只需记住将其更新为您想要的实际URL即可。它是一个字符串,所以我们必须用引号括起来,以避免PHP将其与变量或函数混淆,因此:wp_logout_url('https://example.com')
- 最后的
;
正确地完成并启用了这行PHP
结果
因此,随着这些变化,当访问网站时,它现在应该:
- 如果已登录,则显示
Log Out
,单击它不仅会使您注销,还会将您重定向到指定的URLhttps://example.com'(只需记住将其更新为实际工作URL) - 如果未登录,则显示
Log In
,单击它将进入登录提示