サポート » 使い方全般 » カスタム投稿タイプの投稿についてhtmlが反映されない問題

  • 解決済 tkj_tkj

    (@tkj_tkj)


    お世話になっております。

    表題の件、
    初めてカスタム投稿、カスタム分類を使っているのですが
    表題のような問題が発生しています。

    ○起きている問題
     1:ダッシュボードのカスタム投稿の記事新規投稿画面で
     ビジュアルエディタ HTMLエディタに記述をし、
     画像を挿入し、 文章を改行すると
     ダッシュボードのエディタの画面上では
     画像も記事の改行も反映されるのですが
     記事を表示する予定の固定ページを開くと
     画像が
    <a rel="hogehogehogehoge" href="http://hogehogehogehoge.jp/wordpress/?hogehogehogehoge"><img class="hogehogehogehoge" title="hogehogehogehoge" src="http://hogehogehogehoge.jp/wordpress/wp-content/uploads/hogehogehogehoge.png" alt="" width="hoge" height="hoge" /></a>
    と表示され、また
     記事の改行も効かない状態で表示されます。

     2:通常の投稿については画像も記事の改行も反映されておりますが
      カスタム投稿タイプの記事のみ上記の状態になります。

    ○備考
     カスタム投稿タイプのfunction.phpと実際の表示ページの記述は以下になります。
     以下と全く同じカスタム投稿を3種類設定しております。
     ・function.phpの記述
     `//hogeの投稿タイプ
    register_post_type(
    ‘hoge’,
    array(
    ‘label’ => ‘hoge’,
    ‘hierarchical’ => false,
    ‘public’ => true,
    ‘has_archive’ => true,
    ‘supports’ => array(
    ‘title’,
    ‘editor’
    )
    )
    );

    //hogeカスタムタクソノミー
    register_taxonomy(
    ‘hogehoge’,
    ‘hoge’,
    array(
    ‘label’ => ‘カテゴリー’,
    ‘hierarchical’ => true,
    )
    );`

    ・表示させたいページのコード
     `<?php $tax_posts = get_posts(‘post_type=hoge&taxonomy=hogehoge&term=hogehogehoge&posts_per_page=1’); if($tax_posts): ?>
    <ul>
    <?php foreach($tax_posts as $tax_post): ?>
    <li><?php echo esc_html($tax_post->post_content); ?></li>
    <?php endforeach; ?>
    </ul>
    <?php endif; ?>`

    エディタの設定など何か必要なのでしょうか?
    色々調べているのですが中々該当する記事がなく、
    大変恐縮なのですが、こちらで質問をさせて頂いた次第になります。

    何卒お力添えのほど 宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック投稿者 tkj_tkj

    (@tkj_tkj)

    色々と調べていたのですが、
    カスタム投稿タイプの記事毎にも引っ張ってくるコードによって、
    画像が反映されるかどうか異なるようです。

    ○カスタム投稿タイプの固定ページへの反映のさせ方
     1:固定ページ - 固定ページのテンプレート - カスタム分類のターム別記事
       画像や改行が反映されない。

       ※コード
       

    <?php $tax_posts = get_posts(‘post_type=hoge&taxonomy=hogehoge&term=hogeterm&posts_per_page=1’); if($tax_posts): ?>

      <?php foreach($tax_posts as $tax_post): ?>

    • <?php echo esc_html($tax_post->post_content); ?>
    • <?php endforeach; ?>

    <?php endif; ?>

     2:固定ページ - 固定ページのテンプレート - カスタム分類の通常の投稿
       画像や改行が反映される。

    ※コード
       

    <?php query_posts(‘post_type=hoge&ignore_sticky_post=1’); ?>
    <?php if(have_posts()): while(have_posts()):
    the_post(); ?>
    <?php get_template_part(‘single’,’hoge’); ?>
    <?php endwhile; endif; ?>

    ○ご質問内容
     
     ②のquery_postで引っ張ってきた記事は
       single-hoge.phpを作成しているため、
       画像も改行も反映されているが、
     ①のget_postで引っ張ってきた記事のテンプレートの設定が出来ていないため、
       画像も記事も反映されていないのかと思われますが、
       どのようにすればいいのかわかりません。

       一応、カスタム投稿用のsingle-hoge.phpもtaxonomy_hoge_hoge.phpも作成済みです。

    もしどなたか分かる方がおられましたら
    お力添え頂ければ幸甚に存じます。

    どうぞ宜しくお願い申し上げます。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    一人でお騒がせしてしまいました。

    ネットで検索し、全く別件で見つけたコードに代えたら解決しました。

    esc_html($tax_post->post_content);

    apply_filters( ‘the_content’, $tax_post->post_content);

    に変更。

    但し、esc_htmlやapply_filtersが何を実行するコードなのかも、
    なぜ画像が反映されるようになったのかも理屈はわかりませんが、、、

    もしどなたか解説頂ける方がおられましたら
    後学のためにご教授頂ければ幸いでございます。

    もちろん、ご解説いただけない場合でも一定期間過ぎましたら、
    当トピックは解決済みとして閉じさせて頂きます。
    お騒がせ致しました。

    popup

    (@popup)

    esc_html()はHTMLをエスケープする関数です。
    HTMLがエスケープされたので、リンクや画像のHTMLタグがそのまま表示されたようです。
    ブラウザでソースを見れば分かりますが、&lt;a rel=”~”&gt;(&は半角)のようになっていると思います。
    http://codex.wordpress.org/Function_Reference/esc_html
    http://elearn.jp/wpman/function/esc_html.html

    apply_filters()は、フィルターフックに追加してある関数を実行します。
    今回の場合、the_contentに追加してある関数をすべて実行した文字列を返します。
    通常は、記事表示にはthe_content()を使用します。

    <?php
    $tax_posts = get_posts('post_type=hoge&taxonomy=hogehoge&term=hogehogehoge&posts_per_page=1'); if($tax_posts): ?>
    <ul>
    <?php foreach($tax_posts as $tax_post):
    	setup_postdata($tax_post);
    ?>
    <li><?php the_content(); ?></li>
    <?php endforeach; ?>
    </ul>
    <?php endif; ?>

    あるいは、次のように記述しても大丈夫です。
    (’the_content’フックに追加した関数が実行された文字列が必要な場合は、the_content()を使用してください。たぶんですが、こちらはデータベースに保存してある文字列をそのまま返しています。)

    <?php
    $tax_posts = get_posts('post_type=hoge&taxonomy=hogehoge&term=hogehogehoge&posts_per_page=1'); if($tax_posts): ?>
    <ul>
    <?php foreach($tax_posts as $tax_post): ?>
    <li><?php echo $tax_post->post_content; ?></li>
    <?php endforeach; ?>
    </ul>
    <?php endif; ?>

    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    popupさん

    非常に分かりやすい解説ありがとうございました!

    関数に関する理解を深める努力が必要ですね。。。

    勉強します!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタム投稿タイプの投稿についてhtmlが反映されない問題」には新たに返信することはできません。