WordPress 只允许游客浏览指定分类的文章

知更鸟
知更鸟
站长
2327
文章
0
粉丝
WordPress151,872阅读模式

有童鞋问,如何实现未登录用户只能浏览指定的分类文章,这里提供一下方法。

WordPress 只允许游客浏览指定分类的文章

只允许游客浏览指定分类的文章

网上可以找到类似的代码:

//template_redirect动作钩子是一定会执行的,所以用这个钩子对全站有效
add_action( 'template_redirect', 'ashuwp_show_only_login', 0 );
function ashuwp_show_only_login(){
	//判断登录,about页面就允许访问
	if( !is_page('about') && !is_user_logged_in() ){
		auth_redirect(); //跳转到登录页面
		exit();
	}
}

代码源自:www.ashuwp.com

原代码只允许未登录者访问指定的页面或者直接跳转到登录。

简单改一下,加个判断in_category,只允许访问指定分类的归档页面和文章。

// 首页和指定分类文章可以访问
add_action( 'template_redirect', 'ashuwp_show_only_login', 0 );
function ashuwp_show_only_login(){
	//判断登录,只允许访问ID为3和2的分类文章
	if( !in_category( array( 3,2 ) ) && !is_home() && !is_user_logged_in() ){
		auth_redirect(); //跳转到登录页面
		exit();
	}
}

默认未登录者只允许访问网站首页和分类id为3和2的分类归档页面和文章,否则跳转到登录页面。

!in_category 前面的感叹号去掉改成 in_category,则正好相反,访问分类ID为3和2的分类文章跳转到登录,其它文章可以正常访问。

代码添加到主题函数模板functions.php中。

本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!

weinxin
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
 
知更鸟
评论  15  访客  12  作者  3
    • MaxhyTV
      MaxhyTV 1

      感谢,刚好需要!

      • 毛毛
        毛毛 1

        太好了,感谢分享,请问如何反选呢?就是只有访问这个分类就跳转登录

          • 知更鸟
            知更鸟

            @ 毛毛 把判断分类函数前面的感叹号去掉

              • 毛毛
                毛毛 1

                @ 知更鸟 简直完美,万分的感谢。。。

            • 三生石托管
              三生石托管 2

              当游客点击“只允许游客浏览的指定分类或文章”时,显示类似“请先登录以查看”的提示或页面,然后让游客自己选择是登录还是不登录。如游客点击登录,则前往登录页面。如游客不登录,则返回上一次浏览的页面。是不是有更好的用户体验。

              • 波克城市
                波克城市 2

                这个功能很实用啊,收藏了

                • 莫斯科
                  莫斯科 3

                  大佬,有没有 在文章内容处 加短代码 实现不同分组权限 看到不同内容的插件?

                  • 源码网
                    源码网 0

                    感觉好简单的样子···· 试试看

                    • 紫色云
                      紫色云 1

                      很实用,收藏了。

                      • 不负此生
                        不负此生 1

                        学到了。

                        • 征征
                          征征 0

                          需要登录才能访问的分类里面包含哪一年的文章,就会导致这一年份的站点地图也需要登录才能打开,所以搜索引擎就无法解析这一条站点地图

                          • 虚心学习
                            虚心学习 1

                            有没有直接指定单独文章游客不能访问,游客直接访问指定文章链接404页面,而且在首页不会显示,只有登陆了才能正常访问和在首页正常显示的方法

                            add_action( ‘template_redirect’, ‘ashuwp_show_only_login’, 0 );
                            function ashuwp_show_only_login(){
                            //判断登录,不允许游客访问分类ID为1和2的文章
                            if( in_category( array( 1,2 ) ) && !is_home() && !is_user_logged_in() ){
                            global $wp_query;
                            $wp_query->set_404();
                            status_header(404);
                            nocache_headers();
                            include( get_query_template( ‘404’ ) );
                            die();
                            exit();
                            }
                            }
                            我这个方法只能分类ID游客不能访问,但是无法在首页不显示文章链接,这个还是基于鸟哥的代码改的

                              • 知更鸟
                                知更鸟

                                @ 虚心学习 首页排除分类

                                function exclude_category_home( $query ) {
                                if ( $query->is_home ) {
                                $query->set( \'cat\', \'-1, -2, -3\' );
                                }
                                return $query;
                                }

                                add_filter( \'pre_get_posts\', \'exclude_category_home\' );

                                  • 虚心学习
                                    虚心学习 1

                                    @ 知更鸟 可以改成指定文章ID吗(不排除分类),虽然我已经用ChatGPT给我写出来了,还增加了搜索引擎判定,哈哈,指定文章游客无法访问,访问404,搜索引擎访问正常,登陆用户访问和查看都正常,ChatGPT真强

                              匿名

                              发表评论

                              匿名网友
                              :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

                              拖动滑块以完成验证