** * Remove modified data for built-in post type * * @return [type] [description] */ public function reset_built_in_post_type( $post_type = null ) { $this->db->delete( $this->table, array( 'slug' => $post_type, 'status' => 'built-in', ), array( '%s', '%s' ) ); return true; } /** * Return user-modified built-in post types * * @return [type] [description] */ public function get_modified_built_in_types() { $types = $this->db->query( $this->table, array( 'status' => 'built-in', ) ); if ( ! $types ) { return array(); } else { return $types; } } /** * Returns default built-in post type * * @return [type] [description] */ public function get_default_built_in_post_type( $post_type ) { $post_type_object = get_post_type_object( $post_type ); if ( ! $post_type_object ) { $this->parent->add_notice( 'error', __( 'Post type not found', 'jet-engine' ) ); return false; } $post_type_object->labels = (array) $post_type_object->labels; $post_type_object = (array) $post_type_object; $_defaults = ! empty( $this->parent->built_in_defaults[ $post_type ] ) ? $this->parent->built_in_defaults[ $post_type ] : false; if ( $_defaults ) { if ( ! empty( $_defaults['labels'] ) ) { $post_type_object['labels'] = array_merge( $post_type_object['labels'], $_defaults['labels'] ); if ( ! empty( $_defaults['labels']['name'] ) ) { $post_type_object['label'] = $_defaults['labels']['name']; } unset( $_defaults['labels'] ); } if ( ! empty( $_defaults ) ) { $post_type_object = array_merge( $post_type_object, $_defaults ); } } $post_type_data = array( 'general_settings' => array( 'name' => $post_type_object['label'], 'slug' => $post_type_object['name'], 'custom_storage' => false, 'show_edit_link' => false, 'hide_field_names' => false, 'delete_metadata' => false, ), 'labels' => $post_type_object['labels'], 'meta_fields' => array(), 'admin_columns' => array(), 'admin_filters' => array(), ); unset( $post_type_object['labels'] ); unset( $post_type_object['cap'] ); unset( $post_type_object['label'] ); unset( $post_type_object['name'] ); $supports = get_all_post_type_supports( $post_type ); $supports = array_filter( $supports ); $supports = array_keys( $supports ); $post_type_object['supports'] = $supports; $post_type_data['advanced_settings'] = $post_type_object; return $post_type_data; } /** * Maybe delete metadata on update item */ public function delete_metadata_on_update( $item = array() ) { $args = ! empty( $item['args'] ) ? $item['args'] : array(); if ( empty( $args['delete_metadata'] ) ) { return; } if ( empty( $item['id'] ) ) { return; } $prev_item = $this->get_item_for_edit( $item['id'] ); if ( ! $prev_item ) { return; } $prev_meta_fields = ! empty( $prev_item['meta_fields'] ) ? $prev_item['meta_fields'] : array(); $new_meta_fields = ! empty( $item['meta_fields'] ) ? $item['meta_fields'] : array(); if ( empty( $prev_meta_fields ) ) { return; } $prev_meta_names = wp_list_pluck( $prev_meta_fields, 'name' ); $new_meta_names = wp_list_pluck( $new_meta_fields, 'name' ); $to_delete = array_diff( $prev_meta_names, $new_meta_names ); if ( empty( $to_delete ) ) { return; } $this->delete_metadata( $prev_item, $to_delete ); } /** * Delete metadata of CPT */ public function delete_metadata( $item = null, $keys_to_delete = array(), $on_delete = false ) { $args = ! empty( $item['general_settings'] ) ? $item['general_settings'] : array(); if ( $on_delete && empty( $args['delete_metadata'] ) ) { return; } $meta_fields = ! empty( $item['meta_fields'] ) ? $item['meta_fields'] : array(); if ( empty( $meta_fields ) ) { return; } $meta_names = wp_list_pluck( $meta_fields, 'name' ); $meta_fields = array_combine( $meta_names, $meta_fields ); if ( $on_delete ) { $keys_to_delete = $meta_names; } $to_delete = array_filter( $keys_to_delete, function ( $name ) use ( $meta_fields ) { if ( ! empty( $meta_fields[ $name ]['object_type'] ) && 'field' !== $meta_fields[ $name ]['object_type'] ) { return false; } if ( ! empty( $meta_fields[ $name ]['type'] ) && 'html' === $meta_fields[ $name ]['type'] ) { return false; } return true; } ); if ( empty( $to_delete ) ) { return; } Jet_Engine_Tools::delete_metadata_by_object_where( 'post', $to_delete, array( 'post_type' => $args['slug'], ) ); } } }