サポート » 使い方全般 » JSコードで投稿の本文を取得したい

  • 投稿ページに
    <?php echo do_shortcode(‘[my_js_function]’); ?>
    を書き込み、そこに
    <?php the_content();?>
    投稿の本文の内容を表示させたい

    do_shortcodeの中身は

    function my_js_function_handler($atts, $content=null) {
    $content = <<< EOM
    <script type=”text/javascript”>
    $(this).append(‘<?php the_content();?>’);
    </script>
    EOM;
    }
    add_shortcode(‘my_js_function’, ‘my_js_function_handler’);

    でJSで
    <?php the_content();?>
    を表示させようとしています

    HTMLソース上に本文の内容を表示させたくないために
    JSで本文の内容を表示させようとしています
    ところがJSでは
    the_content()
    の内容を認識してくれなくて困っています

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    いくつかの点で正しく処理されません。

    1.the_contentはショートコードも含めたコンテンツの評価結果を取得するものです。
      それをショートコードの中で取得しようとしている・・・永久ループ?しないまでも、正しく取得できないと思います。
      また、ブラウザに出力を返すので、$content変数に代入できません。

    2.ヒアドキュメント中で'<?php the_content();?>’と記載していますが、その文字列がそのまま表示されてしまいます。
    参考:http://php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc

    3.1、2をクリアしたとして、コンテンツの中にシングルクォーテーションなどが含まれているとJavaScriptのエラーになります。
    エスケープする必要があります。
    参考:http://qiita.com/saekis/items/c2b41cd8940923863791

    ショートコードではなく、テンプレートの中で上記処理をした方が良いと思います。

    imaiyumiさん

    the_content();は通常のエスケープがされてしまうので、取得の「echo esc_js(get_the_content());」を使われると$の値を引き継げないでしょうか?

    esc_js();若しくはsanitize_text_field()とかのほうがよさそうな気がします。

    間違えました。

    imaiyumiさんでした。

    単純に本文をJSの変数に入れたりしたいのであれば

    
    content = <?=json_encode(apply_filters( 'the_content', get_the_content())) ?>;
    

    のようなことをする出力をすればいいんですが HTMLソース上に本文の内容を表示させたくないはどうやっても難しいかと……(読みにくくは出来ても)

    もちろん @munyagu さんのいうことも然り。

    • この返信は4年、 10ヶ月前にHinaloeが編集しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「JSコードで投稿の本文を取得したい」には新たに返信することはできません。