パスワード保護ページにquery_postsを使うとパスワード入力欄がでない
-
<?php $post = get_posts('cat=149 & order=desc'); ?> <?php if ($post) : foreach($posts as $post): setup_postdata($post); ?>
としても同じでした。
query_postsにしろ、get_postsにしろ、終わった後はリセットしてますか?
ちなみにパスワード保護というのはWordPressの公開情報でのパスワード制限ですか?
ちょっと全体像が見えないので、nekomimiTaichoさんの質問もあわせて確認させてください。
- パスワード保護されているのは特定の固定ページでWordPressの公開情報でのパスワード制限である。
- 専用のテンプレートを用意している。
- 専用のテンプレート内で、固定ページのタイトルや内容の他に、指定したカテゴリーに属する投稿の一覧を表示させようとしている。
- パスワードで保護されるのは固定ページの内容のみであるが、現状パスワード入力欄が表示されない
- もちろん、WordPressからログアウトした状態で確認している
その特定の固定ページのテンプレートはこんな感じですか?(いろいろ省略してますが)
あと、get_posts の一連のサンプルもあわせて書いておきます。<?php get_header(); ?> <div id="primary" class="site-content"> <div id="content" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', 'page' ); ?> <?php comments_template( '', true ); ?> <?php endwhile; // end of the loop. ?> <?php // この辺特定カテゴリーの投稿一覧を表示 ?> <ul> <?php $args = array( 'posts_per_page' => -1, 'category' => 149 ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; wp_reset_postdata();?> </ul> <?php // ここまで ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
なお、query_posts と get_posts では役割はもちろんですが、ループの書き方リセットに使う関数が異なります。
Codexにループの例文が載っていますので、そちらを参考にしてください。パスワード保護されているのは特定の固定ページでWordPressの公開情報でのパスワード制限である。
専用のテンプレートを用意している。
専用のテンプレート内で、固定ページのタイトルや内容の他に、指定したカテゴリーに属する投稿の一覧を表示させようとしている。
パスワードで保護されるのは固定ページの内容のみであるが、現状パスワード入力欄が表示されない
もちろん、WordPressからログアウトした状態で確認している全てその通りです。
記述は以下のような感じです。(ループ部分)
<?php query_posts('cat=149 & order=desc'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php the_content(); ?> <div class="list"> <table width="100%" border="0" cellspacing="2" cellpadding="2"> <tr> <th>氏名</th> <td><a href="<?php the_permalink(); ?>" target="_blank"><?php echo post_custom('k_name')?></a></td> <th>年齢</th> <td><?php echo post_custom('k_age')?></td> </tr> </table> </div> <?php endwhile; ?> <?php wp_reset_query();endif; ?>
こんにちは、
以下のような事は、試しましたか?
// if ( post_password_required( $post ) ) { or if ( ! empty( $post->post_password ) ) { echo get_the_password_form(); }
<?php query_posts('cat=149 & order=desc'); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if ( ! empty( $post->post_password ) ) { echo get_the_password_form(); } ?>
のようにしてみましたが、同じでした。
$post->post_password は、空ですか
if ( post_password_required( $post ) ) {
でも、同じですか?var_dump( post_password_required( $post ) );
では、なにがかえってきますか?var_dump
では、
bool(false)
でした。<?php query_posts(‘cat=149 & order=desc’); ?>
を消すとちゃんとパスワード入力欄がでるのですが・・・
一応、こちらでは以下の条件で期待通りの動作ができていますので、試してみてください。
【大前提】ブラウザのキャッシュ、クッキーなど全て削除。
単なるリロードではパスワード保護が解除された状態=パスワード入力フォームが出てこないので、Chromeのシークレットウィンドウなどで試してください。1. パスワード保護にした固定ページを作成。特定カテゴリーの一覧を表示するように下テンプレートを適用。
2. テンプレートの内容(Twenty Twelveの子テーマを作って確認しています。)<?php get_header(); ?> <div id="primary" class="site-content"> <div id="content" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', 'page' ); ?> <?php comments_template( '', true ); ?> <?php endwhile; // end of the loop. ?> <?php // この辺特定カテゴリーの投稿一覧を表示 ?> <ul> <?php $args = array( 'posts_per_page' => -1, 'category' => 149 ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; wp_reset_postdata();?> </ul> <?php // ここまで ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
3. ページを表示。Chromeのシークレットウィンドウを使うのでクッキーやキャッシュ無効。
この時点でパスワード入力フォームと特定カテゴリーの投稿一覧が表示
4. パスワード入力。固定ページの本文と特定カテゴリーの一覧が表示
※可能な限り、ブラウザのキャッシュやクッキーを削除して確認してください。
一度パスワードが通った後では、再読込をしてもパスワード入力済みの判定がされました。※あと、こういった「メインの内容の他に特定の条件による投稿一覧を表示」する場合は get_posts 使いましょう。理由はCodexのquery_postsのページに書いてあります。
- トピック「パスワード保護ページにquery_postsを使うとパスワード入力欄がでない」には新たに返信することはできません。