Expansion Pack',
array(
'a' => array(
'href' => array(),
'target' => array(),
),
)
);
// Callback to display a field only on single post types
function bento_show_field_on_single() {
$current_screen = get_current_screen();
if ( $current_screen->id == 'page' ) {
return false;
} else {
return true;
}
}
// Add a multicheck metabox with post types
add_action( 'cmb2_render_multicheck_posttype', 'bento_cmb2_render_multicheck_posttype', 10, 5 );
function bento_cmb2_render_multicheck_posttype( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
if ( version_compare( CMB2_VERSION, '2.2.2', '>=' ) ) {
$field_type_object->type = new CMB2_Type_Radio( $field_type_object );
}
$cpts = array( 'post', 'project' );
if ( class_exists( 'WooCommerce' ) ) {
$cpts[] = 'product';
}
$options = '';
$i = 1;
$values = (array) $escaped_value;
if ( $cpts ) {
foreach ( $cpts as $cpt ) {
$args = array(
'value' => $cpt,
'label' => $cpt,
'type' => 'checkbox',
'name' => $field->args['_name'] . '[]',
);
if ( in_array( $cpt, $values ) ) {
$args[ 'checked' ] = 'checked';
}
if ( $cpt == 'project' && get_option( 'bento_ep_license_status' ) != 'valid' ) {
$args[ 'disabled' ] = 'disabled';
}
$options .= $field_type_object->list_input( $args, $i );
$i++;
}
}
$classes = false === $field->args( 'select_all_button' ) ? 'cmb2-checkbox-list no-select-all cmb2-list' : 'cmb2-checkbox-list cmb2-list';
echo $field_type_object->radio( array( 'class' => $classes, 'options' => $options ), 'multicheck_posttype' );
}
// Add a drop-down with taxonomies
add_action( 'cmb2_render_taxonomy_list', 'bento_cmb2_render_taxonomy_list', 10, 5 );
function bento_cmb2_render_taxonomy_list( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
$options = '';
$tax = get_taxonomies( array( 'public' => true ), 'object' );
foreach ( $tax as $t ) {
$terms = get_terms( array( 'taxonomy' => $t->name ) );
if ( !empty( $terms ) ) {
$options .= '';
foreach ( $terms as $term ) {
$selected = '';
$values = (array) $escaped_value;
if ( in_array( $term->term_id, $values ) ) {
$selected = ' selected';
}
$options .= '';
}
}
}
echo $field_type_object->select( array( 'options' => $options ), 'taxonomy_list' );
}
// General page/post settings
$bento_general_settings = new_cmb2_box(
array(
'id' => 'post_settings_metabox',
'title' => esc_html__( 'General Settings', 'bento' ),
'object_types' => array( 'post', 'page', 'project', 'product' ),
'context' => 'normal',
'priority' => 'high',
'show_names' => true,
)
);
$bento_sidebar_current_default_text = ' ('.esc_html__( 'current default', 'bento' ).')';
$bento_sidebar_current_default_0 = $bento_sidebar_current_default_1 = $bento_sidebar_current_default_2 = '';
$bento_sidebar_sitewide_default = esc_html( get_theme_mod( 'bento_default_sidebar' ) );
if ( $bento_sidebar_sitewide_default == 1 ) {
$bento_page_sidebar_default = 'left-sidebar';
$bento_sidebar_current_default_1 = $bento_sidebar_current_default_text;
} else if ( $bento_sidebar_sitewide_default == 2 ) {
$bento_page_sidebar_default = 'full-width';
$bento_sidebar_current_default_2 = $bento_sidebar_current_default_text;
} else {
$bento_page_sidebar_default = 'right-sidebar';
$bento_sidebar_current_default_0 = $bento_sidebar_current_default_text;
}
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Sidebar layout', 'bento' ),
'desc' => esc_html__( 'Choose whether to display a sidebar and on which side of the content', 'bento' ),
'id' => $bento_prefix . 'sidebar_layout',
'type' => 'select',
'options' => array(
'right-sidebar' => esc_html__( 'Right Sidebar', 'bento' ).$bento_sidebar_current_default_0,
'left-sidebar' => esc_html__( 'Left Sidebar', 'bento' ).$bento_sidebar_current_default_1,
'full-width' => esc_html__( 'Full Width', 'bento' ).$bento_sidebar_current_default_2,
),
'default' => $bento_page_sidebar_default,
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Page background color', 'bento' ),
'desc' => esc_html__( 'Choose the background color for current page/post. This will override any settings in the Theme Options', 'bento' ),
'id' => $bento_prefix . 'page_background_color',
'type' => 'colorpicker',
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Hide featured image', 'bento' ),
'desc' => esc_html__( 'Check this option if you DO NOT want to display the featured image (thumbnail) on the page; it will still be used for the corresponding tile on the "columns" or "rows" grid pages.', 'bento' ),
'id' => $bento_prefix . 'hide_thumb',
'type' => 'checkbox',
'show_on_cb' => 'bento_show_field_on_single'
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Hide title', 'bento' ),
'desc' => esc_html__( 'Check this option if you DO NOT want to display the title on the page', 'bento' ),
'id' => $bento_prefix . 'hide_title',
'type' => 'checkbox',
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Uppercase title', 'bento' ),
'desc' => esc_html__( 'Check this option if you want the page title to be entirely in uppercase (useful for landing pages).', 'bento' ),
'id' => $bento_prefix . 'uppercase_title',
'type' => 'checkbox',
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Title position', 'bento' ),
'desc' => esc_html__( 'Choose the position of the title; default is left-aligned.', 'bento' ),
'id' => $bento_prefix . 'title_position',
'type' => 'select',
'options' => array(
'left' => esc_html__( 'Left-aligned (default)', 'bento' ),
'center' => esc_html__( 'Centered', 'bento' ),
),
'default' => 'left',
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Title color', 'bento' ),
'desc' => esc_html__( 'Choose the text color for the title of this post. This will override any settings in the Theme Options', 'bento' ),
'id' => $bento_prefix . 'title_color',
'type' => 'colorpicker',
)
);
$bento_general_settings->add_field(
array(
'name' => esc_html__( 'Subtitle (excerpt) color', 'bento' ),
'desc' => esc_html__( 'Choose the text color for the subtitle of this page, sourced from the Excerpt field; default is #999999 (light grey).', 'bento' ),
'id' => $bento_prefix . 'subtitle_color',
'type' => 'colorpicker',
'default' => '#999999',
)
);
// Extended header settings
$bento_header_settings = new_cmb2_box(
array(
'id' => 'post_header_metabox',
'title' => esc_html__( 'Page Header Settings', 'bento' ),
'object_types' => array( 'post', 'page', 'project', 'product' ),
'context' => 'normal',
'priority' => 'low',
'show_names' => true,
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Activate extended header', 'bento' ),
'desc' => esc_html__( 'Check this box to enable extended header options such as header image and call-to-action-buttons.', 'bento' ),
'id' => $bento_prefix . 'activate_header',
'type' => 'checkbox',
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Header height', 'bento' ),
'desc' => esc_html__( 'Choose the title top and bottom padding, which will affect the header height; default is 10%', 'bento' ),
'id' => $bento_prefix . 'header_image_height',
'type' => 'select',
'options' => array(
'' => esc_html__( 'Choose value', 'bento' ),
'5%' => '5%',
'10%' => esc_html__( '10% (default)', 'bento' ),
'15%' => '15%',
'20%' => '20%',
'25%' => '25%',
),
'default' => '10%',
)
);
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Header image', 'bento' ),
'desc' => esc_html__( 'Upload the image to serve as the header; recommended size is 1400x300 pixels and above, yet mind the file size - excessively large images may worsen user experience', 'bento' ),
'id' => $bento_prefix . 'header_image',
'type' => 'file',
)
);
}
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Header video', 'bento' ),
'desc' => esc_html__( 'Upload the video file to be used as header background; if this is active, the header image will serve as a placeholder for mobile devices; .mp4 files are recommended, but you can also use .ogv and .webm formats. Please mind the file size - excessively large images may worsen user experience', 'bento' ),
'id' => $bento_prefix . 'header_video_source',
'type' => 'file',
)
);
}
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Header image overlay color', 'bento' ),
'desc' => esc_html__( 'Choose the color for the image overlay, designed to make the title text stand out more clearly', 'bento' ),
'id' => $bento_prefix . 'header_overlay',
'type' => 'colorpicker',
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Header image overlay opacity', 'bento' ),
'desc' => esc_html__( 'Choose the opacity level for the image overlay; 0.0 is fully transparent, 1.0 is fully opaque, default is 0.3', 'bento' ),
'id' => $bento_prefix . 'header_overlay_opacity',
'type' => 'select',
'options' => array(
'0' => '0.0',
'1' => '0.1',
'2' => '0.2',
'3' => esc_html__( '0.3 (default)', 'bento' ),
'4' => '0.4',
'5' => '0.5',
'6' => '0.6',
'7' => '0.7',
'8' => '0.8',
'9' => '0.9',
'10' => '1.0',
),
'default' => '0.3',
'show_option_none' => esc_html__( 'Choose value', 'bento' ),
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Transparent website header', 'bento' ),
'desc' => esc_html__( 'Check this option to make the website header (the top area with the menu and the logo) look like a transparent overlay on top of the header image on this page.', 'bento' ),
'id' => $bento_prefix . 'transparent_header',
'type' => 'checkbox',
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Website menu color on this page', 'bento' ),
'desc' => esc_html__( 'Choose the color for the website menu on this page (useful for the transparent header).', 'bento' ),
'id' => $bento_prefix . 'menu_color',
'type' => 'colorpicker',
)
);
$bento_header_settings->add_field(
array(
'name' => esc_html__( 'Website menu mouse-hover color on this page', 'bento' ),
'desc' => esc_html__( 'Choose the mouse-over color for the website menu on this page (useful for the transparent header).', 'bento' ),
'id' => $bento_prefix . 'menu_color_hover',
'type' => 'colorpicker',
)
);
// Map header settings
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_headermap_settings = new_cmb2_box(
array(
'id' => 'post_headermap_metabox',
'title' => esc_html__( 'Map Header', 'bento' ),
'object_types' => array( 'page' ),
'context' => 'normal',
'priority' => 'low',
'show_names' => true,
)
);
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Activate Google Maps header', 'bento' ),
'desc' => esc_html__( 'Check this box to enable Google Maps header; note that this will deactivate the extended header image/video.', 'bento' ),
'id' => $bento_prefix . 'activate_headermap',
'type' => 'checkbox',
)
);
$maps_key_url = 'https://developers.google.com/maps/documentation/javascript/get-api-key#get-an-api-key';
$maps_key_text = sprintf( wp_kses( esc_html__( 'Input the API key for this instance of Maps - you can find detailed instructions on generating your API key here.', 'bento' ), array( 'a' => array( 'href' => array(), 'target' => array() ) ) ), esc_url( $maps_key_url ) );
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Google Maps API key', 'bento' ),
'desc' => $maps_key_text,
'id' => $bento_prefix . 'headermap_key',
'type' => 'text',
)
);
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Map center location', 'bento' ),
'desc' => esc_html__( 'Input the address (country, city, or exact address) of the location on which to center the map.', 'bento' ),
'id' => $bento_prefix . 'headermap_center',
'type' => 'text',
)
);
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Map height', 'bento' ),
'desc' => esc_html__( 'Select the height of the map, in pixels.', 'bento' ),
'id' => $bento_prefix . 'headermap_height',
'type' => 'select',
'options' => array(
'100' => '100',
'200' => '200',
'300' => '300',
'400' => esc_html__( '400 (default)', 'bento' ),
'500' => '500',
'600' => '600',
'700' => '700',
),
'default' => '400',
)
);
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Map zoom level', 'bento' ),
'desc' => esc_html__( 'Choose the zoom level for the map, 1 being entire world and 20 being individual buildings.', 'bento' ),
'id' => $bento_prefix . 'headermap_zoom',
'type' => 'select',
'options' => array(
1 => '1',
2 => '2',
3 => '3',
4 => '4',
5 => '5',
6 => '6',
7 => '7',
8 => '8',
9 => '9',
10 => '10',
11 => '11',
12 => '12',
13 => '13',
14 => '14',
15 => esc_html__( '15 (default)', 'bento' ),
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
),
'default' => 15,
)
);
$snazzymaps_url = 'https://snazzymaps.com';
$snazzymaps_link = sprintf( wp_kses( esc_html__( 'You can insert the code for custom map styling here; check Snazzymaps.com for ready-made snippets: when on the page of the particular style, click on the "Copy" button or simply select and copy the code under the "Javascript Style Array" heading.', 'bento' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( $snazzymaps_url ) );
$bento_headermap_settings->add_field(
array(
'name' => esc_html__( 'Map custom style', 'bento' ),
'desc' => $snazzymaps_link,
'id' => $bento_prefix . 'headermap_style',
'type' => 'textarea',
)
);
}
// Masonry tile settings
$bento_tile_settings = new_cmb2_box(
array(
'id' => 'tile_settings_metabox',
'title' => esc_html__( 'Masonry Tile Settings / Only for displaying on "Grid" page template with "Masonry" grid type', 'bento' ),
'object_types' => array( 'post', 'project', 'product' ),
'context' => 'normal',
'priority' => 'low',
'show_names' => true,
)
);
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile size', 'bento' ),
'desc' => esc_html__( 'Choose the size of the tile relative to the default 1x1 tile (defined by the number of columns in the grid)', 'bento' ),
'id' => $bento_prefix . 'tile_size',
'type' => 'select',
'options' => array(
'1x1' => esc_html__( '1x1 (default)', 'bento' ),
'1x2' => '1x2',
'2x1' => '2x1',
'2x2' => '2x2',
),
'default' => '1x1',
)
);
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile overlay color', 'bento' ),
'desc' => esc_html__( 'Choose the color for an overlay for the tile background image; default is #666666 (grey)', 'bento' ),
'id' => $bento_prefix . 'tile_overlay_color',
'type' => 'colorpicker',
'default' => '#666666',
)
);
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile image', 'bento' ),
'desc' => esc_html__( 'Upload the image to be used in the tile; if this field is empty, the featured image (thumbnail) will be used.', 'bento' ),
'id' => $bento_prefix . 'tile_image',
'type' => 'file',
)
);
}
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile overlay opacity', 'bento' ),
'desc' => esc_html__( 'Select the opacity level for an overlay for the tile background image, 0 is fully transparent (default is 0.6)', 'bento' ),
'id' => $bento_prefix . 'tile_overlay_opacity',
'type' => 'select',
'options' => array(
'0' => '0.0',
'1' => '0.1',
'2' => '0.2',
'3' => '0.3',
'4' => '0.4',
'5' => '0.5',
'6' => esc_html__( '0.6 (default)', 'bento' ),
'7' => '0.7',
'8' => '0.8',
'9' => '0.9',
'10' => '1.0',
),
'default' => '0.6',
'show_option_none' => esc_html__( 'Choose value', 'bento' ),
)
);
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile text color', 'bento' ),
'desc' => esc_html__( 'Choose the color for the text inside the tile; default is #ffffff (white)', 'bento' ),
'id' => $bento_prefix . 'tile_text_color',
'type' => 'colorpicker',
'default' => '#ffffff',
)
);
$bento_tile_settings->add_field(
array(
'name' => esc_html__( 'Tile text size', 'bento' ),
'desc' => esc_html__( 'Choose the text size for the tile; default is 16px', 'bento' ),
'id' => $bento_prefix . 'tile_text_size',
'type' => 'select',
'options' => array(
'12' => '12',
'13' => '13',
'14' => '14',
'16' => esc_html__( '16 (default)', 'bento' ),
'18' => '18',
'20' => '20',
'24' => '24',
'28' => '28',
),
'default' => '16',
)
);
// Grid page settings
$bento_grid_settings = new_cmb2_box(
array(
'id' => 'grid_settings_metabox',
'title' => esc_html__( 'Grid Settings', 'bento' ),
'object_types' => array( 'page' ),
'context' => 'normal',
'priority' => 'low',
'show_names' => true,
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Grid mode', 'bento' ),
'desc' => esc_html__( 'Choose which grid type to use on this page', 'bento' ),
'id' => $bento_prefix . 'page_grid_mode',
'type' => 'select',
'options' => array(
'columns' => esc_html__( 'Columns', 'bento' ),
'masonry' => esc_html__( 'Masonry', 'bento' ),
'rows' => esc_html__( 'Rows', 'bento' ),
),
'default' => 'columns',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Number of columns', 'bento' ),
'desc' => esc_html__( 'Select the number of columns in the grid or number of base tiles per line in masonry', 'bento' ),
'id' => $bento_prefix . 'page_columns',
'type' => 'select',
'options' => array(
'1' => '1',
'2' => '2',
'3' => esc_html__( '3 (default)', 'bento' ),
'4' => '4',
'5' => '5',
'6' => '6',
),
'default' => '3',
)
);
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Content types', 'bento' ),
'id' => $bento_prefix . 'page_content_types',
'type' => 'multicheck_posttype',
'default' => 'post',
)
);
} else {
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Content types', 'bento' ),
'desc' => sprintf( esc_html__( 'Install the %s to use the "project" (portfolio) content type', 'bento' ), $bento_ep_url ),
'id' => $bento_prefix . 'page_content_types',
'type' => 'multicheck_posttype',
'default' => 'post',
)
);
}
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Items per page', 'bento' ),
'desc' => esc_html__( 'Input the number of items to display per page; default is the number set in "Settings - Reading" admin section', 'bento' ),
'id' => $bento_prefix . 'page_number_items',
'type' => 'text_small',
'default' => '10',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Filter by taxonomy', 'bento' ),
'desc' => esc_html__( 'Select the category, tag, etc, to be used as a filter for this grid; note that in case your chosen content type does not appear in that taxonomy, you might get an empty grid', 'bento' ),
'id' => $bento_prefix . 'filter_taxonomy',
'type' => 'taxonomy_list',
'default' => 'all',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Order grid items by', 'bento' ),
'desc' => esc_html__( 'Choose the method for ordering the grid elements', 'bento' ),
'id' => $bento_prefix . 'orderby_grid',
'type' => 'select',
'options' => array(
'date' => esc_html__( 'Created date (default)', 'bento' ),
'modified' => esc_html__( 'Last modified', 'bento' ),
'title' => esc_html__( 'Post title', 'bento' ),
'comment_count' => esc_html__( 'Comment count', 'bento' ),
),
'default_cb' => 'date',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Ordering direction', 'bento' ),
'desc' => esc_html__( 'Choose whether the grid items are displayed in ascending or descending order', 'bento' ),
'id' => $bento_prefix . 'order_grid',
'type' => 'select',
'options' => array(
'DESC' => esc_html__( 'Descending (default)', 'bento' ),
'ASC' => esc_html__( 'Ascending', 'bento' ),
),
'default_cb' => 'DESC',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Item margins', 'bento' ),
'desc' => esc_html__( 'Input the margin width in pixels (default is 10)', 'bento' ),
'id' => $bento_prefix . 'page_item_margins',
'type' => 'text_small',
'default' => '10',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Hide tile overlays', 'bento' ),
'desc' => esc_html__( 'Only display tile overlays in masonry on mouse hover', 'bento' ),
'id' => $bento_prefix . 'hide_tile_overlays',
'type' => 'checkbox',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Force full width', 'bento' ),
'desc' => esc_html__( 'Check this option if you want the grid to stretch the entire width of the screen', 'bento' ),
'id' => $bento_prefix . 'grid_full_width',
'type' => 'checkbox',
)
);
$bento_grid_settings->add_field(
array(
'name' => esc_html__( 'Load items on same page', 'bento' ),
'desc' => esc_html__( 'Replace the standard pagination with a button which loads next items without refreshing the page', 'bento' ),
'id' => $bento_prefix . 'page_ajax_load',
'type' => 'checkbox',
)
);
// SEO settings
if ( get_option( 'bento_ep_license_status' ) == 'valid' ) {
$bento_seo_settings = new_cmb2_box(
array(
'id' => 'seo_settings_metabox',
'title' => esc_html__( 'SEO Settings', 'bento' ),
'object_types' => array( 'post', 'page', 'project', 'product' ),
'context' => 'normal',
'priority' => 'low',
'show_names' => true,
)
);
$bento_seo_settings->add_field(
array(
'name' => esc_html__( 'Meta title', 'bento' ),
'desc' => esc_html__( 'Input the meta title - the text to be used by search engines as well as browser tabs (recommended max length - 60 symbols); the post title will be used by default if this field is empty.', 'bento' ),
'id' => $bento_prefix . 'meta_title',
'type' => 'text',
)
);
$bento_seo_settings->add_field(
array(
'name' => esc_html__( 'Meta description', 'bento' ),
'desc' => esc_html__( 'Input the meta description - the text to be used by search engines on search result pages (recommended max length - 160 symbols); the first part of the post body will be used by default is this field is left blank.', 'bento' ),
'id' => $bento_prefix . 'meta_description',
'type' => 'textarea',
'attributes' => array(
'rows' => 3,
),
)
);
}
}
?>