LLMS_Shortcode
LLMS_Shortcode Abstract.
Source Source
File: includes/abstracts/abstract.llms.shortcode.php
abstract class LLMS_Shortcode {
/**
* Shortcode tag
*
* @var string
*/
public $tag = '';
/**
* Retrieve the actual content of the shortcode
*
* $atts & $content are both filtered before being passed to get_output()
* output is filtered so the return of get_output() doesn't need its own filter
*
* @return string
* @since 3.4.3
* @version 3.4.3
*/
abstract protected function get_output();
/**
* Retrieves an array of default attributes which are automatically merged
* with the user submitted attributes and passed to $this->get_output()
*
* @return array
* @since 3.4.3
* @version 3.4.3
*/
protected function get_default_attributes() {
return array();
}
/**
* Retrieves a string used for default content which is used if no content is supplied
*
* @return string
* @since 3.4.3
* @version 3.4.3
*/
protected function get_default_content() {
return '';
}
/**
* Holds singletons for extending classes
*
* @var array
*/
private static $_instances = array();
private $attributes = array();
private $content = '';
/**
* Get the singleton instance for the extending class
*
* @return obj
* @since 3.4.3
* @version 3.4.3
*/
public static function instance() {
$class = get_called_class();
if ( ! isset( self::$_instances[ $class ] ) ) {
self::$_instances[ $class ] = new $class();
}
return self::$_instances[ $class ];
}
/**
* Private constructor
*
* @since 3.4.3
*/
private function __construct() {
add_shortcode( $this->tag, array( $this, 'output' ) );
}
/**
* Allow shortcodes to enqueue scripts only when the shortcode is used
* Enqueues a registered script IF that script isn't already enqueued
*
* @param string $handle script handle
* @return void
* @since 3.4.3
* @version 3.4.3
*/
protected function enqueue_script( $handle ) {
if ( wp_script_is( $handle, 'registered' ) && ! wp_script_is( $handle, 'enqueued' ) ) {
wp_enqueue_script( $handle );
}
}
/**
* Get the array of attributes
*
* @return array
* @since 3.4.3
* @version 3.5.1
*/
public function get_attributes() {
return apply_filters( $this->get_filter( 'get_attributes' ), $this->attributes, $this );
}
/**
* Get a specific attribute from the attributes array
*
* @param string $key attribute key to retrieve
* @param string $default if no attribute is set, this value will be used
* @return mixed
* @since 3.4.3
* @version 3.5.1
*/
public function get_attribute( $key, $default = '' ) {
$attributes = $this->get_attributes();
if ( isset( $attributes[ $key ] ) ) {
return $attributes[ $key ];
}
return $default;
}
/**
* Retrieve the content of the shortcode
*
* @return string
* @since 3.4.3
* @version 3.5.1
*/
public function get_content() {
return apply_filters( $this->get_filter( 'get_content' ), $this->content, $this );
}
/**
* Retrieve a string that can be used for apply_filters()
* Ensures that all shortcode related filters follow the same naming convention
*
* @param string $filter filter name / suffix
* @return string
* @since 3.4.3
* @version 3.4.3
*/
protected function get_filter( $filter ) {
return $this->tag . '_' . $filter;
}
/**
* Output the actual content of the shortcode
* This is the callback function used by add_shortcode
* and can also be used programmatically, used in some widgets
*
* $atts & $content are both filtered before being passed to get_output()
* output is filtered so the return of get_output() doesn't need its own filter
*
* @since 3.4.3
* @since 3.5.1 Unknown.
* @since 5.0.0 Merge attributes in a separate method.
*
* @param array $atts user submitted shortcode attributes
* @param string $content user submitted content
* @return string
*/
public function output( $atts = array(), $content = '' ) {
$this->attributes = $this->set_attributes( $atts );
if ( ! $content ) {
$content = apply_filters( $this->get_filter( 'get_default_content' ), $this->get_default_content(), $this );
}
$this->content = $content;
return apply_filters( $this->get_filter( 'output' ), $this->get_output(), $this );
}
/**
* Merge user attributes with default attributes.
*
* @since 5.0.0
*
* @param array $atts User-submitted shortcode attributes.
*
* @return array
*/
protected function set_attributes( $atts = array() ) {
return shortcode_atts(
apply_filters( $this->get_filter( 'get_default_attributes' ), $this->get_default_attributes(), $this ),
$atts,
$this->tag
);
}
}
Expand full source code Collapse full source code View on GitHub
Methods Methods
- __construct — Private constructor
- enqueue_script — Allow shortcodes to enqueue scripts only when the shortcode is used Enqueues a registered script IF that script isn't already enqueued
- get_attribute — Get a specific attribute from the attributes array
- get_attributes — Get the array of attributes
- get_content — Retrieve the content of the shortcode
- get_default_attributes — Retrieves an array of default attributes which are automatically merged with the user submitted attributes and passed to $this->get_output()
- get_default_content — Retrieves a string used for default content which is used if no content is supplied
- get_filter — Retrieve a string that can be used for apply_filters() Ensures that all shortcode related filters follow the same naming convention
- get_output — Retrieve the actual content of the shortcode
- instance — Get the singleton instance for the extending class
- output — Output the actual content of the shortcode This is the callback function used by add_shortcode and can also be used programmatically, used in some widgets
- set_attributes — Merge user attributes with default attributes.
Changelog Changelog
| Version | Description |
|---|---|
| 3.4.3 | Introduced. |