サポート » 使い方全般 » パスワードで保護された記事のカスタムフィールド表示

  • 解決済 Maxion

    (@maxion)


    記事投稿の際に公開情報の「パスワード保護」にチェックを入れ、
    パスワードを入力した上で公開すると、
    記事本文は「この記事はパスワードで〜」と表示されパスワードを入力するまでは閲覧できなくなりますが、記事に設定したカスタムフィールドの項目は表示されてしまっております。

    パスワードで保護された記事内のカスタムフィールドも非表示にする方法はありませんでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • カスタムフィールドを表示するようにソースを記述していると思われますが、その記述場所に問題があるのではないでしょうか。保護されない領域に表示用ソースを記述しているとか?

    shokun0803様

    ご回答頂きまして、ありがとうございました。
    私の方でいろいろと「保護されない領域」というのを調べてみましたが、
    いまいちピンとくるソースが見つけられませんでした。

    テンプレート内には以下のように記述しております。

    〜省略〜
    <?php if (have_posts()):while(have_posts()):the_post(); ?>

    <?php the_content(); ?>

    <?php echo get_post_meta($post->ID,’カスタムフィールド名’,TRUE); ?>

    <?php endwhile; endif; ?>
    〜省略〜

    そうしますと、<?php the_content(); ?>が記述されている箇所に「パスワードで保護されています」と表示されますが、それ以下にありますカスタムフィールドの領域はそのまま表示されてしまいます。

    例えば、上記のテンプレートの記述以外に何かプラスする要素はあるのでしょうか?

    post_password_requiredを用いてif文で何とか、と思ってもみましたが、
    どうも上手くいきません。

    調べてみました。パスワード保護自体を使ったことがなかったので今まで気付きませんでしたが、パスワードで保護されるのは本文 (post_content) だけのようですね。カスタムフィールド値なども保護したい場合には、注意が必要そうです。

    post_password_required() を使うという点は正解のようです。注意すべきは、この関数が true を返すのは、投稿がパスワード保護されており、かつパスワードが未入力または間違っている場合である点です。ややこしいですが、反対の意味を考えてみると false を返す場合というのは、投稿がパスワード保護されていないか、パスワードが正しく、その値がクッキーに保存されている場合になります。

    従って、 post_password_required() が false を返す (=パスワードが必要ない) 場合に echo するようコードを記述すれば OK のはずです。

    <?php if ( !post_password_required( $post->ID ) ) : ?>
    <?php echo get_post_meta( $post->ID, 'key', true ); ?>
    <?php endif; ?>

    mizube様

    ご返信頂きまして、ありがとうございます。

    お教え頂きました内容にて、試してみましたところ、
    無事にカスタムフィールドも含めてパスワード保護の対象となりました。
    お忙しいところお付き合い頂きまして、ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「パスワードで保護された記事のカスタムフィールド表示」には新たに返信することはできません。