WordPressのパスワード付き記事に抜粋文を表示させる方法【プラグインなし】

WordPress


ガタガタです。

WordPressでパスワード付き記事を作ると、「このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。」という定型文とパスワード入力フォームが表示されます。

WordPressでパスワード付き記事を作るとこんな感じ

これだけだと、いったいなんの記事なのかタイトルから推測するしかありません。入力フォームの近くにパスワードのヒントを置いておきたい場合もあるかと思います。

そこで、記事の抜粋文をパスワード入力フォームの近くに配置するカスタマイズを紹介します。

functions.phpに以下をコピペ

// パスワード付きでも記事一覧で抜粋が出るようにする
function show_excerpt_at_archive() {
	global $post;
	// パスワード設定のない記事では普通に抜粋を表示する。
	if( !post_password_required() ) {
		$excerpt = get_the_excerpt();
	} else {
		// パスワード有りの記事の場合
		if( !has_excerpt() ) {
			// 抜粋が設定されていない場合の文章
			$excerpt = 'この作品を見るにはパスワードの入力が必要です。';
		} else {
			// 抜粋が設定されている場合は、抜粋を表示する
			$excerpt = $post->post_excerpt;
			// 抜粋をリッチエディタにしている場合は、上の1行を削除し、下の1行に書き換えてください
			// $excerpt =  VisualEditorExcerptDemo::unescape($post->post_excerpt);
		}
	}
	return $excerpt;
}
add_filter('the_excerpt','show_excerpt_at_archive' );

// パスワード付き記事の本文で、抜粋文を表示する
function show_excerpt_at_password_form() {
	global $post;
	$excerpt = $post->post_excerpt;
	$text = '<p>' . $excerpt . '</p>
	<h5>パスワードを入力してください</h5>
	<form class="post_password" action="' . wp_login_url() . '?action=postpass" method="post">
	<input name="post_password" type="password" size="24" /> <input type="submit" name="Submit" value="' . esc_attr__("送信") . '" />
	</form>';
	return $text;
}
add_filter('the_password_form', 'show_excerpt_at_password_form'); 

以上のコードをコピペすると、記事一覧でも、個別ページでも、パスワード付き記事に設定した抜粋文が表示されるようになります。

通常、記事の抜粋文を呼び出すにはget_the_excerpt()もしくはthe_excerpt()を使いますが、パスワード付き記事だとこれらの関数で抜粋文を抜き出すことができないため、$post->post_excerpt;を使っています。

文章やパスワードフォーム周りのコードは、お好みに書き換えてお使いください。

タイトルの「保護中:」を消したい

パスワード付き記事のタイトルの「保護中:」を消すには、以下のようにします。

function edit_protected_word () {
return '%s';
}
add_filter('protected_title_format','edit_protected_word');

%sの部分がタイトルにあたります。デフォルトだと保護中:%sのような設定になっているので、これを上書きします。Fontawesomeなどのカギのアイコンを付けたりしても可愛いです。