投稿(カスタム投稿)で、イベントの各種の情報をカスタムフィールドに入力して、それらを出力する場合などの利用方法のメモ。
訂正:カスタムフィールドの値に <br> は記述できますし、改行して記述することもできます。
//区切り文字を他の文字(スペースや'<br />'等)に変換して返す関数 function get_replaced_string($string, $delimeter, $replace) { $escaped_string = esc_html($string); if($escaped_string == '') return ''; $string_array = explode($delimeter,$escaped_string ); $replaced_string = ''; $count = count($string_array); if($count > 1 ) { for($i = 0 ; $i < $count; $i++) { if($i != $count -1) { $replaced_string .= $string_array[$i].$replace; }else{ $replaced_string .= $string_array[$i];//最後の文字列には変換文字を付けない } } return $replaced_string; }else { return $string_array[0];//1つの場合(区切文字がない場合)はそのまま返す } } [/code] <h3>カスタムフィールドの値を出力</h3> <ul> <li>それぞれの情報が必ず入力されているわけではないので、ない場合は出力しない。</li> <li>それぞれの値を格納する変数を初期化。</li> <li>get_post_custom()で値を取得。</li> <li>内部的なフィールド以外の値を処理。</li> <li>値は空白を取り除き、エスケープ処理<del datetime="2014-06-17T18:14:15+00:00">して、区切り文字がある場合は、<br> に変換。</del></li> <li>エスケープ処理には、wp_kses() を使用すると便利(許可する HTML 要素を指定できる)</li> <li><del datetime="2014-06-17T18:14:15+00:00">get_replaced_string()ではエスケープ処理を含む。</del></li> <li>値が入力されているものだけを出力。</li> </ul><?php $venue =''; $date =''; $address =''; $web =''; $url =''; $fields = get_post_custom(); //許可する(エスケープしない)HTML 要素 $allowed_html = array( 'a' => array( 'href' => array (), 'target' => array() ), 'br' => array(), 'span' => array(), 'strong' => array() ); foreach($fields as $name => $value) { if(!(preg_match("/^_/", $name))) {//内部的なフィールド以外 switch($name) { case 'venue': //$venue = get_replaced_string(trim($value[0]), '|', '<br />'); 以下に変更 $venue = wp_kses(nl2br(trim($value[0])), $allowed_html); break; case 'date': //$date = get_replaced_string(trim($value[0]), '|', '<br />'); 変更 $date = wp_kses(nl2br(trim($value[0])), $allowed_html); break; case 'address': //$address = get_replaced_string(trim($value[0]), '|', '<br />'); 変更 $address = wp_kses(nl2br(trim($value[0])), $allowed_html); break; case 'web': //$web = esc_html(trim($value[0])); 変更 $web = wp_kses(trim($value[0]), $allowed_html); break; case 'url': //$url = esc_html(trim($value[0])); 変更 $url = wp_kses(esc_url(trim($value[0])), $allowed_html); break; default: break; } } } ?> <?php if($venue): ?> <p class="venue"><?php echo $venue; ?></p> <?php endif; ?> <?php if($date): ?> <p class="date"><?php if($date) echo $date; ?></p> <?php endif; ?> <?php if($address): ?> <p class="address"><?php echo $address; ?></p> <?php endif; ?> <?php if($web && $url): ?> <p class="web1"><?php echo '<a href="' . $url . '" target="_blank">' . $web . '</a>' ?></p> <?php endif; ?>