WordPress主题(创世纪)PHP登录按钮


WordPress Theme (Genesis) Login Button in PHP

我有一个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,单击它将进入登录提示