强制将未登录用户重定向到特定页面的(wp-login.php或wp-admin)

时间:2021-01-10 作者:john zuh

我目前正在使用Wordpress插件(Pagerestrict插件,它根据页面ID/slug引用URL)来限制某些页面只允许登录用户使用。这个插件可以很好地使用标准的wordpress URL结构,但我的问题是我的一些页面直接链接到一些插件功能http://mywebsite.com/wp-content/plugins/purchase.php 而不是标准http://mywebsite.com/wp-content/plugins/purchase/ wordpress url结构。因此,我在这种情况下尝试的是手动添加下面的功能,但这些功能不起作用

function my_page_template_redirect() {
            $url_path = preg_replace(\'/\\?.*/\', \'\', $_SERVER[\'REQUEST_URI\']);
        
            if( strpos($url_path, \'/wp-content/plugins/purchase.php/\') !== 0 && ! is_user_logged_in() )
            {
                wp_redirect( wp_login_url() );
                die;
            }
        }
    
add_action( \'template_redirect\', \'my_page_template_redirect\' );
我也看到了这个https://wpexplorer-themes.com/total/snippets/restrict-content-access-user/ 这篇文章推荐了一些类似于我所寻找的东西,但这里唯一的转折点是它将页面条件与$page\\u id匹配,而不是URL,并且由于我的URL(参考上文)直接链接到插件页面,而不是通过wp页面或帖子生成,因此它没有id或slug。有没有办法解决这个问题?希望您能提出一些建议。

1 个回复
最合适的回答,由SO网友:nightowl 整理而成

模板重定向对于管理主题文件的输出非常有用。要在页面加载时重定向未登录的用户,请将函数附加到“init”挂钩。(如果调用它的时间早于堆栈中的调用时间,则可能会出现错误,因为函数定义尚未包含在内。)

简而言之,如果在提供的代码中替换动作挂钩:

add_action( \'init\', \'my_page_template_redirect\' );
它应该实现你想要实现的目标。

参考号:https://developer.wordpress.org/reference/functions/is_user_logged_in/

相关推荐

Why Ajax Doesn't Work?

我在WordPress的根目录下有一个单独的页面,用于处理某些数据,其中包含;wp负载。php“;已连接到它的文件。<?php require_once( dirname(__FILE__) . \'/wp-load.php\' ); require_once( dirname(__FILE__) . \'/wp-admin/includes/admin.php\' ); add_action( \'wp_ajax_example_ajax_r