98 lines
2.2 KiB
PHP
98 lines
2.2 KiB
PHP
<?php
|
|
/**
|
|
* Module Features feature class.
|
|
*
|
|
* @package Divi
|
|
* @subpackage Builder
|
|
* @since 4.10.0
|
|
*/
|
|
|
|
/**
|
|
* Handles Builder Module Features.
|
|
*
|
|
* @since 4.10.0
|
|
*/
|
|
class ET_Builder_Module_Features extends ET_Builder_Post_Feature_Base {
|
|
|
|
const CACHE_META_KEY = '_et_builder_module_features_cache';
|
|
|
|
/**
|
|
* Cache group.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $_cache_group = [];
|
|
|
|
/**
|
|
* Construct instance.
|
|
*/
|
|
public function __construct() {
|
|
parent::__construct();
|
|
// Get shortcode tag / attributes.
|
|
add_filter( 'pre_do_shortcode_tag', [ $this, 'set_cache_group' ], 99, 3 );
|
|
add_filter( 'do_shortcode_tag', [ $this, 'restore_previous_cache_group' ] );
|
|
}
|
|
|
|
/**
|
|
* Creates a key from a shortcode tag and its attributes.
|
|
*
|
|
* @since 4.10.0
|
|
* @access public
|
|
* @param string $tag Shortcode tag.
|
|
* @param string $attrs Shortcode attributes.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_key( $tag, $attrs ) {
|
|
$key = $tag . '_' . md5( wp_json_encode( $attrs ) );
|
|
return $key;
|
|
}
|
|
|
|
/**
|
|
* Set cache group.
|
|
*
|
|
* @since 4.10.0
|
|
* @access public
|
|
* @param mixed $override Whether to override do_shortcode return value or not.
|
|
* @param string $tag Shortcode tag.
|
|
* @param string $attrs Shortcode attributes.
|
|
* @return mixed
|
|
*/
|
|
public function set_cache_group( $override, $tag, $attrs ) {
|
|
$this->_cache_group[] = self::get_key( $tag, $attrs );
|
|
return $override;
|
|
}
|
|
|
|
/**
|
|
* Restore previous cache group when current shortcode execution ends.
|
|
*
|
|
* @since 4.10.0
|
|
* @access public
|
|
* @param mixed $output Shortcode content.
|
|
* @return mixed
|
|
*/
|
|
public function restore_previous_cache_group( $output ) {
|
|
// Get rid of current shortcode cache group.
|
|
array_pop( $this->_cache_group );
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Check for cached value.
|
|
*
|
|
* First check cache if present, if not, determine
|
|
* from calling the callback.
|
|
*
|
|
* @param string $key Name of item.
|
|
* @param function $cb Callback function to perform logic.
|
|
* @param string $group Cache group.
|
|
*
|
|
* @return bool/mixed Result.
|
|
*/
|
|
public function get( $key, $cb, $group = 'default' ) {
|
|
return parent::get( $key, $cb, end( $this->_cache_group ) );
|
|
}
|
|
|
|
}
|