web-dev-qa-db-ja.com

カスタムフィールドデータを保存および表示するときの改行を維持する

フォームプラグインを介してデータを収集し、そのデータを複数のカスタムフィールドを含む投稿の形式で保存します。次に、投稿のコンテンツと自分の投稿テンプレートのカスタムフィールドを使用して表示します。

if( get_post_meta( $post->ID, '_aboutus', true ) ) :                        
    echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;

「会社概要」テキストのフォームフィールドはテキストエリアで、ほとんどの寄稿者はフィールドに数行のテキストを追加します。上記のコードでコンテンツやテキストを表示しても、改行は表示されません。

2
Thomas

これはおそらく助けになるでしょう、

http://codex.wordpress.org/Function_Reference/wpautop

これは新しい行をhtmlの<br/>タグに変換します

5
Halaster

私は同じ質問で立ち往生し、実際にwpautop()をテストしました。それは働いた、例えば.

echo wpautop(get_post_meta($post->ID, '_aboutus', true));

それでも、私は1つの問題に遭遇しました。ユーザー入力をサニタイズするときは、wpautopを使用する前に改行を削除するサニタイズ方法を使用しないでください。

3
Thomas

私がやりたいことは、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を使用することもできますが、共有ボタンなどを表示するためにプラグインもプラグインにフックすることを好むため、この方法では共有ボタンがページを引き継ぐことを回避できます。

1
helgatheviking

これはうまくいくようです:

<? $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; ?>
0
Thomas

空の配列を持つwp_ksesallowed_htmlパラメータとして使用します。これは改行を削除せずに文字列をサニタイズし、ほとんどのコーディング標準に合格するはずです。

0
Nick B

どのフォームプラグインを使用するのか、またどのようにデータをデータベースに保存するのかわかりません。しかし、改行はデータベースに保存されると思います。

しかしご存知かもしれませんが、HTMLページのソースコードの改行は、ブラウザに改行を表示しません。これは nl2br() と呼ばれるとても便利なPHP関数です。
各行のタグは、ユーザーコンテンツテキスト内で改行します。

0
2ndkauboy

\n<br>にコンサート

nl2br(get_post_meta($post->ID, '_aboutus', true));
0
user2242022