前提・実現したいこと
Wordpressの管理画面上からAdvanced Custom Fieldsを使用したカスタム投稿タイプ「ABC」に新規投稿した際に、別のカスタム投稿タイプ「DEF」に投稿内容をコピーして保存したいです。
発生している問題・エラーメッセージ
単純なテキストフィールドは上手くいきましたが、タクソノミーのチェックボックスやグループフィールドが登録されません。
また、新規投稿・更新に関わらず全て新規投稿されてしまう状態で、同じタイトルの投稿が投稿タイプ「DEF」に増え続けてしまっています。
該当のソースコード
[ ver1.1 ]
php
1add_action( 'publish_ABC', 'function_copying_posts', 10); 2function function_copying_posts(){ 3 global $post; 4 5 if($post->post_type == 'ABC'){ 6 $current_postID = $post->ID; 7 8 // 投稿タイプ「ABC」から情報を取得 9 $taxonomy_check = $_POST['acf']["field_60860e98beebc"]; //タクソノミーチェックボックス 10 $text = $_POST['acf']["field_6074e41c17011"]; //テキストエリア 11 $catch_copy = $_POST['acf']["field_6073f00e426ef"]["field_6073f07d426f0"]; //グループ「copy」のサブフィールド1 12 $lead_copy = $_POST['acf']["field_6073f00e426ef"]["field_6073f099426f1"]; //グループ「copy」のサブフィールド2 13 14 // 投稿先の指定 15 $draft_my_options = array( 16 'post_title' => get_the_title($current_postID), 17 'post_content' => '', 18 'post_status' => 'publish', 19 'post_type' => 'DEF' 20 ); 21 $newpost_id = wp_insert_post($draft_my_options); 22 23 if($newpost_id){ 24 update_post_meta($newpost_id, 'taxonomy_check', $taxonomy_check); 25 update_post_meta($newpost_id, 'text', $text); 26 update_post_meta($newpost_id, 'catch_copy', $catch_copy); 27 update_post_meta($newpost_id, 'lead_copy', $lead_copy); 28} } }
[ ver1.2 ]
php
1add_action('save_post_ABC', 'function_copying_posts', 10, 3); 2function function_copying_posts($post_id, $post, $update) { 3 if (wp_is_post_revision($post_id)) return; // 自動保存を除外 4 5 remove_action('save_post_ABC', 'function_copying_posts'); // 無限ループ対策 6 7 // 投稿タイプ「ABC」から情報を取得 8 $taxonomy_check = get_field('taxonomy_check', $post_id); //タクソノミーチェックボックス 9 $check[] = ''; 10 foreach($taxonomy_check as $term){ 11 array_push($check, $term->name); 12 } 13 $text = get_field('text', $post_id); //テキストエリア 14 $copy = get_field('copy', $post_id); 15 $catch_copy = $copy['catch_copy']; //グループ「copy」のサブフィールド1 16 $lead_copy = $copy['lead_copy']; //グループ「copy」のサブフィールド2 17 18 // 投稿先の指定 19 $draft_my_options = array( 20 'post_title' => get_the_title($post_id), 21 'post_status' => get_post_status($post_id), 22 'post_type' => 'DEF' 23 ); 24 $newpost_id = wp_insert_post($draft_my_options); 25 26 update_post_meta($newpost_id, 'text', $text); 27 update_post_meta($newpost_id, 'catch_copy', $catch_copy); 28 update_post_meta($newpost_id, 'lead_copy', $lead_copy); 29 wp_set_object_terms($newpost_id, $check, 'com_check', false); 30 31 add_action( 'save_post_ABC', 'function_copying_posts'); // 無限ループ対策 32}
試したこと
情報の取得はできていることをデバッグして確認しました。
update_post_metaが上手くいっていないように思いますが、どう直せばよいか分かりません。
回答1件
あなたの回答
tips
プレビュー