if( !current_user_can('administrator') ) { show_404(); exit(); }
我曾考虑过使用重定向,但我想保持url不变。
#1 楼
通过在标题中使用以下代码,我能够显示404错误。<?php
global $wp_query;
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 ); exit();
?>
要分解它:
$wp_query->set_404()
:告诉wp_query这是404,这更改标题status_header()
:发送HTTP 404标头get_template_part()
:显示404模板评论
这是一个很好的答案,但是我也会使用http_status_code(404);在设置模板以确保标题正确之前(这比wordpress status_header(404);功能要快得多)。如果您关注网页排名,还应该在robots.txt中放置一个Disallow规则,以表明它不是公共资源。
– mopsyd
18 Mar 15 '18 2:12
#2 楼
为什么不创建一个显示错误消息的页面,然后将用户重定向到该页面?这是实现此目的的简单方法:打开
404.php
文件并将这些行添加到文件顶部:/**
* Template Name: 404 Page
*/
创建一个
404 Page
模板的页面。然后重定向用户:if ( !current_user_can('administrator') ) {
4_page = get_permalink( 4_page_id );
wp_redirect( 4_page );
exit();
}
您应使用404请求页面的原因是:在WP 404页面中实际上是一个不存在的页面,WP必须在返回404页面之前搜索其所有内容,而这浪费了资源。使用预配置的页面可以帮助您更快地运行博客。
评论
我已经考虑过使用它。但是我发现有两个缺点,那就是必须创建和维护两个404模板(页面和实际)。客户将必须创建一个404页面。我想保持URL不变。例如,如果我转到example.com/restricted,则不会将我重定向到... / 404 /
–杨E
2011年8月4日在7:02
实际上我只是意识到404.php是模板。我的错。
–杨E
2011年8月4日在7:24
不,如果您希望获得任何页面排名,那将是一个非常糟糕的主意。搜索引擎只会将返回404或任何4xx范围标头的页面视为查看器错误,并且会愉快地为返回200页的任何内容编制索引。如果您进行重定向,则会告诉爬网程序未找到的页面是有效页面,这将严重破坏您的页面排名。当您获得404页面时,您真正需要做的就是http_response_code(404);出口();。如果需要页面,则使用get_template_part(404);出口前。这也比任何WordPress功能都快得多。
– mopsyd
18-3-15在2:05
#3 楼
我有一个类似的要求,即不允许用户根据用户所处的角色来访问author.php页面。我注册了template_redirect操作以进行检查,甚至在加载实际页面之前也重定向到404页面。 />注册:
add_action( 'template_redirect', [ $this, 'handle_inactive_users']);
处理程序:
public function handle_inactive_users() {
global $wp_query;
if ( $wp_query->is_author() ) {
$user = $wp_query->get_queried_object();
if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
}
}
}
如果选择仅使用模板部分中间的以下代码段,该页面可能已经部分呈现,您实际上并未重定向到404页面。因此最好在
template_redirect
动作中执行-$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
#4 楼
您可以将此代码写入实际使用的主题目录(wp-content / themes /..../ 404.php)中的文件404.php:<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>
此代码必须从文件开头开始(之前没有任何字符)。
链接到原始文件:如何将404页面重定向到WordPress中的首页
评论
OP实际上正在寻找一种方法来为不符合特定条件的用户显示404,例如“如果用户A不具有'can_edit'功能,则显示404页面。”
–phatskat
17年5月5日在15:18
不要重定向404。位置:xxx设置了301标头,该标头告诉爬虫实际上存在有效资源,并在爬虫确定不存在有效资源时终止您的排名。
– mopsyd
18 Mar 15 '18 2:10
评论
如果您拒绝访问存在的页面的用户,则404是错误的错误代码。 401或403更有意义。你是对的。客户端给我的印象是,他甚至不希望任何无法访问的人知道该页面的存在,抛出401表示该页面存在但被禁止。但是,改为抛出401会很容易。