内部搭建的博客可能有这么一种情况,组内的大部分博客内容需要保密,但是某些博客需要分享给其他同事查看。
只需要将下面的代码加入到 function.php 文件,即可实现所有用户可以查看带有 public 标签的文章,访问其他文章一律需要管理员用户,其他用户访问均返回 404。
function my_template_redirect() {
if ( is_home() && !is_user_logged_in() ) {
wp_redirect( wp_login_url() );
exit;
}
// 检查是否在访问单一文章页面
if ( is_singular() ) {
$post_id = get_queried_object_id(); // 获取当前文章ID
// 检查文章是否为公开文章,如果不是,检查用户是否登录
if ( ! has_tag( 'public', $post_id ) && ! is_user_logged_in() ) {
wp_redirect( wp_login_url( get_permalink() ) ); // 重定向到登录页面
exit;
}
}
// 非管理员用户登陆,也不可查看文章
if ( is_user_logged_in() ) {
$user = wp_get_current_user(); // 获取当前用户对象
// 检查用户是否为管理员
if ( ! current_user_can( 'manage_options' ) ) {
// 如果不是管理员,则将文章设置为空
global $wp_query;
$wp_query->post = null;
$wp_query->is_page = false;
$wp_query->is_singular = false;
$wp_query->set_404(); // 设置为404错误页面
status_header(404);
nocache_headers();
}
}
}
add_action( 'template_redirect', 'my_template_redirect' );