: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* Filters the builder's settings tabs.
* @param string[] $tabs {
* @type string $tab_slug Tab name
* @param string $scope Accepts 'page', 'builder'.
return apply_filters( 'et_builder_settings_tabs', $result, $scope );
* Returns the localized title of the builder page settings modal.
public static function get_title() {
$post_type = isset( $post->post_type ) ? $post->post_type : 'page';
$post_type_obj = get_post_type_object( $post_type );
$settings = esc_html_x( '%s Settings', 'Page, Post, Product, etc.', 'et_builder' );
* Filters the title of the builder's page settings modal.
return apply_filters( 'et_builder_page_settings_modal_title', sprintf( $settings, $post_type_obj->labels->singular_name ) );
* Returns the localized toggle/group names for the builder page settings modal.
* @type string $toggle_slug Toggle name
public static function get_toggles() {
$utils = ET_Core_Data_Utils::instance();
// Get current post type singular name and use it as toggle title.
$post_type = wp_doing_ajax() ? $utils->array_get( $_POST, 'et_post_type' ) : get_post_type( et_core_page_resource_get_the_ID() );
$post_type_obj = get_post_type_object( $post_type );
'main_content' => ! empty( $post_type_obj ) ? $post_type_obj->labels->singular_name : '',
'background' => et_builder_i18n( 'Background' ),
'color_palette' => esc_html__( 'Color Palette', 'et_builder' ),
'custom_css' => et_builder_i18n( 'Custom CSS' ),
'enable_bfb' => esc_html__( 'Enable The Latest Divi Builder Experience', 'et_builder' ),
'enable_classic_editor' => esc_html__( 'Enable Classic Editor', 'et_builder' ),
'performance' => esc_html__( 'Performance', 'et_builder' ),
'product_tour' => esc_html__( 'Product Tour', 'et_builder' ),
'spacing' => esc_html__( 'Spacing', 'et_builder' ),
'ab_testing' => esc_html__( 'Split Testing', 'et_builder' ),
'text' => et_builder_i18n( 'Text' ),
'visibility' => et_builder_i18n( 'Visibility' ),
'position' => et_builder_i18n( 'Position' ),
* Filters the builder page settings modal's option group toggles.
* @param string[] $toggles {
* @type string $toggle_slug Toggle name
return apply_filters( 'et_builder_page_settings_modal_toggles', $toggles );
* Returns the values of builder settings for the provided settings scope.
* @param string $scope Get values for scope (page|builder|all). Default 'page'.
* @param string|int $post_id Optional. If not provided, {@link get_the_ID()} will be used.
* @type mixed $setting_key The value for the setting.
public static function get_values( $scope = 'page', $post_id = null, $exclude_defaults = false ) {
$post_id = $post_id ? $post_id : get_the_ID();
if ( 'builder' === $scope ) {
$result = self::$_BUILDER_SETTINGS_VALUES;
} else if ( 'page' === $scope ) {
$result = self::_get_page_settings_values( $post_id );
} else if ( 'all' === $scope ) {
'page' => self::_get_page_settings_values( $post_id ),
'builder' => self::$_BUILDER_SETTINGS_VALUES,
if ( $exclude_defaults ) {
'all' === $scope || $result = array( $result );
foreach ( $result as $key => $settings ) {
$result[ $key ] = array_diff_key( $result[ $key ], array_flip( self::$_PAGE_SETTINGS_IS_DEFAULT[ $post_id ] ) );
'all' === $scope || $result = $result[0];
public static function plugin_dashboard_option_saved_cb( $processed_options, $option_name, $field_info, $output ) {
if ( ! isset( $field_info['id'] ) ) {
$setting = $field_info['id'];
$setting_value = $processed_options[ $option_name ];
if ( ! isset( self::$_BUILDER_SETTINGS_FIELDS[ $setting ] ) ) {
et_update_option( $setting, $setting_value );
self::_maybe_clear_cached_static_css_files( $setting, $setting_value );
public static function plugin_dashboard_option_value_cb( $option_value, $option ) {
if ( ! isset( $option['id'] ) ) {
$setting = $option['id'];
if ( ! isset( self::$_BUILDER_SETTINGS_VALUES[ $setting ] ) ) {
return self::$_BUILDER_SETTINGS_VALUES[ $setting ];
* Register filter callback for modifying page settings post meta value based on current
* autosave data if current page is valid builder preview page
public static function _register_preview_post_metadata() {
if ( ! is_user_logged_in() || ! is_preview() || ! et_pb_is_pagebuilder_used() ) {
// Populate page settings fields meta_key map. Most page setting field id is identical (sans
// `_` prefix) to its meta_key name but some field has completely different meta_key name
foreach ( self::$_PAGE_SETTINGS_FIELDS as $field_id => $field ) {
$meta_key = isset( $field['meta_key'] ) ? $field['meta_key'] : '_' . $field_id;
self::$_PAGE_SETTINGS_FIELDS_META_KEY_MAP[ $meta_key ] = $field_id;
// Register filter for modifying page setting's post_meta value
add_filter( 'get_post_metadata', array( 'ET_Builder_Settings', 'modify_preview_post_metadata' ), 10, 4 );
* Get page settings' post meta value in preview page. This method should only be called on
public static function get_preview_post_metadata() {
static $preview_post_metadata = null;
// Value retrieval should only be done once
if ( is_null( $preview_post_metadata ) ) {
// Get autosave data of current post of current user
$current_user_id = get_current_user_id();
$preview_post_metadata = get_post_meta(
"_et_builder_settings_autosave_{$current_user_id}",
// Returned value should be array
if ( ! is_array( $preview_post_metadata ) ) {
$preview_post_metadata = array();
return $preview_post_metadata;
* Modify page settings' post meta value in preview page. This should only be hooked after
* checking whether current page is valid preview page or not
* @param null|array|string $value
* @param string $meta_key
* @return null|array|string
public static function modify_preview_post_metadata( $value, $object_id, $meta_key, $single ) {
$current_user_id = get_current_user_id();
// Bail if $meta_key value is equal to meta_key value used to save current page autosave data
if ( "_et_builder_settings_autosave_{$current_user_id}" === $meta_key ) {
// Bail if $meta_key is not page settings field's meta key
if ( ! isset( self::$_PAGE_SETTINGS_FIELDS_META_KEY_MAP[ $meta_key ] ) ) {
// Bail if current $meta_key value doesn't exist on preview page autosave data
$preview_post_meta_key = self::$_PAGE_SETTINGS_FIELDS_META_KEY_MAP[ $meta_key ];
$preview_post_metadata = self::get_preview_post_metadata();
if ( ! isset( $preview_post_metadata[ $preview_post_meta_key ] ) ) {
return $preview_post_metadata[ $preview_post_meta_key ];
if ( ! function_exists( 'et_builder_settings_init' ) ):
* Initializes the builder settings class if needed.
* {@see 'current_screen'}
* @param WP_Screen $screen Optional. Default `null`.
function et_builder_settings_init( $screen = null ) {
$init_settings = et_builder_should_load_framework() || wp_doing_ajax();
if ( ! $init_settings && is_a( $screen, 'WP_Screen' ) ) {
$init_settings = 1 === preg_match( '/et_\w+_options/', $screen->base );
ET_Builder_Settings::get_instance();
add_action( 'current_screen', 'et_builder_settings_init' );
if ( ! function_exists( 'et_builder_settings_get' ) ):
* Get a builder setting value. Default and global setting values are considered when applicable.
* @param string $setting Page setting name.
* @param string|int $post_id Optional. The post id.
function et_builder_settings_get( $setting, $post_id = '' ) {
$builder_fields = ET_Builder_Settings::get_fields( 'builder' );
$builder_values = ET_Builder_Settings::get_values( 'builder' );
$page_fields = ET_Builder_Settings::get_fields();
$page_values = ET_Builder_Settings::get_values( 'page', $post_id );
$has_page = isset( $page_fields[ $setting ] );
$has_global = isset( $builder_fields[ $setting ] );
$value = $global_value = '';
$global_is_default = false;
if ( ! $has_page && ! $has_global ) {
$global_value = $builder_values[ $setting ];
$global_has_default = isset( $builder_fields[ $setting ]['default'] );
$global_is_default = $global_has_default && $global_value === $builder_fields[ $setting ]['default'];
$page_value = $page_values[ $setting ];
$page_has_default = isset( $page_fields[ $setting ]['default'] );
$page_is_default = $page_has_default && $page_value === $page_fields[ $setting ]['default'];
if ( ! $has_page || ( $page_is_default && ! $global_is_default ) ) {
} else if ( ! $has_global || ! $page_is_default ) {
if ( ! function_exists( 'et_builder_setting_is_off' ) ):
* Whether or not a builder setting is off. Default and global setting values are
* considered when applicable.
* @param string $setting Page setting name.
* @param string|int $post_id Optional. The post id.
function et_builder_setting_is_off( $setting, $post_id = '' ) {
return 'off' === et_builder_settings_get( $setting, $post_id );
if ( ! function_exists( 'et_builder_setting_is_on' ) ):
* Whether or not a builder setting is on. Default and global setting values are
* considered when applicable.
* @param string $setting Page setting name.
* @param string|int $post_id Optional. The post id.
function et_builder_setting_is_on( $setting, $post_id = '' ) {
return 'on' === et_builder_settings_get( $setting, $post_id );