カスタムページテンプレートのコンテンツをパスワードで保護しようとしていますが、バックエンドで割り当てたパスワードを入力しても認証されず、送信時にページがリロードされるだけです。以下のコードは素晴らしいものではないことを私は知っていますが、これを無視してみてください - パスワード認証を正しく機能させるための手助けが必要です。
また、特定のページが実際にパスワードで保護されているかどうかを確認しないように見えますが、その代わりに、ページがパブリックかパスワードで保護されているかに関係なく、パスワード保護フォームを表示します。
<div class="container">
<?php if (post_password_required()) { ?>
<div class="trips">
<div class="homewrap">
<?php
// get all the categories from the database
$args = array('orderby' => 'id', 'order' => 'desc');
$cats = get_categories($args);
$i = 0;
$n = 0;
// loop through the categries
foreach ($cats as $cat) {
// setup the cateogory ID
$cat_id = $cat->term_id;
// Make a header for the cateogry
$string = $cat->name;
$nstring = strtolower(str_replace(" ", "-", $string));
echo "<a href='/" .$nstring. "'><div class='where'><h2 class='place'>".$cat->name."</h2></a>";
// create a custom wordpress query
query_posts("cat=$cat_id&posts_per_page=100");
// start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php // create our link now that the post is setup
$i++;
if ($i >= 2) {
echo '<div class="thing">';
}
?>
<div class="location"><a href="<?php the_permalink();?>"><?php the_title(); ?></a></div>
<?php
$thumbnail = get_the_post_thumbnail();
$url = get_the_permalink();
$description = get_post_meta( get_the_ID(), 'description', true );
echo '<div class="pictures">';
echo '<div class="featured-thumb"><a href="' .$url. '">' .$thumbnail. '</a></div>';
if (class_exists('Dynamic_Featured_Image') ) {
global $dynamic_featured_image;
$featured_images = $dynamic_featured_image->get_featured_images( $postId );
$number = count($featured_images);
for ($i = 0; $i <= 1; $i++) {
echo '<div class="featured-thumb"><a href="' .$url. '"><img src="' .$featured_images[$i]['full']. '"></a></div>';
}
}
echo '</div><!-- pictures -->';
echo '<div class="description">' .$description. '</div>';
if ($i >= 2) {
echo '</div><!-- .thing -->';
}
?>
<?php endwhile; endif; // done our wordpress loop. Will start again for each category ?>
<?php } // done the foreach statement ?>
</div>
</div><!-- .container -->
</div><!-- .homewrap -->
</div><!-- .trips -->
<?php } else { echo get_the_password_form(); } ?>
<?php
get_footer();
条件を逆にしてみてください。
if(post_password_required( )):
echo get_the_password_form();
else:
// if password not required or password cookie is present
// your protected content here
endif;
codex を参照してください。
それが役立つことを願っています。
そのトピックについての私のブログ投稿の を拡張する :
get_the_password_form()
によって作成されたフォームにパスワードを入力すると、そのフォームはpostpassという名前のクエリ引数を持つ~/wp-login.php
をターゲットにします。これはログインファイルが切り替えるために使用する$actio
nです。そこでPasswordHash
クラスが使われ、クッキーが設定されます[...]
以下の場合、post_password_required()
関数はブール値のtrue
を返します。
! empty( $post->post_password )
! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] )
フォーム(/ユーザー)入力ハッシュが一致しません
require_once ABSPATH . WPINC . '/class-phpass.php';
$hasher = new PasswordHash( 8, true );
$hasher->CheckPassword( $post->post_password, $hash );
保存されたCookieの値が一致しません
$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
0 !== strpos( $hash, '$P$B' )
すべての場合において、true
の値は - あるいはあなたのテンプレートによりますが - get_the_password_form()
を使ってポストパスワードフォームを返します。 Protip:apply_filters( 'the_password_form', $output );
フィルタを使ってUIを変更できます。そうです、文字列値としてのプレーンHTMLです。
添付ファイルと子ページ(階層型投稿タイプ)はパスワードで保護されないことに注意してください。は別の考慮事項とテンプレートコードを必要とします(親が子供を保護する必要がある場合は、単に親がパスワードで保護されているかどうかを確認してください)。
実際に something を出力するコアAPI関数がいくつかあります(リストは完全ではないかもしれません)。
get_the_content()
- > get_the_password_form()
でパスワードの投稿フォームthe_content()
...同じget_the_excerpt()
:__( 'There is no excerpt because this is a protected post.' );
the_excerpt()
...同じget_post_class()
は'post-password-required'
クラスを出力リストに追加しますその他すべての場合あなたはおそらくあなた自身のロジックをコーディングするべきです。
ユーザーがCookieを許可しているか確認してください。許可されていない場合は、問題があります。 WPにはデフォルトでテスト用のCookieが付属しているので、これは実際には非常に簡単です。例としてwp-login.php
を参照してください。 (TEST_COOKIE
定数はwp-includes/default-constants.php
でdefine('TEST_COOKIE', 'wordpress_test_cookie');
として定義されています):
if ( SITECOOKIEPATH != COOKIEPATH )
setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure );
そのため、チェックする値は'WP Cookie check'
です。そして、コア自身がチェックすることは、
if ( empty( $_COOKIE[ TEST_COOKIE ] ) )
これはtemplate_redirect
のコールバックで、あるいは単にあなたのテンプレートの中で簡単に複製できます。その後、Cookieがないと機能しないというメッセージをユーザーに提示します。
これが問題ではない場合、あなたはより深く掘り下げる必要があり、追加情報で質問を更新します。