WordPressの投稿時、パスワード保護を設定するとコンテンツは非表示になり、代わりにパスワード入力フォームが表示されるようになります。コンテンツを隠したい場合に便利ですが、パスワード保護を前提とした場合、コンテンツ以外にも隠したい要素が出てくることがあります。例えばカスタムフィールドの表示やお問い合わせフォームを「テーマ側」で出力しているとき、ついでに隠してくれよって思ってしまいます。パスワード保護した投稿で任意のコンテンツを非表示にする方法になります。
パスワード保護されているかを判定する関数
これがあれば一発と思い検索しても出なかったため中身をたどってみると、パスワード保護されているかを判定する関数はpost_password_required()
ぽいでした。Codexにはこう書いてありました。
参考URL:テンプレートタグ/post password required – WordPress Codex 日本語版
投稿がパスワードを必要とするか否か、また正しいパスワードが入力されたか否かを確認する関数。
これは$postに投稿オブジェクトまたは投稿IDを入れることで(ループ内不要)、その投稿がパスワードを要求していてパスワードが一致しない場合に「true」を返すものです。パスワードが不要であったり、パスワードが一致した場合にfalseを返すとのこと。
パスワード入力用フォームの関数
パスワードを入力するフォームを取得する関数はget_the_password_form()
です。この関数はパスワードで保護されている投稿の入力フォームを取得するものらしいのですが、フィルターフック「the_password_form」を通しているらしいので、入力フォームを編集したいときはこれを利用すればいいですね。
パスワード保護による分岐とまとめ
上記の2つをまとめるとこんな感じになります。
1 2 3 4 5 6 |
if ( post_password_required() ){ //パスワード入力フォームを出力 echo get_the_password_form( $post ); } else { //隠したい情報 } |
注意点として、$postの中身を変えている場合はきちんと「post_password_required()」の引数に入れる必要があります。また、get_the_content()の中にもこのような記述があるため、「the_content()」などは隠したい情報の方に入れるよう設定した方がいいかもしれません。
これでカスタムフィールドを表示する場合や日付やカテゴリーも隠したいなんていった場合に、任意のコンテンツを非表示にすることができます。
コメントを残す