フィールドタイプのタクソノミーから関連付けは、チェックを忘れずに。タクソノミーからの関連付けの場合は・・・。
投稿: 更新:2017/07/27
ACFのカスタムフィールド作成時に、フィールドタイプにタクソノミーを選択しただけでは、フィールドにタクソノミーのデータを保存するだけ。
関連付けはされていないらしい。
タクソノミーデータと関連付ける
(タクソノミーのデータとしても保存する)には、
カスタムフィールド作成時に、
「投稿のタームに基づいて値を読み込み、投稿のタームを更新する」
にチェックが必要。
逆に、上記のチェックをせずに、
タクソノミーデータをフィールドに書きこむためのソース。
kizon
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
//管理画面が開いたときに実行 add_action( 'admin_menu', 'add_update_term_switch' ); //更新ボタンが押されたときに実行 add_action( 'save_post', 'save_custom_post_sameterm' ); // メタボックスをエディット画面に追加 function add_update_term_switch() { //カスタム投稿タイプを取得(全カスタム投稿タイプを取得の場合) $args = array( 'public' => true, '_builtin' => false ); $post_types = get_post_types($args); foreach ( $post_types as $post_type ){ // カスタムポストタイプのエディット画面にメタBOX追加 if($post_type){ add_meta_box( 'term_copy', 'タクソノミーマッチング', 'update_term_switch', $post_type, 'side', 'high' ); } } } // 投稿画面に表示するフォームのHTMLソース(マッチングさせるかのスイッチBOX) function update_term_switch() { if (isset($_GET['post'])){ $term_copy = get_post_meta( $_GET['post'], 'term_copy' ); } if ( isset($term_copy[0])){ $chek=$term_copy[0]; }else{ $chek = ''; } echo '<div style="padding-top: 3px; overflow: hidden;">'; echo '<div style="width: 100px; float: left;"><input name="term_copy" type="radio" value="updt" '; if( $chek=="" || $chek=="updt" ) echo ' checked="checked"'; echo ' />マッチング</div><div style="width: 100px; float: left;"><input name="term_copy" type="radio" value="off" '; if( $chek=="off" ) echo ' checked="checked"'; echo '/>OFF<br /></div>'; echo '</div><br>'; // echo var_dump(); } //--------更新ファンクション タクソノミーの termデータを カスタムポスト に書き込む記述--------- function save_custom_post_sameterm( $post_id ) { /* typeの ターム設定 */ /* 自動分類スイッチ分岐 */ if(isset($_POST['term_copy'])){ $term_copy = $_POST['term_copy']; if(isset( $term_copy ) ){ if( "" == get_post_meta( $post_id, 'term_copy' )) { /* term_copyのデータが保存されていなかった場合、新しく保存 */ add_post_meta( $post_id, 'term_copy', $term_copy, true ) ; } elseif( $term_copy != get_post_meta( $post_id, 'term_copy' )) { /* term_copyのデータと、現在のデータが不一致の場合、更新 */ update_post_meta( $post_id, 'term_copy', $term_copy ) ; } elseif( "" == $term_copy ) { /* 現在のデータが無い場合キーの値を削除 */ delete_post_meta( $post_id, 'term_copy' ) ; } } if( $term_copy == "updt" ){ /* 「マッチングする」の場合、選択されたtermのslugを を更新 */ $tax_ids = wp_get_post_terms($post_id, 'タクソノミー名', array("fields" => "ids")); /*タームIDを保存*/ update_post_meta( $post_id, 'タクソノミー名', $data_system ) ; if ( is_wp_error( $term_taxonomy_ids ) ) { // エラー時の処理 } else { // OK } } } } |
どうせなら、双方向にしてくれればいいのに・・・