• 解決済 shirochaushi

    (@shirochaushi)


    カスタムフィールドとテーブルで情報を表示したいと思っています。

    テーブルの作りは下記の通りシンプルです。

    ————
    | キー | 値 |
    ————
    | キー | 値 |
    ————
    | キー | 値 |
    ————
    | キー | 値 |
    ————-

    ただ、値にデータが入らないことがあり、その場合は
    その値が絡むテーブルの行ごと(<tr>から</tr>まで)
    非表示にしたいのです。

    どのようにしたら良いのでしょうか?
    宜しくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 値が空でない場合に <tr>...</tr> を出力するようにコードを記述します。

    <table class="postmeta">
    <?php
    $metakeys = array('キー1', 'キー2', '...' ); // 表示したいカスタムフィールドのキーを配列に格納
    foreach( $metakeys as $key ) :
        $value = get_post_meta( $post->ID, $key, true );
        $value = esc_html( $value ); // WP2.8+
        // $value = wp_specialchars( $value );
        if ( !empty( $value ) ) :
    ?>
        <tr>
            <th class="key" scope="row"><?php echo $key; ?></th>
            <td class="value"><?php echo $value; ?></td>
        </tr>
    <?php
        endif;
    endforeach;
    ?>
    </table>

    トピック投稿者 shirochaushi

    (@shirochaushi)

    mizubeさん
    こんばんは。返信ありがとうございました。

    教えていただきました方法を試してみました。

    このテーブルは、ページの途中に配置しますが、テーブルまでの表示はされているものの
    それ以降が表示されなくなりました。
    いただいたソースのキー部分のみ変更しています。

    恐縮ですが、ご指導くださいますようお願いいたします。

    すみません、説明が足りませんでした。

    一応分かるようにコメントで書いておいたつもりだったのですが、
    WordPress 2.8 未満のバージョンでは、 esc_html() は定義されていませんので、

    $value = esc_html( $value );

    の代わりに

    $value = wp_specialchars( $value );

    としてみてください。

    トピック投稿者 shirochaushi

    (@shirochaushi)

    ありがとうございました!

    私の知識不足でご迷惑をお掛けしました。

    無事、表示されました。

    ただ、私が事前にお伝えすればよかったのですが、
    カスタムフィールドには一部HTMLタグが入り、そのタグを有効にしたいと
    思っています。

    お願いばかりで申し訳ないので最後は自力でと思いウェブで調べてみたのですが
    解決できませんでした。
    ※wp_specialcharsが関係しているのでしょうか?

    度々で申し訳ありません。
    カスタムフィールド内のHTMLタグを有効にする方法を教えていただけますでしょうか。
    宜しくお願いいたします。

    ※wp_specialcharsが関係しているのでしょうか?

    その通りです。 wp_specialchars() を通すと、 HTML で使用するいくつかの記号文字がすべて実体参照または数値文字参照へ変換されます。 (< が &lt; など)
    もし shirochaushi さんだけが投稿を作成する、または信頼できるユーザーのみが投稿を作成する場合など、悪意あるコードが挿入される危険性がないのであれば、 HTML タグをそのまま出力しても問題はないと思いますので、その行は削除しても構いません。

    ちなみに WordPress の投稿で許可されているタグ以外を除去したい場合は、件の行を

    $value = wp_filter_post_kses( $value );

    に置き換えてみてもいいかもしれません。例えば table 要素の中にあってはまずい、 <html></html><body></body> がカスタムフィールドの値に入力されていても、そのタグを除去してくれます。

    一方、 a 要素などコメントでも許可されている主なインライン要素のみを許可するだけでよい場合は

    $value = wp_filter_kses( $value );

    を更にその代わりとして使用した方がいいと思います。より都合のよい方を選んでください。

    許可されているタグについては、これらの関数が定義されている /wp-includes/kses.php にて、許可タグと使用できる属性が配列で定義されています ($allowedposttags が前者、 $allowedtags が後者) ので、気になればそちらもチェックしてみてください。

    # 最善の方法が分かりませんので、より適切な方法があればどなたかご指摘ください。

    トピック投稿者 shirochaushi

    (@shirochaushi)

    mizubeさん

    ありがとうございました!
    無事表示されるようになりました。

    大変お世話になりました。
    ありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタムフィールドtoテーブル」には新たに返信することはできません。