首页 文章

在wordpress子目录安装中登录后重定向到引用URL

提问于
浏览
0

我在这里读了几篇以前的帖子,但没有一个在我的情况下工作..基本上,我的博客网站安装在主网站的子目录..普通的php和子目录的主要网站是wordpress ..我允许用户在登录后才能阅读我的博客 . 所以,我经常在Facebook上分享博客链接,其中有很多新用户从链接进来 .

主网站安装在=> example.com wordpress子目录=> example.com/blog中

由于我正在使用自定义模板登录页面(login.php),因此每当未登录的用户出现时,他们都会被重定向到example.com/blog/login . 我正在使用此功能重定向到登录页面:

function redirect_user(){

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

$return_url = esc_url('http://www.example.com/blog/login');
wp_redirect( $return_url );
exit;

  }

}

add_action('template_redirect','redirect_user');

它重定向很好,没有问题..然后重定向到引用网址的主要任务,我使用上面的类似代码,直接指向每个登录用户的引用网址,无论是帖子还是帖子或页面 . 再次在函数中 . PHP

如果(is_user_logged_in())

wp_redirect('' . $_SERVER["REQUEST_URI"]);

我认为他们会工作但似乎无法理解引用url是附加子目录名称...例如;上面的代码显示结果如下:

example.com/blog/blog/blabla-blahblah ..您看到目录名称正在加倍..

任何人的建议将受到高度赞赏..

1 回答

  • 0

    将WordPress网站放在子目录中对您要执行的操作没有任何影响 . 为什么?因为WordPress知道它位于何处,因此您在 wp-config.php 文件中设置了主页和站点URL,如下所示:

    define('WP_HOME','http://example.com/blog');
    define('WP_SITEURL','http://example.com/blog');
    

    或者在设置>常规管理页面中同时设置:

    example from my personal blog

    因此,所有重写和URL都将与这些URL相关 .

    处理Referer Capture

    当有人访问您网站上的某个页面时,您希望捕获该原始请求并将其添加为 redirect_to= 查询arg . 然后您可以将它们发送到登录页面 .

    add_action( 'wp', 'redirect_to_login_if_unauthorized', 3 );
    /**
     * Redirect the user to the login, but capture the original
     * referer and add to the query arg.
     *
     * @since 1.0.0
     *
     * @param WP $wp_environment Current WordPress environment instance (passed by reference).
     *
     * @return void
     */
    function redirect_to_login_if_unauthorized( WP $wp_environment ) {
        if ( is_user_logged_in() ) {
            return;
        }
    
        if ( $wp_environment->request ) {
            $request = home_url( add_query_arg( array(), $wp_environment->request ) );
        } else {
            $request = home_url();
        }
    
        $redirect = home_url() . '/wp-login.php?redirect_to=' . $request;
        wp_redirect( $redirect );
        die();
    }
    

    工作原理

    事件 wpwp-includes/class-wp.php 中触发 . 它传递WordPress环境设置的对象实例 . 以下是WordPress Core的代码:

    do_action_ref_array( 'wp', array( &$this ) );
    

    此环境对象具有我们想要的属性 request . 该属性具有URL请求(减去博客的主页URL) .

    如果 $wp_environment->request 有值,我们会将其作为查询arg添加到主URL;否则,我们只想要家庭网址 . 现在我们有了引用者 .

    接下来,创建重定向URL,其中包含登录页面和 redirect_to 查询arg的路径 .

    一个例子

    假设您有一个名为 Why I Love WordPress 的帖子,该帖子的路径为 http://example.com/blog/why-i-love-wordpress .

    $request 中的值为:

    http://example.com/blog/why-i-love-wordpress

    并且重定向URL将是:

    http://example.com/blog/wp-login.php?redirect_to=http://example.com/why-i-love-wordpress

    登录后,用户将被重定向到原始页面请求 .

    提示 - 处理退出

    您需要在用户注销后考虑路径,然后再为其构建正确的请求 .

相关问题