Languages: English • 한국어 • (Add your language)
워드프레스 글을 공개하면, 이 글은 공개적(기본)으로 보이게 된다. 워드프레스에서 글의 공개하기 상태는 가시성이 기본으로 공개된 상태이다. 글 편집 화면의 공개하기 상자의 설정에 따른다.
워드프레스는 글의 콘텐츠 가시성에 대해 덜 공개적인 2개의 옵션도 제공한다. "편집" 링크를 클릭하면, 가시성: 공개 옆에 3개의 라디오 버튼이 표시된다:
가시성 편집이 끝나면, "OK" 버튼을 클릭한다. 이제 글에 새로운 설정이 적용된 것을 알 수 있다. 예, 가시성: 비밀번호로 보호. 기억하자: 설정 변경은 "공개하기" (또는 글이 이미 공개되었다면, "업데이트") 버튼을 클릭해야 적용이 된다.
관리자, 편집자 또는 글의 저자만이 글의 비밀번호 또는 가시성 설정을 변경할 수 있다. 이렇게 하기 위해서는, "가시성: 편집" 링크를 다시 사용한다. 이 설정은 모든 글 화면에 있는 글의 빠른 편집 링크에서도 할 수 있다.
가시성 "편집" 링크(또는"빠른 편집")에서 잊은 비밀번호를 찾을 수도 있다.
그러므로, "My Post"란 제목의 비밀번호로 보호된 글은 아래와 같이 표시된다:
워드프레스는 이 비밀번호를 브라우저 쿠키에 저장한다. 그러므로 독자는 같은 페이지를 여러 번 방문하여도 비밀번호를 다시 입력할 필요가 없다. 더구나, 여러 개의 글이 같은 비밀번호를 사용하여도, 독자는 모든 글에 접근하기 위해 그 비밀번호를 한 번만 입력하면 된다. (아래 경고 참조).
워드프레스는 한 번에 하나의 암호만을 추적한다. 그러므로, 두 개의 글이 다른 비밀번호를 사용한다면, 글 A의 비밀번호를 입력하고, 글 B의 비밀번호를 입력한다는 것은, 글 A(또는 이 비밀번호를 공유하는 모든 글)를 다시 방문할 때 글 A의 비밀번호를 다시 입력해야 한다는 뜻이다.
워드프레스는 정확한 비밀번호를 입력할 때 까지, 잠긴 글의 본문 또는 요약문을 표시하지 않는다. 그러나, 글의 사용자 정의 필드 데이터는 보호되지 않아, 여전히 보인다. 사용자 정의 필드를 감추기 위해서는, 조건문: post_password_required을 사용하여 get_post_meta 호출 (예, single.php 또는 page.php에 있는)을 감싼다. 이 하나의 워드프레스 함수는 글이 비밀번호를 요구하는지, 정확한 비밀번호가 입력 되었는지 둘 다 체크한다:
<?php if ( ! post_password_required() ) { // Code to fetch and print CFs, such as: $key_1_value_1 = get_post_meta( $post->ID, 'key_1', true ); echo $key_1_value_1; } ?>
if문 안에 있는 post_password_required 함수는 목록에 잠긴 글이 표시되지 않게 하는 것과 같은, 사용자 정의를 하기에도 편리하다.
워드프레스 필터를 사용하여, 비밀번호 폼의 기본 문장을 변경할 수 있고, 잠긴 글 요약문의 기본 문장을 변경할 수 있고, 글 요약문에 비밀번호 폼을 삽입할 수도 있다. 이렇게 하기 위해서는, 워드프레스 테마의 functions.php 파일에 다음 코드를 추가한다.
비밀번호 폼은 다음의 기본 메시지를 표시한다: "이글은 비밀글입니다. 글을 보려면 아래에 암호를 입력하세요(This post is password protected. To view it please enter your password below):" 다음 코드는 이 폼에 다른 메시지와 다른 html 구조의 폼을 반환한다 — 이 예제에서, 사용자 정의 메시지는: "To view this password protected post, enter the password below:"이다
<?php function my_password_form() { global $post; $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID ); $o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post"> ' . __( "To view this protected post, enter the password below:" ) . ' <label for="' . $label . '">' . __( "Password:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" /> </form> '; return $o; } add_filter( 'the_password_form', 'my_password_form' ); ?>
참고: my_password_form 함수는 값을 반환해야 한다: print 또는 echo를 사용하지 않는다.
비밀번호 보호 폼을 교체할 때, 데이터베이스 제약으로 처음 20 문자만 저장하므로maxlength 매개 변수는 20으로 설정해야 한다.
잠긴 글이 기본 요약문은: "잠긴 글에는 요약문이 없습니다(There is no excerpt because this is a protected post)이다" 아래 코드는 이 문장을 사용자 정의 — HTML 가능한: 문장으로 교체할 것이다.
<?php function my_excerpt_protected( $excerpt ) { if ( post_password_required() ) $excerpt = '<em>[This is password-protected.]</em>'; return $excerpt; } add_filter( 'the_excerpt', 'my_excerpt_protected' ); ?>
"<em>[This is password-protected.]</em>"을 사용자 정의 잠긴 글 요약문 메시지로 교체할 것이다.
잠긴 글의 요약문에 대한 다른 옵션은 요약문 대신에 비밀번호 폼을 표시하는 것이다. 이 방법은 인덱스 또는 아카이브 페이지에서 직접 비밀번호를 입력한다. 그런 다음, 제목 링크를 클릭하면, 본문을 볼 수 있다. get_the_password_form 함수를 사용하여, 잠긴 글의 요약문 대신 비밀번호 폼을 표시할 수 있다:
<?php function my_excerpt_password_form( $excerpt ) { if ( post_password_required() ) $excerpt = get_the_password_form(); return $excerpt; } add_filter( 'the_excerpt', 'my_excerpt_password_form' ); ?>
이것은 기본 워드프레스 비밀번호 폼과 기본 메시지 또는 사용자 정의 메시지를 가져온다. post_password_required()와 get_the_password_form() 작동 방법을 더 잘 이해하고자 한다면, wp-includes/post-template.php
에서 이 함수의 정의를 읽어본다.
이 워드프레스 코어(core) 파일에서, the_excerpt와 the_password_form 필터 및 get_the_excerpt(), get_the_title(), get_the_content() 함수도 볼 수 있다. 이 함수는, 가시성 설정에 따라, 글의 제목, 요약문과 본문을 표시하는 방법을 제어한다.
때로는, 홈 페이지 또는 아카이브 페이지과 같은 사이트의 다른 곳에 잠긴 글을 표시되지 않게 하고 싶다. 페이지 번호(pagination)에 영향을 미치지 않으면서, 효율적으로 잠긴 글을 감추려면, 테마의 functions.php에 다음 코드를 추가한다:
<?php // Filter to hide protected posts function exclude_protected($where) { global $wpdb; return $where .= " AND {$wpdb->posts}.post_password = '' "; } // Decide where to display them function exclude_protected_action($query) { if( !is_single() && !is_page() && !is_admin() ) { add_filter( 'posts_where', 'exclude_protected' ); } } // Action to queue the filter at the right time add_action('pre_get_posts', 'exclude_protected_action'); ?>
이 코드는 두 부분으로 작동한다: 첫 번째 부분은 posts_where 필터를 사용하여. 워드프레스가 실행하고 있는 SQL 쿼리에서 직접 잠긴 글을 효율적으로 삭제한다. 두 번째 부분은, 개별 글, 개별 페이지 및 관리 페이지를 제외한, 모든 페이지에 이 필터를 추가한다.
왜 pre_get_posts가 이 함수에 맞는 action인지 더 자세히 알아보려면, pre_get_posts action reference를 참조한다.