File "class-epsilon-setting-repeater.php"
Full Path: /home2/sdektunc/cepali.edu.mx/wp-content/themes/shapely/inc/libraries/epsilon-framework/customizer/settings/class-epsilon-setting-repeater.php
File size: 3.44 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Repeater Settings.
*/
class Epsilon_Setting_Repeater extends WP_Customize_Setting {
/**
* ID of the post where we`ll save the meta
*
* @var
*/
public $save_as_meta;
/**
* Constructor.
*
* Any supplied $args override class property defaults.
*
* @access public
* @since 1.2.0
*
* @param WP_Customize_Manager $manager The WordPress WP_Customize_Manager object.
* @param string $id A specific ID of the setting. Can be a theme mod or option name.
* @param array $args Setting arguments.
*/
public function __construct( $manager, $id, $args = array() ) {
parent::__construct( $manager, $id, $args );
if ( isset( $args['save_as_meta'] ) ) {
$this->save_as_meta = $args['save_as_meta'];
}
// Will onvert the setting from JSON to array. Must be triggered very soon.
add_filter( "customize_sanitize_{$this->id}", array( $this, 'sanitize_repeater_setting' ), 10, 1 );
}
/**
* Fetch the value of the setting.
*
* @since 1.2.0
* @access public
* @return mixed The value.
*/
public function value() {
$value = parent::value();
if ( ! is_array( $value ) ) {
$value = array();
}
return $value;
}
/**
* Convert the JSON encoded setting coming from Customizer to an Array.
*
* @since 1.2.0
*
* @access public
*
* @param string $value URL Encoded JSON Value.
*
* @return array
*/
public function sanitize_repeater_setting( $value ) {
if ( ! is_array( $value ) ) {
$value = json_decode( urldecode( $value ) );
}
$sanitized = ( empty( $value ) || ! is_array( $value ) ) ? array() : $value;
// Make sure that every row is an array, not an object.
foreach ( $sanitized as $key => $_value ) {
if ( empty( $_value ) ) {
unset( $sanitized[ $key ] );
} else {
$sanitized[ $key ] = (array) $_value;
}
}
// Reindex array.
if ( is_array( $sanitized ) ) {
$sanitized = array_values( $sanitized );
}
return $sanitized;
}
/**
* Overwrite saving
*
* @param mixed $value
*
* @return bool
*/
protected function set_root_value( $value ) {
if ( ! empty( $this->save_as_meta ) ) {
update_post_meta(
$this->save_as_meta,
$this->id, array(
$this->id => $value,
)
);
return true;
} else {
return parent::set_root_value( $value );
}
}
/**
* Get the root value for a setting, especially for multidimensional ones.
*
* @param mixed $default Value to return if root does not exist.
*
* @return mixed
*/
protected function get_root_value( $default = null ) {
if ( ! empty( $this->save_as_meta ) ) {
$draft = $this->manager->changeset_post_id();
$arr = null === $draft ? get_post_meta( $this->save_as_meta, $this->id, true ) : get_post( $draft );
if ( null !== $draft && is_a( $arr, 'WP_Post' ) ) {
$theme_slug = get_stylesheet();
$string = $theme_slug . '::' . $this->id;
$known = $arr->post_content;
$arr = array();
$known = json_decode( $known, true );
if ( isset( $known[ $string ] ) && ! empty( $known[ $string ]['value'] ) ) {
$arr = array(
$this->id => $known[ $string ]['value'],
);
}
}
if ( empty( $arr ) ) {
$arr = array(
$this->id => array(),
);
}
return $arr[ $this->id ];
} else {
return parent::get_root_value( $default );
}
}
}