options = apply_filters('sp_metabox_options', $options); if (! empty($this->options)) { $this->addAction('add_meta_boxes', 'add_meta_box'); $this->addAction('save_post', 'save_post', 10, 2); } } // instance public static function instance( $options = array() ) { if (is_null(self::$instance) && SP_AdvP_F_ACTIVE_METABOX) { self::$instance = new self($options); } return self::$instance; } // add metabox public function add_meta_box( $post_type ) { foreach ( $this->options as $value ) { add_meta_box($value['id'], $value['title'], array( &$this, 'render_meta_box_content' ), $value['post_type'], $value['context'], $value['priority'], $value); } } // metabox render content public function render_meta_box_content( $post, $callback ) { global $post, $sp_errors; wp_nonce_field('sp-framework-metabox', 'sp-framework-metabox-nonce'); $unique = $callback['args']['id']; $sections = $callback['args']['sections']; $meta_value = get_post_meta($post->ID, $unique, true); $transient = get_transient('advp-metabox-transient'); $sp_errors = $transient['errors']; $has_nav = ( count($sections) >= 2 && $callback['args']['context'] != 'side' ) ? true : false; $show_all = ( ! $has_nav ) ? ' sp-show-all' : ''; $section_name = ( ! empty($sections[0]['fields']) ) ? $sections[0]['name'] : $sections[1]['name']; $section_id = ( ! empty($transient['ids'][ $unique ]) ) ? $transient['ids'][ $unique ] : $section_name; $section_id = sp_get_var('sp-section', $section_id); echo '
'; echo ''; // SP_AdvP_Framework $current_screen = get_current_screen(); $the_current_post_type = $current_screen->post_type; if ($the_current_post_type == 'sp_advp_shortcodes') { ?>

[advanced_portfolio ID . '"'; ?>]

<?php echo do_shortcode( '[advanced_portfolio id="ID ; ?>"]' ); ?>

'; if ($has_nav) { echo '
'; echo ''; echo '
'; } echo '
'; echo '
'; foreach ( $sections as $val ) { if (isset($val['fields'])) { $active_content = ( $section_id == $val['name'] ) ? ' style="display: block;"' : ''; echo '
'; echo (isset($val['title'])) ? '

' . $val['title'] . '

' : ''; foreach ( $val['fields'] as $field_key => $field ) { $default = (isset($field['default'])) ? $field['default'] : ''; $elem_id = (isset($field['id'])) ? $field['id'] : ''; $elem_value = (is_array($meta_value) && isset($meta_value[ $elem_id ])) ? $meta_value[ $elem_id ] : $default; echo sp_advp_add_element($field, $elem_value, $unique); } echo '
'; } } echo '
'; echo '
'; echo '
'; echo ( $has_nav ) ? '
' : ''; echo '
'; echo '
'; echo ''; } // save metabox options public function save_post( $post_id, $post ) { if (wp_verify_nonce(sp_get_var('sp-framework-metabox-nonce'), 'sp-framework-metabox')) { $errors = array(); $post_type = sp_get_var('post_type'); foreach ( $this->options as $request_value ) { if (in_array($post_type, (array) $request_value['post_type'])) { $request_key = $request_value['id']; $request = sp_get_var($request_key, array()); // ignore _nonce if (isset($request['_nonce'])) { unset($request['_nonce']); } foreach ( $request_value['sections'] as $key => $section ) { if (isset($section['fields'])) { foreach ( $section['fields'] as $field ) { if (isset($field['type']) && isset($field['id'])) { $field_value = sp_get_vars($request_key, $field['id']); // sanitize options if (isset($field['sanitize']) && $field['sanitize'] !== false) { $sanitize_type = $field['sanitize']; } else if (! isset($field['sanitize'])) { $sanitize_type = $field['type']; } if (has_filter('sp_sanitize_' . $sanitize_type)) { $request[ $field['id'] ] = apply_filters('sp_sanitize_' . $sanitize_type, $field_value, $field, $section['fields']); } // validate options if (isset($field['validate']) && has_filter('sp_validate_' . $field['validate'])) { $validate = apply_filters('sp_validate_' . $field['validate'], $field_value, $field, $section['fields']); if (! empty($validate)) { $meta_value = get_post_meta($post_id, $request_key, true); $errors[ $field['id'] ] = array( 'code' => $field['id'], 'message' => $validate, 'type' => 'error' ); $default_value = isset($field['default']) ? $field['default'] : ''; $request[ $field['id'] ] = ( isset($meta_value[ $field['id'] ]) ) ? $meta_value[ $field['id'] ] : $default_value; } } } } } } $request = apply_filters('sp_save_post', $request, $request_key, $post); if (empty($request)) { delete_post_meta($post_id, $request_key); } else { if (get_post_meta($post_id, $request_key)) { update_post_meta($post_id, $request_key, $request); } else { add_post_meta($post_id, $request_key, $request); } } $transient['ids'][ $request_key ] = sp_get_vars('sp_section_id', $request_key); $transient['errors'] = $errors; } } set_transient('advp-metabox-transient', $transient, 10); } } }