'Add Shortcode',
'select_title' => 'Select a shortcode',
'insert_title' => 'Insert Shortcode',
'show_in_editor' => true,
'show_in_custom' => false,
'defaults' => array(),
'class' => '',
'gutenberg' => array(
'title' => 'CSF Shortcodes',
'description' => 'CSF Shortcode Block',
'icon' => 'screenoptions',
'category' => 'widgets',
'keywords' => array('shortcode', 'csf', 'insert'),
'placeholder' => 'Write shortcode here...',
),
);
// run shortcode construct
public function __construct($key, $params = array())
{
$this->unique = $key;
$this->args = apply_filters("csf_{$this->unique}_args", wp_parse_args($params['args'], $this->args), $this);
$this->sections = apply_filters("csf_{$this->unique}_sections", $params['sections'], $this);
$this->pre_tabs = $this->pre_tabs($this->sections);
$this->pre_sections = $this->pre_sections($this->sections);
add_action('admin_footer', array($this, 'add_footer_modal_shortcode'));
add_action('customize_controls_print_footer_scripts', array($this, 'add_footer_modal_shortcode'));
add_action('wp_ajax_csf-get-shortcode-' . $this->unique, array($this, 'get_shortcode'));
if (!empty($this->args['show_in_editor'])) {
CSF::$shortcode_instances[$this->unique] = wp_parse_args(array('hash' => md5($key), 'modal_id' => $this->unique), $this->args);
// elementor editor support
if (CSF::is_active_plugin('elementor/elementor.php')) {
add_action('elementor/editor/before_enqueue_scripts', array('CSF', 'add_admin_enqueue_scripts'));
add_action('elementor/editor/footer', array('CSF_Field_icon', 'add_footer_modal_icon'));
add_action('elementor/editor/footer', array($this, 'add_footer_modal_shortcode'));
}
}
}
// instance
public static function instance($key, $params = array())
{
return new self($key, $params);
}
public function pre_tabs($sections)
{
$result = array();
$parents = array();
$count = 100;
foreach ($sections as $key => $section) {
if (!empty($section['parent'])) {
$section['priority'] = (isset($section['priority'])) ? $section['priority'] : $count;
$parents[$section['parent']][] = $section;
unset($sections[$key]);
}
$count++;
}
foreach ($sections as $key => $section) {
$section['priority'] = (isset($section['priority'])) ? $section['priority'] : $count;
if (!empty($section['id']) && !empty($parents[$section['id']])) {
$section['subs'] = wp_list_sort($parents[$section['id']], array('priority' => 'ASC'), 'ASC', true);
}
$result[] = $section;
$count++;
}
return wp_list_sort($result, array('priority' => 'ASC'), 'ASC', true);
}
public function pre_sections($sections)
{
$result = array();
foreach ($this->pre_tabs as $tab) {
if (!empty($tab['subs'])) {
foreach ($tab['subs'] as $sub) {
$result[] = $sub;
}
}
if (empty($tab['subs'])) {
$result[] = $tab;
}
}
return $result;
}
// get default value
public function get_default($field)
{
$default = (isset($field['default'])) ? $field['default'] : '';
$default = (isset($this->args['defaults'][$field['id']])) ? $this->args['defaults'][$field['id']] : $default;
return $default;
}
public function add_footer_modal_shortcode()
{
if (!wp_script_is('csf')) {
return;
}
$class = ($this->args['class']) ? ' ' . esc_attr($this->args['class']) : '';
$has_select = (count($this->pre_tabs) > 1) ? true : false;
$single_usage = (!$has_select) ? ' csf-shortcode-single' : '';
$hide_header = (!$has_select) ? ' hidden' : '';
?>
';
echo '
';
echo '
';
?>
pre_sections[$shortcode_key - 1];
$shortcode = (!empty($section['shortcode'])) ? $section['shortcode'] : '';
$view = (!empty($section['view'])) ? $section['view'] : 'normal';
if (!empty($section)) {
//
// View: normal
if (!empty($section['fields']) && $view !== 'repeater') {
echo '';
echo (!empty($section['description'])) ? '
' . $section['description'] . '
' : '';
foreach ($section['fields'] as $field) {
if (in_array($field['type'], $unallows)) {
$field['_notice'] = true;
}
// Extra tag improves for spesific fields (border, spacing, dimensions etc...)
$field['tag_prefix'] = (!empty($field['tag_prefix'])) ? $field['tag_prefix'] . '_' : '';
$field_default = (isset($field['id'])) ? $this->get_default($field) : '';
CSF::field($field, $field_default, $shortcode, 'shortcode');
}
echo '
';
}
//
// View: group and repeater fields
$repeatable_fields = ($view === 'repeater' && !empty($section['fields'])) ? $section['fields'] : array();
$repeatable_fields = ($view === 'group' && !empty($section['group_fields'])) ? $section['group_fields'] : $repeatable_fields;
if (!empty($repeatable_fields)) {
$button_title = (!empty($section['button_title'])) ? ' ' . $section['button_title'] : esc_html__('Add New', 'csf');
$inner_shortcode = (!empty($section['group_shortcode'])) ? $section['group_shortcode'] : $shortcode;
echo '';
echo '
';
echo '
';
echo '
';
foreach ($repeatable_fields as $field) {
if (in_array($field['type'], $unallows)) {
$field['_notice'] = true;
}
// Extra tag improves for spesific fields (border, spacing, dimensions etc...)
$field['tag_prefix'] = (!empty($field['tag_prefix'])) ? $field['tag_prefix'] . '_' : '';
$field_default = (isset($field['id'])) ? $this->get_default($field) : '';
CSF::field($field, $field_default, $inner_shortcode . '[0]', 'shortcode');
}
echo '
';
echo '
';
echo '
';
echo '';
}
}
} else {
echo '' . esc_html__('Error: Invalid nonce verification.', 'csf') . '
';
}
wp_send_json_success(array('content' => ob_get_clean()));
}
// Once editor setup for gutenberg and media buttons
public static function once_editor_setup()
{
if (function_exists('register_block_type')) {
add_action('enqueue_block_editor_assets', array('CSF_Shortcoder', 'add_guteberg_blocks'));
}
if (csf_wp_editor_api()) {
add_action('media_buttons', array('CSF_Shortcoder', 'add_media_buttons'));
}
}
// Add gutenberg blocks.
public static function add_guteberg_blocks()
{
$depends = array('wp-blocks', 'wp-element', 'wp-components');
if (wp_script_is('wp-edit-widgets')) {
$depends[] = 'wp-edit-widgets';
} else {
$depends[] = 'wp-edit-post';
}
wp_enqueue_script('csf-gutenberg-block', CSF::include_plugin_url('assets/js/gutenberg.js'), $depends);
wp_localize_script('csf-gutenberg-block', 'csf_gutenberg_blocks', CSF::$shortcode_instances);
foreach (CSF::$shortcode_instances as $value) {
register_block_type('csf-gutenberg-block/block-' . $value['hash'], array(
'editor_script' => 'csf-gutenberg-block',
));
}
}
// Add media buttons
public static function add_media_buttons($editor_id)
{
foreach (CSF::$shortcode_instances as $value) {
echo '' . $value['button_title'] . '';
}
}
}
}