현재 로그인 한 사용자에게 페이지를 볼 수있는 적절한 여유 공간이없는 경우 404 페이지를 표시하는 방법이 있습니까? PHP 메소드를 찾고 있습니다.
if( !current_user_can('administrator') ) { show_404(); exit(); }
리디렉션 사용에 대해 생각했지만 URL을 동일하게 유지하고 싶습니다.
현재 로그인 한 사용자에게 페이지를 볼 수있는 적절한 여유 공간이없는 경우 404 페이지를 표시하는 방법이 있습니까? PHP 메소드를 찾고 있습니다.
if( !current_user_can('administrator') ) { show_404(); exit(); }
리디렉션 사용에 대해 생각했지만 URL을 동일하게 유지하고 싶습니다.
답변:
헤더에 다음 코드를 사용하여 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);
템플릿을 설정하기 전에 헤더가 올바른지 확인하기 위해 사용합니다 (워드 프레스 status_header( 404 );
기능 보다 훨씬 빠름 ). 페이지 순위가 염려되는 경우 Disallow
robots.txt 에도 공개 리소스가 아님을 나타내는 규칙을 추가해야합니다.
오류 메시지가 표시된 페이지를 만든 다음 해당 페이지로 사용자를 리디렉션하지 않는 이유는 무엇입니까? 이를 달성하는 간단한 방법은 다음과 같습니다.
404.php
파일을 열고 다음 줄을 맨 위에 추가하십시오.
/**
* Template Name: 404 Page
*/
404 Page
템플릿이 있는 페이지를 만듭니다. 그런 다음 사용자를 리디렉션하십시오.
if ( !current_user_can('administrator') ) {
$404_page = get_permalink( $404_page_id );
wp_redirect( $404_page );
exit();
}
404 요청에 페이지를 사용해야하는 이유는 다음과 같습니다. WP 404 페이지에 실제로는 존재하지 않는 페이지가 있기 때문에 WP는 404 페이지를 리턴하기 전에 모든 컨텐츠 를 검색해야 하며 작업은 자원 낭비입니다. 블로그를보다 빠르게 운영하는 데 도움이되는 미리 구성된 페이지를 사용하십시오.
http_response_code(404); exit();
입니다. 페이지를 원하면 get_template_part( 404 );
종료 전에 사용하십시오 . 또한 워드 프레스 기능보다 훨씬 빠릅니다.
당신은 파일에이 코드를 작성할 수 있습니다 404.php를 실제로 사용되는 테마 디렉토리에 (WP - 콘텐츠 / 테마 /..../ 404.php) :
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>
이 코드는 파일의 시작 부분부터 시작해야합니다 (이전 문자없이) .
Location: xxx
301 헤더를 설정하여 크롤러에게 실제로 유효한 리소스가 있음을 알리고없는 것으로 판단되면 순위를 죽입니다.
사용자의 역할에 따라 사용자가 author.php 페이지에 액세스 할 수 없도록하는 비슷한 요구 사항이있었습니다. 실제 페이지가로드되기 전에도 확인을 수행하고 404 페이지로 리디렉션하기 위해 template_redirect 작업을 등록합니다.
기재:
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();