WordPressでカスタムフィールドを使用する場合、プラグインを使用すると思いますが、個人的に多用するのが「Custom Field Template」。
通常はあらかじめ設定したフィールドしかユーザー側では入力できないのですが、「Custom Field Template」を使って、フィールドをユーザーが追加できるようにしてみます。
フィールドに追加ボタンを設置する
テンプレートコンテンツ: 内の設定に、「multiple = true」と「multipleButton = true」を指定することで、フィールドに「追加」ボタンが表示されるようになります。
「multipul」と「multipleButton」の事例
[test] type = text size = 100 label = 追加する項目 multiple = true multipleButton = true
「multipul」と「multipleButton」の出力事例
<?php if(have_posts()): while(have_posts()):the_post();
$test = post_custom('test');
foreach((array)$test as $var) {
?>
<div>追加する項目:<?php echo $var; ?></div>
<?php }
endwhile; endif; ?>
フィールドをグループ化して、グループで追加できるようにする
記事ごとに数が違う任意のリンクを作成する時などに便利です。
Custom Field Templateの設定
[field0] type = fieldset_open legend = 関連リンク multiple = true multipleButton = true [reference_link_text] type = text size = 80 label = リンクテキスト blank = true [reference_link_url] type = text size = 80 label = リンク先URL blank = true [field0] type = fieldset_close
HTML側
<?php //関連リンク
global $wpdb;
$query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE post_id = $post->ID ORDER BY meta_id ASC";
$customField = $wpdb->get_results($query, ARRAY_A);
$referenceField = array();
$referenceLinkUrl = array();
$referenceLinkText = array();
foreach( $customField as $row ){
if( $row['meta_key'] == "field0" ){
array_push( $referenceField, $row['meta_value'] );
}
if( $row['meta_key'] == "reference_link_url" ){
array_push( $referenceLinkUrl, $row['meta_value'] );
}
if( $row['meta_key'] == "reference_link_text" ){
array_push( $referenceLinkText, $row['meta_value'] );
}
}
$length = $referenceField[0];
if(isset($referenceLinkUrl[0]) && !empty($referenceLinkUrl[0])){ ?>
<div class="custom-related">
<div class="panel panel-info">
<div class="panel-heading">関連リンク</div>
<ul class="list-group">
<?php
//表示
for( $i = 0; $i < $length; $i ++ ){ ?>
<li><a href="<?php echo $referenceLinkUrl[$i];?>" title="<?php echo $referenceLinkText[$i]; ?>" target="_blank"><i class="fa fa-link"></i> <?php echo $referenceLinkText[$i]; ?></a></li>
<?php } ?>
</ul>
</div>
</div>
<?php } ?>
リンクなど「アンカーテキスト」「リンク先URL」の複数のカスタムフィールドを、グループ化することによって、ひとまとめに追加していくことができます。

