Or, embed this snippet using GenerateWP WordPress Plugin.

Download

Clone

1

class nevercode_page_options {

	public function __construct() {

		if ( is_admin() ) {
			add_action( 'load-post.php',     array( $this, 'init_metabox' ) );
			add_action( 'load-post-new.php', array( $this, 'init_metabox' ) );
		}

	}

	public function init_metabox() {

		add_action( 'add_meta_boxes',        array( $this, 'add_metabox' )         );
		add_action( 'save_post',             array( $this, 'save_metabox' ), 10, 2 );

	}

	public function add_metabox() {

		add_meta_box(
			'nc-options',
			'Nevercode custom options',
			array( $this, 'render_metabox' ),
			'page',
			'advanced',
			'high'
		);

	}

	public function render_metabox( $post ) {

		// Add nonce for security and authentication.
		wp_nonce_field( 'nc_nonce_action', 'nc_nonce' );

		// Retrieve an existing value from the database.
		$nc_page_metatitle = get_post_meta( $post->ID, 'nc_page-metatitle', true );
		$nc_page_metadescription = get_post_meta( $post->ID, 'nc_page-metadescription', true );
		$nc_page_og_image = get_post_meta( $post->ID, 'nc_page-og-image', true );
		$nc_page_twitter_image = get_post_meta( $post->ID, 'nc_page-twitter-image', true );
		$nc_page_video_mp4 = get_post_meta( $post->ID, 'nc_page-video-mp4', true );
		$nc_page_video_webm = get_post_meta( $post->ID, 'nc_page-video-webm', true );
		$nc_page_head_script = get_post_meta( $post->ID, 'nc_page-head-script', true );
		$nc_page_body_script = get_post_meta( $post->ID, 'nc_page-body-script', true );
		$nc_page_video_loop = get_post_meta( $post->ID, 'nc_page-video-loop', true );

		// Set default values.
		if( empty( $nc_page_metatitle ) ) $nc_page_metatitle = '';
		if( empty( $nc_page_metadescription ) ) $nc_page_metadescription = '';
		if( empty( $nc_page_og_image ) ) $nc_page_og_image = '';
		if( empty( $nc_page_twitter_image ) ) $nc_page_twitter_image = '';
		if( empty( $nc_page_video_mp4 ) ) $nc_page_video_mp4 = '';
		if( empty( $nc_page_video_webm ) ) $nc_page_video_webm = '';
		if( empty( $nc_page_head_script ) ) $nc_page_head_script = '';
		if( empty( $nc_page_body_script ) ) $nc_page_body_script = '';
		if( empty( $nc_page_video_loop ) ) $nc_page_video_loop = '';

		// Form fields.
		echo '<table class="form-table">';

		echo '	<tr>';
		echo '		<th><label for="nc_page-metatitle" class="nc_page-metatitle_label">' . 'Meta title' . '</label></th>';
		echo '		<td>';
		echo '			<input type="text" id="nc_page_metatitle" name="nc_page-metatitle" class="nc_page_metatitle_field" placeholder="' . '' . '" value="' . esc_attr( $nc_page_metatitle ) . '">';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-metadescription" class="nc_page-metadescription_label">' . 'Meta description' . '</label></th>';
		echo '		<td>';
		echo '			<textarea id="nc_page_metadescription" name="nc_page-metadescription" class="nc_page_metadescription_field" placeholder="' . '' . '">' . $nc_page_metadescription . '</textarea>';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-og-image" class="nc_page-og-image_label">' . 'Custom image for facebook' . '</label></th>';
		echo '		<td>';
		echo '			<input type="url" id="nc_page_og_image" name="nc_page-og-image" class="nc_page_og_image_field" placeholder="' . '' . '" value="' . esc_attr( $nc_page_og_image ) . '">';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-twitter-image" class="nc_page-twitter-image_label">' . 'Custom image for Twitter' . '</label></th>';
		echo '		<td>';
		echo '			<input type="url" id="nc_page_twitter_image" name="nc_page-twitter-image" class="nc_page_twitter_image_field" placeholder="' . '' . '" value="' . esc_attr( $nc_page_twitter_image ) . '">';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-video-mp4" class="nc_page-video-mp4_label">' . 'Background video MP4' . '</label></th>';
		echo '		<td>';
		echo '			<input type="url" id="nc_page_video_mp4" name="nc_page-video-mp4" class="nc_page_video_mp4_field" placeholder="' . '' . '" value="' . esc_attr( $nc_page_video_mp4 ) . '">';
		echo '			<p class="description">' . 'Add URL to the .mp4 videofile that should be used as a background' . '</p>';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-video-webm" class="nc_page-video-webm_label">' . 'Background video WEBM' . '</label></th>';
		echo '		<td>';
		echo '			<input type="url" id="nc_page_video_webm" name="nc_page-video-webm" class="nc_page_video_webm_field" placeholder="' . '' . '" value="' . esc_attr( $nc_page_video_webm ) . '">';
		echo '			<p class="description">' . 'Add URL to the .webm videofile that should be used as a background' . '</p>';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-head-script" class="nc_page-head-script_label">' . 'Custom script in tag' . '</label></th>';
		echo '		<td>';
		echo '			<textarea id="nc_page_head_script" name="nc_page-head-script" class="nc_page_head_script_field" placeholder="' . '' . '">' . $nc_page_head_script . '</textarea>';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-body-script" class="nc_page-body-script_label">' . 'Custom script in tag' . '</label></th>';
		echo '		<td>';
		echo '			<textarea id="nc_page_body_script" name="nc_page-body-script" class="nc_page_body_script_field" placeholder="' . '' . '">' . $nc_page_body_script . '</textarea>';
		echo '		</td>';
		echo '	</tr>';

		echo '	<tr>';
		echo '		<th><label for="nc_page-video-loop" class="nc_page-video-loop_label">' . 'Loop video' . '</label></th>';
		echo '		<td>';
		echo '			<label><input type="radio" name="nc_page-video-loop" class="nc_page_video_loop_field" value="nc_yes" ' . checked( $nc_page_video_loop, 'nc_yes', false ) . '> ' . 'Yes' . '</label><br>';
		echo '			<label><input type="radio" name="nc_page-video-loop" class="nc_page_video_loop_field" value="nc_no" ' . checked( $nc_page_video_loop, 'nc_no', false ) . '> ' . 'No' . '</label><br>';
		echo '		</td>';
		echo '	</tr>';

		echo '</table>';

	}

	public function save_metabox( $post_id, $post ) {

		// Add nonce for security and authentication.
		$nonce_name   = isset( $_POST['nc_nonce'] ) ? $_POST['nc_nonce'] : '';
		$nonce_action = 'nc_nonce_action';

		// Check if a nonce is set.
		if ( ! isset( $nonce_name ) )
			return;

		// Check if a nonce is valid.
		if ( ! wp_verify_nonce( $nonce_name, $nonce_action ) )
			return;

		// Check if the user has permissions to save data.
		if ( ! current_user_can( 'edit_post', $post_id ) )
			return;

		// Check if it's not a revision.
		if ( wp_is_post_revision( $post_id ) )
			return;

		// Sanitize user input.
		$nc_new_page_metatitle = isset( $_POST[ 'nc_page-metatitle' ] ) ? sanitize_text_field( $_POST[ 'nc_page-metatitle' ] ) : '';
		$nc_new_page_metadescription = isset( $_POST[ 'nc_page-metadescription' ] ) ? sanitize_text_field( $_POST[ 'nc_page-metadescription' ] ) : '';
		$nc_new_page_og_image = isset( $_POST[ 'nc_page-og-image' ] ) ? esc_url( $_POST[ 'nc_page-og-image' ] ) : '';
		$nc_new_page_twitter_image = isset( $_POST[ 'nc_page-twitter-image' ] ) ? esc_url( $_POST[ 'nc_page-twitter-image' ] ) : '';
		$nc_new_page_video_mp4 = isset( $_POST[ 'nc_page-video-mp4' ] ) ? esc_url( $_POST[ 'nc_page-video-mp4' ] ) : '';
		$nc_new_page_video_webm = isset( $_POST[ 'nc_page-video-webm' ] ) ? esc_url( $_POST[ 'nc_page-video-webm' ] ) : '';
		$nc_new_page_head_script = isset( $_POST[ 'nc_page-head-script' ] ) ? sanitize_text_field( $_POST[ 'nc_page-head-script' ] ) : '';
		$nc_new_page_body_script = isset( $_POST[ 'nc_page-body-script' ] ) ? sanitize_text_field( $_POST[ 'nc_page-body-script' ] ) : '';
		$nc_new_page_video_loop = isset( $_POST[ 'nc_page-video-loop' ] ) ? $_POST[ 'nc_page-video-loop' ] : '';

		// Update the meta field in the database.
		update_post_meta( $post_id, 'nc_page-metatitle', $nc_new_page_metatitle );
		update_post_meta( $post_id, 'nc_page-metadescription', $nc_new_page_metadescription );
		update_post_meta( $post_id, 'nc_page-og-image', $nc_new_page_og_image );
		update_post_meta( $post_id, 'nc_page-twitter-image', $nc_new_page_twitter_image );
		update_post_meta( $post_id, 'nc_page-video-mp4', $nc_new_page_video_mp4 );
		update_post_meta( $post_id, 'nc_page-video-webm', $nc_new_page_video_webm );
		update_post_meta( $post_id, 'nc_page-head-script', $nc_new_page_head_script );
		update_post_meta( $post_id, 'nc_page-body-script', $nc_new_page_body_script );
		update_post_meta( $post_id, 'nc_page-video-loop', $nc_new_page_video_loop );

	}

}

new nevercode_page_options;