set_post_types(); foreach ( $target_posts as $target_post ) { add_meta_box( 'apo_custom_fields', 'APO+カスタムフィールド', array( $this, 'insert_meta_fields' ), $target_post, 'normal' ); } } public function insert_meta_fields() { //通常ソート $this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal' ); //検索ソート $this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search' ); //カテゴリー、タグ、カスタム分類 $this->create_order_tax_field_data( get_option( '_apop_tax_order_param' ) ); $this->labels = array( 'normal' => '通常', 'search' => '検索', 'tax' => 'カテゴリー、タグ、カスタム分類', ); require_once self::TEMPLATE_DIR . 'setting_post_custom_field.php'; } private function set_post_types() { $custom_posts = array_values( get_post_types( array( 'public' => true, '_builtin' => false ) ) ); return array_merge( array( 'page', 'post', ), $custom_posts ); } private function create_order_field_data( $param, $key, $update = false ) { foreach ( $this->order_param_keys as $order_param_key ) { if ( isset( $param[ $order_param_key ]['field']['meta_key'] ) && ! empty( $param[ $order_param_key ]['field']['meta_key'] ) ) { if ( $update ) { $this->name_keys[] = $param[ $order_param_key ]['field']['meta_key']; } else { $this->order_field[ $key ][] = $param[ $order_param_key ]['field']['meta_key']; } } } } private function create_order_tax_field_data( $param, $update = false ) { $term_ids = $this->create_post_term_ids(); foreach ( $term_ids as $term_id ) { foreach ( $this->order_param_keys as $order_param_key ) { if ( isset( $param[ $term_id ][ $order_param_key ]['field']['meta_key'] ) && ! empty( $param[ $term_id ][ $order_param_key ]['field']['meta_key'] ) ) { if ( $update ) { $this->name_keys[] = $param[ $term_id ][ $order_param_key ]['field']['meta_key']; } else { $this->order_field['tax'][] = $param[ $term_id ][ $order_param_key ]['field']['meta_key']; } } } } } private function create_post_term_ids() { global $post; $terms = array(); $term_ids = array(); $taxonomy_slugs = array_keys( get_the_taxonomies() ); foreach ( $taxonomy_slugs as $taxonomy_slug ) { $terms[] = get_the_terms( $post->ID, $taxonomy_slug ); } foreach ( $terms as $term ) { foreach ( $term as $tax ) { $term_ids[] = $tax->term_id; } } return $term_ids; } private function get_custom_field_data( $custom_filed_name ) { global $post; return get_post_meta( $post->ID, APOP_CUSTOM_FIELD_PREFIX . $custom_filed_name, true ); } // カスタムフィールドの値を保存 public function save_meta_fields( $post_id ) { $this->get_update_meta_fields(); if ( count( $this->name_keys ) > 0 ) { foreach ( $this->name_keys as $name_key ) { $save_key = APOP_CUSTOM_FIELD_PREFIX . $name_key; update_post_meta( $post_id, $save_key, APOP_UI::input_post_filter( $save_key, 'str' ) ); } } } private function get_update_meta_fields() { //通常ソート $this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal', true ); //検索ソート $this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search', true ); //カテゴリー、タグ、カスタム分類 $this->create_order_tax_field_data( get_option( '_apop_tax_order_param' ), true ); } } }