'subtitle', 'label' => 'Subtitle', 'type' => 'textarea', ), array( 'id' => 'button_header_text', 'label' => 'Button Text', 'type' => 'text', ), ); /** * Class construct method. Adds actions to their respective WordPress hooks. */ public function __construct() { add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) ); add_action( 'save_post', array( $this, 'save_post' ) ); } /** * Hooks into WordPress' add_meta_boxes function. * Goes through screens (post types) and adds the meta box. */ public function add_meta_boxes() { foreach ( $this->screens as $screen ) { add_meta_box( 'option-page', __( 'Option Page', 'bigseotheme' ), array( $this, 'add_meta_box_callback' ), $screen, 'advanced', 'high' ); } } /** * Generates the HTML for the meta box * * @param object $post WordPress post object */ public function add_meta_box_callback( $post ) { wp_nonce_field( 'option_page_data', 'option_page_nonce' ); $this->generate_fields( $post ); } /** * Generates the field's HTML for the meta box. */ public function generate_fields( $post ) { $output = ''; foreach ( $this->fields as $field ) { $label = ''; $db_value = get_post_meta( $post->ID, 'option_page_' . $field['id'], true ); switch ( $field['type'] ) { case 'textarea': $input = sprintf( '', $field['id'], $field['id'], $db_value ); break; default: $input = sprintf( '', $field['type'] !== 'color' ? 'class="regular-text"' : '', $field['id'], $field['id'], $field['type'], $db_value ); } $output .= $this->row_format( $label, $input ); } echo '' . $output . '
'; } /** * Generates the HTML for table rows. */ public function row_format( $label, $input ) { return sprintf( '%s%s', $label, $input ); } /** * Hooks into WordPress' save_post function */ public function save_post( $post_id ) { if ( ! isset( $_POST['option_page_nonce'] ) ) return $post_id; $nonce = $_POST['option_page_nonce']; if ( !wp_verify_nonce( $nonce, 'option_page_data' ) ) return $post_id; if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; foreach ( $this->fields as $field ) { if ( isset( $_POST[ $field['id'] ] ) ) { switch ( $field['type'] ) { case 'email': $_POST[ $field['id'] ] = sanitize_email( $_POST[ $field['id'] ] ); break; case 'text': $_POST[ $field['id'] ] = sanitize_text_field( $_POST[ $field['id'] ] ); break; } update_post_meta( $post_id, 'option_page_' . $field['id'], $_POST[ $field['id'] ] ); } else if ( $field['type'] === 'checkbox' ) { update_post_meta( $post_id, 'option_page_' . $field['id'], '0' ); } } } } new Rational_Meta_Box; function bigseotheme_get_option_page($option, $default = ''){ if(get_post_meta( get_the_ID() , 'option_page_' . $option, true )) return get_post_meta( get_the_ID() , 'option_page_' . $option, true ); return $default; }