資料皆無でWordPressの管理を引き継ぎました。
以前のデーターはPhpMyAdminで参照するとシリアライズされて格納されています。
a:10:{i:0;a:1:{s:6:"住所";s:9:"福岡市";}i:1;a:1:{s:6:"交通";s:9:"地下鉄";}}
新規投稿でこのカスタムフィールドに入力する値はどのようにすれば、配列として格納されますか?
限りある知識の中でCSVデーターのように入力したところ、
住所,福岡市
、交通,地下鉄
。
のようにタダの文字列になっており、配列出力でエラーになりました。
Invalid argument supplied for foreach() in
どのようなフォーマットで入力すれば、正常に配列出力されますか?
補足:関連すると思われるソースコード
ワードプレス本来の/themes/name/single.phpにあたるファイル
PHP
1<!--前提:(引き継ぐ以前に)カスタムフィールドに入力された値は配列としてで格納されている、入力ルールや処理方法は不明。--> 2 <?php if (have_posts()) : ?> <?php while(have_posts()) : the_post(); ?> 3 <?php 4 $title = get_the_title(); 5 $title = $title === '' ? 'タイトルなし' : $title; 6 7 $data = get_post_meta(get_the_ID(), 'data', true);//単一フィールド配列 8 9 $sold_out = get_post_meta(get_the_ID(), 'sold_out', true); 10 $content = get_the_content(); 11 ?> 12 <h1><?php echo $title; ?><?php if ($sold_out === '1') echo '(ご成約)'; ?></h1> 13 <div<?php if ($sold_out === '1') echo ' class="sold-out"'; ?>> 14<!--出力ここから--> 15 <table class=""> 16 <?php foreach($data as $datum): ?><tr><?php foreach($datum as $key => $value): ?><th><?php echo $key; ?></th><td><?php echo $value; ?></td><?php endforeach; ?></tr><?php endforeach; ?> 17 </table> 18<!--出力ここまで--> 19 <!--中略--> 20 <?php endwhile; endif; ?>
追記:wp_postmetaデーブルの一部
_wpcf-etcs-sort-order a:1:{i:0;i:6233;} etcs a:0:{} data a:10:{i:0;a:1:{s:6:"住所";s:9:"福岡市";}i:1;a:1:{s:6:"交通";s:9:地下鉄"";...}
再追記:functions.phpの一部(コメントアウト状態なので無視していたが、念のために。)
PHP
1// add_action('rest_api_init', function () { 2// register_rest_field( 3// 'page', 4// 'post_meta', 5// array( 6// 'get_callback' => function($object, $field_name, $request) { 7// $meta_fields = array( 8// 'wpcf-js', 9// 'wpcf-css', 10// ); 11// $meta = array(); 12// foreach ($meta_fields as $field) { 13// $meta[$field] = get_post_meta($object[ 'id' ], $field, true); 14// } 15// return $meta; 16// }, 17// 'update_callback' => function($value, $object, $field_name) { 18// $js = $value['wpcf-js']; 19// $css = $value['wpcf-css']; 20// update_post_meta($object->ID, 'wpcf-js', $js); 21// update_post_meta($object->ID, 'wpcf-css', $css); 22// } 23// , 24// 'schema' => null, 25// ) 26// ); 27// });
補足2:「WP自体」の記事&フィールドの投稿・更新動作
rest-api-init.phpからの抜き出し、
PHP
1public function add_rest_field($posts, $fields) { 2 global $posts_fields; 3 foreach ($posts as $post) { 4 foreach ($fields as $field) $posts_fields[$post][] = $field; 5 register_rest_field( 6 $post, 7 'post_meta', 8 [ 9 'get_callback' => function($object, $field_name, $request) use ($post) { 10 global $posts_fields; 11 $meta = []; 12 foreach($posts_fields[$post] as $field) { 13 $meta[$field] = get_post_meta($object['id'], $field, true); 14 } 15 return $meta; 16 }, 17 'update_callback' => function($value, $object, $field_name) use ($post) { 18 global $posts_fields; 19 foreach($posts_fields[$post] as $field) { 20 if (!$this->validate($field, $value[$field])) break; 21 update_post_meta($object->ID, $field, $this->set($field, $value[$field])); 22 } 23 }, 24 'schema' => null 25 ] 26 ); 27 } 28}
ほとんど理解できていないが、おそらく肝心なところ↓
$meta[$field] = get_post_meta($object['id'], $field, true);
update_post_meta($object->ID, $field, $this->set($field, $value[$field]));

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 11:18
2020/03/09 23:14