###前提・実現したいこと
WordPressでsave_post
のフックを使い、カスタムフィールドの保存を実装しています。
この保存値として配列を$_POST
し、それをjson_encode()
するとダブルクオートがつくのですが、これを削除したいです。
###発生している問題
下記ソースコードでDBに"[]"
が保存されてしまいます。
ダブルクオートを削除して[]
としたいです。
###該当のソースコード
functions.phpに下記を書いています。
カスタムフィールドのキーはtest_array_1
とtest_array_2
としました。
test_array_1
には[]
を指定し、DBにも[]
が保存されますが、
test_array_2
には$_POST
から[]
を取得しているつもりのに、DBに"[]"
が保存されてしまうといった状況でございます。
php
1// カスタムフィールドを更新する 2add_action( 'save_post', 'my_save_post_meta' ); 3function my_save_post_meta( $post_id ) { 4 5 // カスタムフィールドのキー 6 $meta_keys = [ 'test_array_1', 'test_array_2' ]; 7 8 // 更新 9 foreach ( $meta_keys as $meta_key ) { 10 11 // こちらは $_POST に関係なく [] を保存する処理で問題なし 12 if ( $meta_key == 'test_array_1' ) { 13 $test_array_1 = []; 14 my_update_post_meta_encode( $post_id, 'test_array_1', $test_array_1 ); 15 } 16 17 // こちらは $_POST を使って [] を保存したいが、"[]" が保存されてしまう 18 elseif ( $meta_key == 'test_array_2' ) { 19 $test_array_2 = stripslashes( $_POST[$meta_key] ); 20 my_update_post_meta_encode( $post_id, 'test_array_2', $test_array_2 ); 21 } 22 } 23} 24 25// 配列をエンコードして保存する 26function my_update_post_meta_encode( $id, $cf_key, $val ){ 27 $encoded = json_encode( $val ); 28 update_post_meta( $id, $cf_key, $encoded ); 29 return $encoded; 30} 31
###試したこと
test_array_2
でDBに"[]"
が保存されるので、ダブルクオートを削除するmy_trim_doublequote()
という関数を作りました。こちらです。
php
1function my_trim_doublequote( $str ){ 2 $trimed = trim( $str ); 3 $trimed = ltrim($trimed, "\""); 4 $trimed = rtrim($trimed, "\""); 5 return $trimed; 6}
そして上のmy_trim_doublequote()
を使い、該当のソースコードに次のようにして加えましたが、しかしこれが変化なく、ダブルクオートは変わらずついたままで"[]"
が保存されました。
php
1 elseif ( $meta_key == 'test_array_2' ) { 2 $test_array_2 = my_trim_doublequote( stripslashes( $_POST[$meta_key] ) ); 3 my_update_post_meta_encode( $post_id, 'test_array_2', $test_array_2 ); 4 }
###図説
DBはこのようになってしまいます。
どのようにすればtest_array_2
で[]
を保存できますでしょうか?
###補足
WprdPressのバージョンは 5.2.0 です。
尚、json_encode()
は必須です。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/27 03:40
2019/11/27 04:06
2019/11/27 04:58