如何将未登录的用户重定向到特定页面?


16

如何将请求特定页面/ URL的未登录用户重定向到另一个页面/ URL,并显示类似“仅针对成员”的消息。我知道使用!is_user_logged_in()函数非常容易编码,但是我不知道如何编码,因为我是WordPress的新手。小心告诉我该文件也要放入代码。

Answers:


30

这里有两个示例,您需要对其进行一些修改,以使其适合您的特定需求。

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

将其放在您的子主题函数文件中,更改页面ID或slug以及重定向URL。

您还可以使用如下代码:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

您可以将消息直接添加到页面,或者如果要显示所有未登录用户的消息,请将其添加到代码中

http://codex.wordpress.org/Function_Reference/wp_redirect


谢谢您的回答我确实是这样,add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }但它无法正常工作
user3187719 2014年

请在此处使用页面ID或Slug,而不要使用网址mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton

is_page('participate')
Brad Dalton


4

如果您不告诉我们要在何处显示它,我们如何告诉您在哪里放置它?整个帖子?页面?页面的自定义部分?抱歉...我想我的水晶球今天不能正常工作。

既然您是我,并且我引用您的话:“宁愿给Wordpress的新手”,您宁愿学习,也不要要求直接回答。

至于您应该在哪里阅读参考文献1链接。这将告诉您需要放入哪个文件。

至于如何做,您应该先阅读参考链接2和3。

总的来说,它应该看起来像这样:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

当然,上面的代码需要进入循环。您可以根据需要将其构建得复杂或简单。例如,如果未登录,则可以显示整个注册表单,而不是简单的文本;或者,如我所建议,可以显示一个分开的屏幕,用户可以在其中登录(因为用户可以拥有一个帐户但忘记了登录)或注册(如果他没有一个)。

  1. 模板层次结构
  2. 条件标签
  3. 循环

在以下评论后添加:

要再次headerwp_login_url- 一起重定向,请检查以下参考文献1和2:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

参考:

  1. 标头-PHP
  2. wp_login_url

实际上,我不知道返回请求的URL或永久链接的wordpress函数。关于显示消息,请保留,我只想在他们请求某些URL时重定向它们而不被记录。
user3187719 2014年

我可以用$ pagenow做到吗?
user3187719 2014年

@ user3187719编辑了我的原始答案,并添加了重定向解决方案。PS。$pagenow?您正在尝试用大炮杀死一只苍蝇,以确保它会起作用,但是为什么如此复杂?把事情简单化。PS2:了解PHP和WP Codex。
Borek 2014年

4

您无法重定向到特定页面,但是每个未登录的用户都将被重定向到“登录屏幕”。

<?php auth_redirect(); ?>

WordPress参考: auth_redirect()

仅提及另一种解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.