gin260さん、はじめまして。
http://ja.forums.wordpress.org/topic/6819?replies=2
を投稿した者です。
せっかく参考にしていただいたのに申し訳ありませんm(_ _)m
確かに、データの削除・追加をしたり、一度保存した後にデータを入力すると、
データがバラバラになりますね。
まだ試せていませんが、本家フォーラムにてうまく行ってるっぽい投稿があり
ましたので、ご覧になってみて下さい。
http://wordpress.org/support/topic/plugin-custom-field-template-unique-id-of-each-instance-of-a-multiple-field?replies=12
私の方でも、試してみたいと思います。
tonoroさんはじめまして。
Custom Field Templateのグループ化+multipleは、なかなか資料がなかったので、
tonoroさんの記事は大変参考になりました。有難うございます。
そして更に参考記事まで有難うございます!
早速試してみたいと思います。
テスト後、こちらに改めてご報告させていただきます。
それまで申し訳ございませんが未解決のままとさせていただきます。
参考記事は試していないのですが・・・
■カスタムフィールドテンプレート
[field0]
type = fieldset_open
legend = テスト
multiple = true
multipleButton = true
[画像]
type = file
mediaLibrary = true
relation = true
blank = true
[商品名]
type = text
size = 80
blank = true
[商品説明文]
type = textarea
rows = 7
cols = 70
blank = true
[field0]
type = fieldset_close
■テンプレート
//DBからデータ取得。
//$wpdb->postmeta カスタムフィールドのキーと値が保存されているテーブル
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";
$cf = $wpdb->get_results($query, ARRAY_A);
$pics = array();
$item = array();
$desc = array();
foreach( $cf as $row ){
if( $row['meta_key'] == "画像" ){
array_push( $pics, $row['meta_value'] );
}
if( $row['meta_key'] == "商品名" ){
array_push( $item, $row['meta_value'] );
}
if( $row['meta_key'] == "商品説明文" ){
array_push( $desc, $row['meta_value'] );
}
}
$length = count( $pics );
//表示
for( $i = 0; $i < $length; $i ++ ){
echo '<div class="food">';
echo '<h3>' . $item[$i] . '</h3>';
echo '<p>' . wp_get_attachment_image( $pics[$i] ) . '<br />';
echo $desc[$i] . '</p>';
echo '<hr />';
echo '</div>';
}
CFTには、各項目に「blank = true」というパラメータを追加しました。これ
に関してはプラグイン作者様にご指南いただきました。
で「blank = true」をつけると、meta_idの順序と投稿画面での入力順序の整
合が取れるのですが、get_post_custom()で取得する際meta_idがソートのキー
になっていないので、元の表示用のソースでは、データがチグハグに表示され
てしまうようでした。
なので、DBから直接meta_idでソートした状態で取得しました。
それ以降のソースはもっときれいに書けそうな気もします。
上記の設定・ソースで5件ほどのグループの追加・削除を繰り返してみて、問
題なさそうでした(今回の件もありますので、良くご検証くださいませ)。
画像を含んだグループを削除すると最後尾のグループの画像を見失う、いう症
状が出ましたので、この点はまた別の設定が必要なのかも知れません。
遅くなりましたがtonoroさん有難うございます。
本家フォーラムの参考記事ですが、いろいろ試してみたものの私のやり方が間違っているのか、思うような表示になりませんでした。
PHPは本当に見よう見真似なので、ちょっと自信はないのですが…。
「blank = true」を使った新しい方法とソースまで有難うございます!
早速検証させていただきましたが仰る通り、グループの追加と削除を繰り返すと
一番最後のグループの画像が消えてしまうようです。
さらに、私の方では消えた画像のグループに別のグループの画像が入ってしまうという現象が起こっていました。
しかし、テキストの方はまったく問題なく表示されております。本当に有難うございます。
画像の問題だけ何とかしたいので、もう少し未解決のままとさせてください。
本日付けのアップデートVer.1.8.8で試したところ、こちらの環境では、file,
textとも期待通りの表示になりましたので、ご報告まで。
tonoroさん有難うございます。
おかげさまで、私の方でもテキスト・画像ともに正常に表示されました。
これでより、カスタムフィールドが使いやすく便利なものになったかと思います。
半ば諦めかけていたものでしたので、とても嬉しいです。
本当に有難うございました。
<?php
//DBからデータ取得。
//$wpdb->postmeta カスタムフィールドのキーと値が保存されているテーブル
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”;
$cf = $wpdb->get_results($query, ARRAY_A);
$pics = array();
$item = array();
foreach( $cf as $row ){
if( $row[‘meta_key’] == “質問” ){
array_push( $pics, $row[‘meta_value’] );
}
if( $row[‘meta_key’] == “回答” ){
array_push( $item, $row[‘meta_value’] );
}
}
$length = count( $pics );
for( $i = 0; $i < $length; $i ++ ){
echo ‘<div>’;
echo ‘<h3>’ . $pics [$i] . ‘</h3>’;
echo ‘<hr />’;
echo ‘<p>’ . $item [$i] . ‘</p>’;
echo ‘</div>’;
}
?>
と書いたのですがエラーが表示されます。ご指導お願いします。
希望としては
Q:質問内容・・・・
A:回答・・・・
で表示できるようにしたいのですが
Cutom Field Templateの複数項目の出力についてつまづいております。
上記回答のコード
・カスタムフィールドテンプレート
[field0]
type = fieldset_open
legend = テスト
multiple = true
multipleButton = true
[画像]
type = file
mediaLibrary = true
relation = true
blank = true
[商品名]
type = text
size = 80
blank = true
[商品説明文]
type = textarea
rows = 7
cols = 70
blank = true
[field0]
type = fieldset_close
・呼び出しているカスタムテンプレートに
<?php
//DBからデータ取得。
//$wpdb->postmeta カスタムフィールドのキーと値が保存されているテーブル
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”;
$cf = $wpdb->get_results($query, ARRAY_A);
$pics = array();
$item = array();
$desc = array();
foreach( $cf as $row ){
if( $row[‘meta_key’] == “画像” ){
array_push( $pics, $row[‘meta_value’] );
}
if( $row[‘meta_key’] == “商品名” ){
array_push( $item, $row[‘meta_value’] );
}
if( $row[‘meta_key’] == “商品説明文” ){
array_push( $desc, $row[‘meta_value’] );
}
}
$length = count( $pics );
//表示
for( $i = 0; $i < $length; $i ++ ){
echo ‘<div class=”food”>’;
echo ‘<h3>’ . $item[$i] . ‘</h3>’;
echo ‘<p>’ . wp_get_attachment_image( $pics[$i] ) . ‘
‘;
echo $desc[$i] . ‘</p>’;
echo ‘<hr />’;
echo ‘</div>’;
} ?>
としてみましたが、うまくいきませんでした。
この場合、wordpressのカスタムテンプレートではなく、カスタムフィールドテンプレートのPHP CODEに上記コードを書くのでしょうか?
カステムフィールドテンプレートの複数項目についての情報が少なく困っております。
ご指南ください。