フォームプラグインを介してデータを収集し、そのデータを複数のカスタムフィールドを含む投稿の形式で保存します。次に、投稿のコンテンツと自分の投稿テンプレートのカスタムフィールドを使用して表示します。
if( get_post_meta( $post->ID, '_aboutus', true ) ) :
echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;
「会社概要」テキストのフォームフィールドはテキストエリアで、ほとんどの寄稿者はフィールドに数行のテキストを追加します。上記のコードでコンテンツやテキストを表示しても、改行は表示されません。
私は同じ質問で立ち往生し、実際にwpautop()
をテストしました。それは働いた、例えば.
echo wpautop(get_post_meta($post->ID, '_aboutus', true));
それでも、私は1つの問題に遭遇しました。ユーザー入力をサニタイズするときは、wpautopを使用する前に改行を削除するサニタイズ方法を使用しないでください。
私がやりたいことは、functions.phpに以下を追加することによってthe_content
に適用されるすべてのデフォルトフィルタを作り直すことです。
/*
* Recreate the default filters on the_content
* this will make it much easier to output the meta content with proper/expected formatting
*/
add_filter( 'meta_content', 'wptexturize' );
add_filter( 'meta_content', 'convert_smilies' );
add_filter( 'meta_content', 'convert_chars' );
add_filter( 'meta_content', 'wpautop' );
add_filter( 'meta_content', 'shortcode_unautop' );
add_filter( 'meta_content', 'prepend_attachment' );
その場合、テンプレートコードは次のようになります。
<?php
if( $about = get_post_meta($post->ID, '_aboutus', true ) ):
echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>';
endif;
?>
もちろんthe_content
を使用することもできますが、共有ボタンなどを表示するためにプラグインもプラグインにフックすることを好むため、この方法では共有ボタンがページを引き継ぐことを回避できます。
これはうまくいくようです:
<? $source = get_post_meta($post->ID, '_aboutus', true);
if($source){
$source = explode("\n", $source); ?>
<? for($i = 0;$i<sizeof($source);$i++){ ?>
<? echo $source[$i]; ?><br />
<? } ?>
<? } ?>
<?php if(get_post_meta($post->ID, '_aboutus', true)): echo '</div>'; endif; ?>
空の配列を持つwp_kses
をallowed_html
パラメータとして使用します。これは改行を削除せずに文字列をサニタイズし、ほとんどのコーディング標準に合格するはずです。
どのフォームプラグインを使用するのか、またどのようにデータをデータベースに保存するのかわかりません。しかし、改行はデータベースに保存されると思います。
しかしご存知かもしれませんが、HTMLページのソースコードの改行は、ブラウザに改行を表示しません。これは nl2br() と呼ばれるとても便利なPHP関数です。
各行のタグは、ユーザーコンテンツテキスト内で改行します。
\n
を<br>
にコンサート
nl2br(get_post_meta($post->ID, '_aboutus', true));