[接近完美]登录可见个别/文章/分类/页面

目前已知的唯一 bug:最后一篇文章是登录可见分类里文章的话,则首页也会被提示登录,解决方法:将该文章发布时间调整到第二篇非登录可见文章后面


wordpress登录才能查看网站内容,未登录就跳转到登录页面。有这样需求的人还不少,有的可能是资料类什么的,有的人就是用来搞擦边球。


实现代码很简单,找一个全站一定会执行的钩子即可,这里我们就选了一个template_redirect钩子,这个动作钩子在加载模板时执行,当然其它很多都可以用。


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


更复杂的需求,有人需要整站再留一两个页面,比如留个“公告说明”页面提供访问,那在判断登录的代码里面增加一个页面判断即可,范例:


<?php
//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();
  }
}


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


简单改一下,加个判断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();
	}
}


还有其他更奇葩的需求?按照上面的范例加判断条件即可。


DIY:


将 auth_redirect(); 替换成以下代码则实现多重自定义实现:


global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include( get_query_template( '404' ) );
die();
//其中的404可以修改成任意主题根目录下的php文件名


 


[tip type="tip success" ]

以上代码的功能是除了这个文章/页面/分类以外,其他界面访问则要登录。如何想只有这个文章/分类/页面实现登录访问?

将判断代码前的❗️去掉即可(万分感谢知更鸟作者的帮助,虽然简单但对于新手来说简直难于登天)https://zmingcx.com/wordpress-only-allows-viewing-of-specific-posts.html

[/tip]

WordPress

访问Wordpress网站弹出警告内容

2020-3-25 12:53:53

WordPress

循环获取指定文分类的文章列表

2020-3-27 0:20:53

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索