post_types = apply_filters( 'landz_main_metaboxes_post_types', array(
'post' => 'post',
'page' => 'page',
) );
// Add metabox to corresponding post types
foreach( $this->post_types as $key => $val ) {
add_action( 'add_meta_boxes_'. $val, array( $this, 'post_meta' ), 11 );
}
// Save meta
add_action( 'save_post', array( $this, 'save_meta_data' ) );
// Load scripts for the metabox
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
// Load custom css for metabox
add_action( 'admin_print_styles-post.php', array( $this, 'metaboxes_css' ) );
add_action( 'admin_print_styles-post-new.php', array( $this, 'metaboxes_css' ) );
// Load custom js for metabox
add_action( 'admin_footer-post.php', array( $this, 'metaboxes_js' ) );
add_action( 'admin_footer-post-new.php', array( $this, 'metaboxes_js' ) );
}
/**
* The function responsible for creating the actual meta box.
*
* @since 1.0.0
*/
public function post_meta( $post ) {
$obj = get_post_type_object( $post->post_type );
add_meta_box(
'landz-metabox',
$obj->labels->singular_name . ' '. __( 'Settings', 'blue-paper' ),
array( $this, 'display_meta_box' ),
$post->post_type,
'normal',
'default'
);
}
/**
* Enqueue scripts and styles needed for the metaboxes
*
* @since 1.0.0
*/
public static function admin_enqueue_scripts() {
wp_enqueue_media();
wp_enqueue_script( 'jquery' );
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script( 'wp-color-picker' );
}
/**
* Renders the content of the meta box.
*
* @since 1.0.0
*/
public function display_meta_box( $post ) {
// Add an nonce field so we can check for it later.
wp_nonce_field( 'landz_metabox', 'landz_metabox_nonce' );
// Get current post data
$post_id = $post->ID;
$post_type = get_post_type();
// Get tabs
$tabs = $this->tabs_array();
// Store tabs that should display on this specific page in an array for use later
$active_tabs = array();
foreach ( $tabs as $tab ) {
$tab_post_type = isset( $tab['post_type'] ) ? $tab['post_type'] : '';
if ( ! $tab_post_type ) {
$display_tab = true;
} elseif ( in_array( $post_type, $tab_post_type ) ) {
$display_tab = true;
} else {
$display_tab = false;
}
if ( $display_tab ) {
$active_tabs[] = $tab;
}
} ?>
tabs_array();
$settings = array();
foreach( $tabs as $tab ) {
foreach ( $tab['settings'] as $setting ) {
$settings[] = $setting;
}
}
// Loop through settings and validate
foreach ( $settings as $setting ) {
// Vars
$value = '';
$id = $setting['id'];
$type = isset ( $setting['type'] ) ? $setting['type'] : 'text';
// Make sure field exists and if so validate the data
if ( isset( $_POST[$id] ) ) {
// Validate text
if ( 'text' == $type ) {
$value = sanitize_text_field( $_POST[$id] );
}
// Validate textarea
if ( 'textarea' == $type ) {
$value = esc_html( $_POST[$id] );
}
// Links
elseif ( 'link' == $type ) {
$value = esc_url( $_POST[$id] );
}
// Validate select
elseif ( 'select' == $type ) {
if ( 'default' == $_POST[$id] ) {
$value = '';
} else {
$value = $_POST[$id];
}
}
// Validate media
if ( 'media' == $type ) {
// Sanitize
$value = $_POST[$id];
// Move old landz_post_self_hosted_shortcode_redux to landz_post_self_hosted_media
if ( 'landz_post_self_hosted_media' == $id && empty( $_POST[$id] ) && $old = get_post_meta( $post_id, 'landz_post_self_hosted_shortcode_redux', true ) ) {
$value = $old;
delete_post_meta( $post_id, 'landz_post_self_hosted_shortcode_redux' );
}
}
// All else
else {
$value = $_POST[$id];
}
// Update meta if value exists
if ( $value && 'on' != $reset ) {
update_post_meta( $post_id, $id, $value );
}
// Otherwise cleanup stuff
else {
delete_post_meta( $post_id, $id );
}
}
}
}
/**
* Helpers
*
* @since 1.0.0
*/
public static function helpers( $return = NULl ) {
// Return array of WP menus
if ( 'menus' == $return ) {
$menus = array( __( 'Default', 'blue-paper' ) );
$get_menus = get_terms( 'nav_menu', array( 'hide_empty' => true ) );
foreach ( $get_menus as $menu) {
$menus[$menu->term_id] = $menu->name;
}
return $menus;
}
// Title styles
elseif ( 'title_alignment' == $return ) {
$styles = array(
'' => __( 'Default', 'blue-paper' ),
'none' => __( 'Center', 'blue-paper' ),
'right' => __( 'Right', 'blue-paper' ),
'left' => __( 'Left', 'blue-paper' ),
);
$styles = apply_filters( 'landz_title_styles', $styles );
return $styles;
}
// Widgets
elseif ( 'widget_areas' == $return ) {
global $wp_registered_sidebars;
$widgets_areas = array( __( 'Default', 'blue-paper' ) );
$get_widget_areas = $wp_registered_sidebars;
if ( ! empty( $get_widget_areas ) ) {
foreach ( $get_widget_areas as $widget_area ) {
$name = isset ( $widget_area['name'] ) ? $widget_area['name'] : '';
$id = isset ( $widget_area['id'] ) ? $widget_area['id'] : '';
if ( $name && $id ) {
$widgets_areas[$id] = $name;
}
}
}
return $widgets_areas;
}
}
/**
* Settings Array
*
* @since 1.0.0
*/
public function tabs_array() {
// Prefix
$prefix = 'wpc_';
// Define variable
$array = array();
// header Tab
$array['header'] = array(
'title' => __( 'Header', 'blue-paper' ),
'settings' => array(
'header_enable' => array(
'title' => __( 'Header', 'blue-paper' ),
'type' => 'select',
'id' => $prefix . 'header_enable',
'description' => __( 'Enable or disable header on this post', 'blue-paper' ),
'options' => array(
'' => __( 'Default', 'blue-paper' ),
'true' => __( 'Enable', 'blue-paper' ),
'false' => __( 'Disable', 'blue-paper' ),
),
),
'topbar_enable' => array(
'title' => __( 'Topbar', 'blue-paper' ),
'type' => 'select',
'id' => $prefix . 'topbar_enable',
'description' => __( 'Enable or disable Topbar on this post', 'blue-paper' ),
'options' => array(
'' => __( 'Default', 'blue-paper' ),
'true' => __( 'Enable', 'blue-paper' ),
'false' => __( 'Disable', 'blue-paper' ),
),
),
),
);
// page title Tab
$array['page_title'] = array(
'title' => __( 'Page Title', 'blue-paper' ),
'settings' => array(
'post_title' => array(
'title' => __( 'Enable Title', 'blue-paper' ),
'type' => 'select',
'id' => $prefix . 'page_title',
'description' => __( 'enable or disable page title on this page', 'blue-paper' ),
'options' => array(
'' => __( 'Default', 'blue-paper' ),
'true' => __( 'Enable', 'blue-paper' ),
'false' => __( 'Disable', 'blue-paper' ),
),
),
),
);
// slider Tab
$array['slider'] = array(
'title' => __( 'Slider', 'blue-paper' ),
'settings' => array(
'post_slider_shortcode' => array(
'title' => __( 'Slider Shortcode', 'blue-paper' ),
'type' => 'code',
'id' => $prefix . 'slider_shortcode',
'description' => __( 'Enter a slider shortcode here to display a slider at the top of the page.', 'blue-paper' ),
),
),
);
// video Tab
$array['video'] = array(
'title' => __( 'Video', 'blue-paper' ),
'post_type' => array('post'),
'settings' => array(
'post_video_embed' => array(
'title' => __( 'Embed Code', 'blue-paper' ),
'description' => __( 'Insert your embed/iframe code.', 'blue-paper' ),
'id' => $prefix . 'post_video_embed',
'type' => 'textarea',
'rows' => '2',
),
'self_hosted_video' => array(
'title' => __( 'Upload Video', 'blue-paper'),
'id' => $prefix . 'self_hosted_video',
'type' => 'media',
'description' => __( 'Upload self hosted video here', 'blue-paper' ),
),
),
);
// audio Tab
$array['audio'] = array(
'title' => __( 'Audio', 'blue-paper' ),
'post_type' => array('post'),
'settings' => array(
'audio_file_url' => array(
'title' => __( 'Upload Video', 'blue-paper'),
'id' => $prefix . 'audio_file_url',
'type' => 'media',
'description' => __( 'upload self hosted audio here', 'blue-paper' ),
),
),
);
// Apply filter & return settings array
return apply_filters( 'landz_metabox_array', $array );
}
/**
* Adds custom CSS for the metaboxes inline instead of loading another stylesheet
*
* @see assets/metabox.css
* @since 1.0.0
*/
public static function metaboxes_css() { ?>