fields = array( array( 'id' => 'transparent-header', 'label' => esc_html__( 'Transparent header', 'bulk' ), 'type' => 'checkbox', ), array( 'id' => 'header-font-color', 'label' => esc_html__( 'Transparent header font color', 'bulk' ), 'type' => 'color', ), ); 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() { global $post; if ( !empty( $post ) ) { $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true); if ( $pageTemplate == 'template-parts/template-homepage.php' ) { foreach ( $this->screens as $screen ) { add_meta_box( 'header-options', esc_html__( 'Header Options', 'bulk' ), array( $this, 'add_meta_box_callback' ), $screen, 'normal', 'high' ); } } } } /** * Generates the HTML for the meta box * * @param object $post WordPress post object */ public function add_meta_box_callback( $post ) { wp_nonce_field( 'header_options_data', 'header_options_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, 'header_options_' . $field[ 'id' ], true ); switch ( $field[ 'type' ] ) { case 'checkbox': $input = sprintf( '', $db_value === '1' ? 'checked' : '', $field[ 'id' ], $field[ 'id' ] ); 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[ 'header_options_nonce' ] ) ) return $post_id; $nonce = $_POST[ 'header_options_nonce' ]; if ( !wp_verify_nonce( $nonce, 'header_options_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, 'header_options_' . $field[ 'id' ], $_POST[ $field[ 'id' ] ] ); } else if ( $field[ 'type' ] === 'checkbox' ) { update_post_meta( $post_id, 'header_options_' . $field[ 'id' ], '0' ); } } } } new bulk_meta_box; }