サポート » 使い方全般 » パスワード保護ページにquery_postsを使うとパスワード入力欄がでない

  • 解決済 ノッブス

    (@ngoa)


    ページにパスワードを保護をかけています。

    そのページの使用テンプレートには、query_postsで表示カテゴリーを制限しているのですが、そうするととパスワード入力欄が表示されなくなりました。

    <?php query_posts(‘cat=149 & posts_per_page=-1 & order=desc’); ?>

    この表示を消すと正常にパスワード入力欄が表示されます。

    パスワード保護とquery_postsは一緒には使えないのでしょうか?

15件の返信を表示中 - 1 - 15件目 (全19件中)
  • モデレーター gatespace

    (@gatespace)

    全体が見えないのですが、get_posts じゃだめなんですか?

    トピック投稿者 ノッブス

    (@ngoa)

    <?php $post = get_posts('cat=149 & order=desc'); ?>
    <?php if ($post) :
    foreach($posts as $post):
    setup_postdata($post); ?>

    としても同じでした。

    query_postsにしろ、get_postsにしろ、終わった後はリセットしてますか?

    トピック投稿者 ノッブス

    (@ngoa)

    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    でリセットしています。

    ちなみにパスワード保護というのはWordPressの公開情報でのパスワード制限ですか?

    モデレーター gatespace

    (@gatespace)

    ちょっと全体像が見えないので、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(); ?>
    モデレーター gatespace

    (@gatespace)

    なお、query_posts と get_posts では役割はもちろんですが、ループの書き方リセットに使う関数が異なります。
    Codexにループの例文が載っていますので、そちらを参考にしてください。

    トピック投稿者 ノッブス

    (@ngoa)

    パスワード保護されているのは特定の固定ページで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();
    }
    トピック投稿者 ノッブス

    (@ngoa)

    <?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 ) ); では、なにがかえってきますか?

    トピック投稿者 ノッブス

    (@ngoa)

    if ( post_password_required( $post ) ) {
    でもダメでした。

    トピック投稿者 ノッブス

    (@ngoa)

    var_dump
    では、
    bool(false)
    でした。

    <?php query_posts(‘cat=149 & order=desc’); ?>

    を消すとちゃんとパスワード入力欄がでるのですが・・・

    モデレーター gatespace

    (@gatespace)

    一応、こちらでは以下の条件で期待通りの動作ができていますので、試してみてください。

    【大前提】ブラウザのキャッシュ、クッキーなど全て削除。
    単なるリロードではパスワード保護が解除された状態=パスワード入力フォームが出てこないので、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のページに書いてあります。

    モデレーター gatespace

    (@gatespace)

    言葉による行き違いがあると困るので、再確認。
    パスワードで保護したいのは「固定ページの本文」のみで良いのですよね?
    (現状では特定カテゴリーの一覧(個人情報のようですが)は保護されていません)
    (もっと具体体に言うとパスワード保護されるのはそのように設定した投稿・固定ページの the_content だけです)

15件の返信を表示中 - 1 - 15件目 (全19件中)
  • トピック「パスワード保護ページにquery_postsを使うとパスワード入力欄がでない」には新たに返信することはできません。