仅适用于单个帖子页面的自定义登录消息

时间:2018-03-07 作者:sharon

仅当用户尝试使用以下方式访问单个帖子页面时,我才将用户重定向到登录页面:

function force_login() {

    if (!is_single()) return;

    if (!is_user_logged_in()) {
        auth_redirect();
    }
}
现在,我想在登录页面中显示一条消息,说明用户需要登录才能访问此帖子。

我发现您可以使用以下命令在登录页面中显示消息:

function post_login_message() {
    return \'<p>Sample Login Message</p>\';
}
add_filter( \'login_message\', \'post_login_message\' );
但每次用户尝试登录时,都会显示相同的消息。

提前谢谢。

1 个回复
SO网友:Tom J Nowell

这里的问题是对什么的误解is_single 也就是说,阅读文档可以澄清这一点:

https://developer.wordpress.org/reference/functions/is_single/

是否查询现有的单个帖子?

说明

适用于任何帖子类型,附件和页面除外

如果$post 参数时,此函数将另外检查查询是否针对指定的帖子之一。

所以在一篇帖子中,is_singlefalse, 但是在一篇博客上true. 对于产品或其他自定义帖子类型也是如此。

所以这与is_page 而不是分页。此函数的一个全面功能是is_singular

记住,你可以阅读文档来验证事情,但不要总是假设。E、 g.可能做出的其他不良假设:

  • is_single 确定站点是否有单个博客,如果是多站点,则返回falseis_single 如果帖子是类别中唯一的帖子,则返回trueis_single 检查用户的购物车中是否有单个项目,那么如何确定一篇文章有多少页要显示分页链接,我们使用wp_link_pages, 所以我们可以通过echo 参数并将其设置为false。这让我们可以测试它是否返回了标记。如果有,那么肯定不止一页。如果没有,那么没有只有1页

    $pages = wp_link_pages( [\'echo\' => false ] );
    if ( !empty( $pages ) ) {
        // more than 1 page
    } else {
        // only 1 page
    }
    

    一种更具体但不那么优雅的方法

    有一个全局变量,名为$multipage 那就是true 如果有多个页面

    global $multipage;
    if ( $multipage ) {
        // there\'s more than one page
    }
    

结束

相关推荐

注册时更改USER_LOGIN

我使用第三方插件,将社交登录选项添加到我的博客中。它工作得很好,但我不喜欢那样when users choose to login by their social accounts 用户登录名(user_login ,所以每个部分的第一个字母都是大写的。我自己的user_login 将是“Iurie Malai”,但我想要“Iurie Malai”。我知道WordPress用户名不区分大小写,但我希望用户登录只能使用小写。我该怎么做?