Shortcodes Ultimate - Version 5.0.1

Version Description

  • Fixed: serious security vulnerability, which allows attacker to run any code using filter in meta, post, or user shortcodes. Thanks to Robert L Mathews.
  • Fixed: changed admin menu position (it was replacing 'Settings' menu on some installations)
  • Fixed: shortcodes prefix field now accepts special characters
  • Fixed: old bug when unwanted code parts was added with shortcode
  • Fixed: bug, where backslashes were removed from custom CSS code
  • Added: new attribute 'ID' for [button] shortcode
  • Added: new filter 'su/slides_query', which can be used to modify posts query for slider, carousel and custom_gallery shortcodes
  • Added: new filter 'su/assets/custom_css/template' to filter custom css output
  • Minor fixes
Download this release

Release Info

Developer gn_themes
Plugin Icon 128x128 Shortcodes Ultimate
Version 5.0.1
Comparing to
See all releases

Code changes from version 5.0.0 to 5.0.1

admin/class-shortcodes-ultimate-admin-addons.php CHANGED
@@ -150,7 +150,7 @@ final class Shortcodes_Ultimate_Admin_Addons extends Shortcodes_Ultimate_Admin {
150
151
$response = wp_remote_get(
152
$this->addons_api_url,
153
- array( 'timeout' => 10 )
154
);
155
$response = json_decode( wp_remote_retrieve_body( $response ), true );
156
150
151
$response = wp_remote_get(
152
$this->addons_api_url,
153
+ array( 'timeout' => 10, 'sslverify' => false, )
154
);
155
$response = json_decode( wp_remote_retrieve_body( $response ), true );
156
admin/class-shortcodes-ultimate-admin-settings.php CHANGED
@@ -209,7 +209,7 @@ final class Shortcodes_Ultimate_Admin_Settings extends Shortcodes_Ultimate_Admin
209
210
$this->plugin_settings[] = array(
211
'id' => 'su_option_prefix',
212
- 'sanitize' => 'sanitize_html_class',
213
'title' => __( 'Shortcodes prefix', 'shortcodes-ultimate' ),
214
'description' => __( 'This prefix will be used in shortcode names. For example: set <code>MY_</code> prefix and shortcodes will look like <code>[MY_button]</code>. Please note that this setting does not change shortcodes that have been inserted earlier. Change this setting very carefully.', 'shortcodes-ultimate' ),
215
);
@@ -228,4 +228,16 @@ final class Shortcodes_Ultimate_Admin_Settings extends Shortcodes_Ultimate_Admin
228
229
}
230
231
}
209
210
$this->plugin_settings[] = array(
211
'id' => 'su_option_prefix',
212
+ 'sanitize' => array( $this, 'sanitize_prefix' ),
213
'title' => __( 'Shortcodes prefix', 'shortcodes-ultimate' ),
214
'description' => __( 'This prefix will be used in shortcode names. For example: set <code>MY_</code> prefix and shortcodes will look like <code>[MY_button]</code>. Please note that this setting does not change shortcodes that have been inserted earlier. Change this setting very carefully.', 'shortcodes-ultimate' ),
215
);
228
229
}
230
231
+ /**
232
+ * Callback function to sanitize prefix value.
233
+ *
234
+ * @since 5.0.1
235
+ * @param string $prefix Prefix value.
236
+ * @return string Sanitized string.
237
+ * @see https://developer.wordpress.org/reference/functions/add_shortcode/ Source of the RegExp.
238
+ */
239
+ public function sanitize_prefix( $prefix ) {
240
+ return preg_replace( '@[<>&/\[\]\x00-\x20="\']@', '', $prefix );
241
+ }
242
+
243
}
admin/class-shortcodes-ultimate-admin-top-level.php CHANGED
@@ -43,7 +43,7 @@ final class Shortcodes_Ultimate_Admin_Top_Level extends Shortcodes_Ultimate_Admi
43
'shortcodes-ultimate',
44
'__return_false',
45
$icon,
46
- '80'
47
);
48
49
}
43
'shortcodes-ultimate',
44
'__return_false',
45
$icon,
46
+ '80.11'
47
);
48
49
}
assets/js/generator.js CHANGED
@@ -219,7 +219,10 @@ jQuery(document).ready(function($) {
219
// Insert new HTML
220
$settings.html(data);
221
// Apply selected text to the content field
222
- if (typeof mce_selection !== 'undefined' && mce_selection !== '') $('#su-generator-content').val(mce_selection);
223
// Init range pickers
224
$('.su-generator-range-picker').each(function(index) {
225
var $picker = $(this),
@@ -634,7 +637,10 @@ jQuery(document).ready(function($) {
634
// Set new settings
635
set(data);
636
// Apply selected text to the content field
637
- if (typeof mce_selection !== 'undefined' && mce_selection !== '') $('#su-generator-content').val(mce_selection);
638
},
639
dataType: 'json'
640
});
219
// Insert new HTML
220
$settings.html(data);
221
// Apply selected text to the content field
222
+ var $content = $('#su-generator-content');
223
+ if (typeof mce_selection !== 'undefined' && mce_selection !== '' && $content.attr('type') !== 'hidden') {
224
+ $content.val(mce_selection);
225
+ }
226
// Init range pickers
227
$('.su-generator-range-picker').each(function(index) {
228
var $picker = $(this),
637
// Set new settings
638
set(data);
639
// Apply selected text to the content field
640
+ var $content = $('#su-generator-content');
641
+ if (typeof mce_selection !== 'undefined' && mce_selection !== '' && $content.attr('type') !== 'hidden') {
642
+ $content.val(mce_selection);
643
+ }
644
},
645
dataType: 'json'
646
});
inc/core/assets.php CHANGED
@@ -153,12 +153,39 @@ class Su_Assets {
153
* Print custom CSS
154
*/
155
public static function custom_css() {
156
// Get custom CSS and apply filters to it
157
- $custom_css = apply_filters( 'su/assets/custom_css', str_replace( '&#039;', '\'', html_entity_decode( (string) get_option( 'su_option_custom-css' ) ) ) );
158
- // Print CSS if exists
159
- if ( $custom_css ) echo "\n\n<!-- Shortcodes Ultimate custom CSS - begin -->\n<style type='text/css'>\n" . stripslashes( str_replace( array( '%theme_url%', '%home_url%', '%plugin_url%' ), array( trailingslashit( get_stylesheet_directory_uri() ), trailingslashit( get_option( 'home' ) ), trailingslashit( plugins_url( '', SU_PLUGIN_FILE ) ) ), $custom_css ) ) . "\n</style>\n<!-- Shortcodes Ultimate custom CSS - end -->\n\n";
160
// Hook
161
do_action( 'su/assets/custom_css/after' );
162
}
163
164
/**
153
* Print custom CSS
154
*/
155
public static function custom_css() {
156
+
157
// Get custom CSS and apply filters to it
158
+ $custom_css = apply_filters( 'su/assets/custom_css', get_option( 'su_option_custom-css' ) );
159
+
160
+ if ( empty( $custom_css ) ) {
161
+ return;
162
+ }
163
+
164
+ $template = '%1$s<!-- %2$s - %3$s -->%1$s<style type="text/css">%1$s%5$s%1$s</style>%1$s<!-- %2$s - %4$s -->%1$s';
165
+ $template = apply_filters( 'su/assets/custom_css/template', $template );
166
+
167
+ $custom_css = str_replace(
168
+ array( '%theme_url%', '%home_url%', '%plugin_url%' ),
169
+ array(
170
+ trailingslashit( get_stylesheet_directory_uri() ),
171
+ trailingslashit( get_option( 'home' ) ),
172
+ trailingslashit( plugins_url( '', SU_PLUGIN_FILE ) ),
173
+ ),
174
+ $custom_css
175
+ );
176
+
177
+ printf(
178
+ $template,
179
+ PHP_EOL,
180
+ 'Shortcodes Ultimate custom CSS',
181
+ 'start',
182
+ 'end',
183
+ strip_tags( $custom_css )
184
+ );
185
+
186
// Hook
187
do_action( 'su/assets/custom_css/after' );
188
+
189
}
190
191
/**
inc/core/data.php CHANGED
@@ -821,6 +821,11 @@ class Su_Data {
821
'name' => __( 'Title attribute', 'shortcodes-ultimate' ),
822
'desc' => __( 'Here you can add value for the title attribute', 'shortcodes-ultimate' )
823
),
824
'class' => array(
825
'type' => 'extra_css_class',
826
'name' => __( 'Extra CSS class', 'shortcodes-ultimate' ),
@@ -2791,7 +2796,7 @@ class Su_Data {
2791
'filter' => array(
2792
'default' => '',
2793
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2794
- 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2795
)
2796
),
2797
'desc' => __( 'Post meta', 'shortcodes-ultimate' ),
@@ -2844,7 +2849,7 @@ class Su_Data {
2844
'filter' => array(
2845
'default' => '',
2846
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2847
- 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2848
)
2849
),
2850
'desc' => __( 'User data', 'shortcodes-ultimate' ),
@@ -2908,7 +2913,7 @@ class Su_Data {
2908
'filter' => array(
2909
'default' => '',
2910
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2911
- 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2912
)
2913
),
2914
'desc' => __( 'Post data', 'shortcodes-ultimate' ),
821
'name' => __( 'Title attribute', 'shortcodes-ultimate' ),
822
'desc' => __( 'Here you can add value for the title attribute', 'shortcodes-ultimate' )
823
),
824
+ 'id' => array(
825
+ 'default' => '',
826
+ 'name' => __( 'Button ID', 'shortcodes-ultimate' ),
827
+ 'desc' => __( 'Custom value for the ID attribute', 'shortcodes-ultimate' )
828
+ ),
829
'class' => array(
830
'type' => 'extra_css_class',
831
'name' => __( 'Extra CSS class', 'shortcodes-ultimate' ),
2796
'filter' => array(
2797
'default' => '',
2798
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2799
+ 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Name of your function must include word <b>filter</b>. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2800
)
2801
),
2802
'desc' => __( 'Post meta', 'shortcodes-ultimate' ),
2849
'filter' => array(
2850
'default' => '',
2851
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2852
+ 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Name of your function must include word <b>filter</b>. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2853
)
2854
),
2855
'desc' => __( 'User data', 'shortcodes-ultimate' ),
2913
'filter' => array(
2914
'default' => '',
2915
'name' => __( 'Filter', 'shortcodes-ultimate' ),
2916
+ 'desc' => __( 'You can apply custom filter to the retrieved value. Enter here function name. Your function must accept one argument and return modified value. Name of your function must include word <b>filter</b>. Example function: ', 'shortcodes-ultimate' ) . "<br /><pre><code style='display:block;padding:5px'>function my_custom_filter( \$value ) {\n\treturn 'Value is: ' . \$value;\n}</code></pre>"
2917
)
2918
),
2919
'desc' => __( 'Post data', 'shortcodes-ultimate' ),
inc/core/shortcodes.php CHANGED
@@ -316,6 +316,7 @@ class Su_Shortcodes {
316
'onclick' => '',
317
'rel' => '',
318
'title' => '',
319
'class' => ''
320
), $atts, 'button' );
321
@@ -437,8 +438,10 @@ class Su_Shortcodes {
437
$atts['rel'] = ( $atts['rel'] ) ? ' rel="' . $atts['rel'] . '"' : '';
438
// Prepare title attribute
439
$atts['title'] = ( $atts['title'] ) ? ' title="' . $atts['title'] . '"' : '';
440
su_query_asset( 'css', 'su-content-shortcodes' );
441
- return $before . '<a href="' . su_scattr( $atts['url'] ) . '" class="' . implode( $classes, ' ' ) . '" style="' . implode( $a_css, ';' ) . '" target="_' . $atts['target'] . '"' . $atts['onclick'] . $atts['rel'] . $atts['title'] . '><span style="' . implode( $span_css, ';' ) . '">' . do_shortcode( stripcslashes( $content ) ) . $desc . '</span></a>' . $after;
442
}
443
444
public static function service( $atts = null, $content = null ) {
@@ -1404,7 +1407,13 @@ class Su_Shortcodes {
1404
// Set default value if meta is empty
1405
if ( !$meta ) $meta = $atts['default'];
1406
// Apply cutom filter
1407
- if ( $atts['filter'] && function_exists( $atts['filter'] ) ) $meta = call_user_func( $atts['filter'], $meta );
1408
// Return result
1409
return ( $meta ) ? $atts['before'] . $meta . $atts['after'] : '';
1410
}
@@ -1429,7 +1438,13 @@ class Su_Shortcodes {
1429
// Get user data if user was found
1430
$user = ( $user && isset( $user->data->{$atts['field']} ) ) ? $user->data->{$atts['field']} : $atts['default'];
1431
// Apply cutom filter
1432
- if ( $atts['filter'] && function_exists( $atts['filter'] ) ) $user = call_user_func( $atts['filter'], $user );
1433
// Return result
1434
return ( $user ) ? $atts['before'] . $user . $atts['after'] : '';
1435
}
@@ -1452,7 +1467,13 @@ class Su_Shortcodes {
1452
// Set default value if meta is empty
1453
$post = ( empty( $post ) || empty( $post->{$atts['field']} ) ) ? $atts['default'] : $post->{$atts['field']};
1454
// Apply cutom filter
1455
- if ( $atts['filter'] && function_exists( $atts['filter'] ) ) $post = call_user_func( $atts['filter'], $post );
1456
// Return result
1457
return ( $post ) ? $atts['before'] . $post . $atts['after'] : '';
1458
}
316
'onclick' => '',
317
'rel' => '',
318
'title' => '',
319
+ 'id' => '',
320
'class' => ''
321
), $atts, 'button' );
322
438
$atts['rel'] = ( $atts['rel'] ) ? ' rel="' . $atts['rel'] . '"' : '';
439
// Prepare title attribute
440
$atts['title'] = ( $atts['title'] ) ? ' title="' . $atts['title'] . '"' : '';
441
+ // Add ID attribute
442
+ $atts['id'] = ! empty( $atts['id'] ) ? sprintf( ' id="%s"', esc_attr( $atts['id'] ) ) : '';
443
su_query_asset( 'css', 'su-content-shortcodes' );
444
+ return $before . '<a href="' . su_scattr( $atts['url'] ) . '" class="' . implode( $classes, ' ' ) . '" style="' . implode( $a_css, ';' ) . '" target="_' . $atts['target'] . '"' . $atts['onclick'] . $atts['rel'] . $atts['title'] . $atts['id'] . '><span style="' . implode( $span_css, ';' ) . '">' . do_shortcode( stripcslashes( $content ) ) . $desc . '</span></a>' . $after;
445
}
446
447
public static function service( $atts = null, $content = null ) {
1407
// Set default value if meta is empty
1408
if ( !$meta ) $meta = $atts['default'];
1409
// Apply cutom filter
1410
+ if (
1411
+ $atts['filter'] &&
1412
+ Su_Tools::is_valid_filter( $atts['filter'] ) &&
1413
+ function_exists( $atts['filter'] )
1414
+ ) {
1415
+ $meta = call_user_func( $atts['filter'], $meta );
1416
+ }
1417
// Return result
1418
return ( $meta ) ? $atts['before'] . $meta . $atts['after'] : '';
1419
}
1438
// Get user data if user was found
1439
$user = ( $user && isset( $user->data->{$atts['field']} ) ) ? $user->data->{$atts['field']} : $atts['default'];
1440
// Apply cutom filter
1441
+ if (
1442
+ $atts['filter'] &&
1443
+ Su_Tools::is_valid_filter( $atts['filter'] ) &&
1444
+ function_exists( $atts['filter'] )
1445
+ ) {
1446
+ $user = call_user_func( $atts['filter'], $user );
1447
+ }
1448
// Return result
1449
return ( $user ) ? $atts['before'] . $user . $atts['after'] : '';
1450
}
1467
// Set default value if meta is empty
1468
$post = ( empty( $post ) || empty( $post->{$atts['field']} ) ) ? $atts['default'] : $post->{$atts['field']};
1469
// Apply cutom filter
1470
+ if (
1471
+ $atts['filter'] &&
1472
+ Su_Tools::is_valid_filter( $atts['filter'] ) &&
1473
+ function_exists( $atts['filter'] )
1474
+ ) {
1475
+ $post = call_user_func( $atts['filter'], $post );
1476
+ }
1477
// Return result
1478
return ( $post ) ? $atts['before'] . $post . $atts['after'] : '';
1479
}
inc/core/tools.php CHANGED
@@ -586,6 +586,10 @@ class Su_Tools {
586
add_filter( 'attachment_fields_to_save', array( __CLASS__, 'slide_link_save' ), null, 2 );
587
}
588
589
public static function select( $args ) {
590
$args = wp_parse_args( $args, array(
591
'id' => '',
@@ -720,11 +724,12 @@ class Su_Tools {
720
$query['post_type'] = 'any';
721
}
722
// Query posts
723
$query = new WP_Query( $query );
724
// Loop through posts
725
if ( is_array( $query->posts ) ) foreach ( $query->posts as $post ) {
726
- // Get post thumbnail ID
727
- $thumb = ( $args['source']['type'] === 'media' ) ? $post->ID : get_post_thumbnail_id( $post->ID );
728
// Thumbnail isn't set, go to next post
729
if ( !is_numeric( $thumb ) ) continue;
730
$slide = array(
586
add_filter( 'attachment_fields_to_save', array( __CLASS__, 'slide_link_save' ), null, 2 );
587
}
588
589
+ public static function is_valid_filter( $filter ) {
590
+ return is_string( $filter ) && strpos( $filter, 'filter' ) !== false;
591
+ }
592
+
593
public static function select( $args ) {
594
$args = wp_parse_args( $args, array(
595
'id' => '',
724
$query['post_type'] = 'any';
725
}
726
// Query posts
727
+ $query = apply_filters( 'su/slides_query', $query, $args );
728
$query = new WP_Query( $query );
729
// Loop through posts
730
if ( is_array( $query->posts ) ) foreach ( $query->posts as $post ) {
731
+ // Get attachment ID
732
+ $thumb = ( $args['source']['type'] === 'media' || $post->post_type === 'attachment' ) ? $post->ID : get_post_thumbnail_id( $post->ID );
733
// Thumbnail isn't set, go to next post
734
if ( !is_numeric( $thumb ) ) continue;
735
$slide = array(
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
=== Shortcodes Ultimate ===
2
Contributors: gn_themes
3
License: GPLv3
4
- Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMA2VA7JDXWDY
5
Tags: shortcode, toggle, columns, button, slider, video, map, visual, responsive, shortcodes, youtube, vimeo, audio, mp3, tabs, jquery, box, accordion, toggle, pullquote, list, image, gallery, navigation, permalink, feed, rss, members, membership, guests, carousel, icons, rtl, multilingual
6
Requires at least: 3.5
7
Tested up to: 4.8
@@ -19,53 +19,38 @@ A comprehensive collection of visual components for your site
19
* 1-click shortcode insertion with live preview
20
* Works with any theme
21
* Modern responsive design
22
* Custom CSS editor
23
* Custom widget
24
- * Translated into 8 languages
25
* RTL support
26
* Powerful API
27
28
- = Want more? Check out premium add-ons! =
29
* [Extra Shortcodes](https://getshortcodes.com/add-ons/extra-shortcodes/) - 15+ additional shortcodes
30
* [Additional Skins](https://getshortcodes.com/add-ons/additional-skins/) - 60+ additional skins for plugin shortcodes
31
* [Shortcode Creator](https://getshortcodes.com/add-ons/shortcode-creator/) - allows you to create your own custom shortcodes
32
* __[Add-ons Bundle](https://getshortcodes.com/add-ons/add-ons-bundle/)__ - All-in-one!
33
34
- = Reviews by professionals =
35
- * [40+ Reasons Shortcodes Ultimate Is A Must Have Plugin](http://www.the-best-web-hosting-service.com/blog/2014/01/ultimateshortcodesreview/)
36
- * [Show Me the Shortcode](http://thewpchick.com/show-shortcode/) + Video
37
- * [Shortcodes Ultimate: Ultimatize your written content](http://wisdmlabs.com/blog/how-to-style-wordpress-themes-with-shortcodes-ultimate/)
38
- * [Shortcodes Ultimate Plugin Review](http://kevindankowebdesign.com/shortcodes-ultimate-plugin-review/)
39
- * [Add 40+ New Layout Features To WordPress with Shortcodes Ultimate](http://www.makeuseof.com/tag/add-40-new-layout-features-wordpress-shortcodes-ultimate/)
40
- * [Shortcodes Ultimate – Free Shortcode Plugin For WordPress](http://www.wordpress-masterclass.com/shortcodes-ultimate-free-shortcode-plugin-for-wordpress/)
41
- * (Video) [Supercharge WordPress With A Mega Pack Of Shortcodes!](https://www.youtube.com/watch?v=h5hlJb0mSSY)
42
- * (Video) [Shortcodes Ultimate Tutorial](http://www.youtube.com/watch?v=IjmaXz-b55I)
43
- * (Video) [How to use special widget](http://www.youtube.com/watch?v=YU3Zu6C5ZfA)
44
- * (Video) [How to create image gallery](http://www.youtube.com/watch?v=kCWyO2F7jTw)
45
- * (RU) [Обзор плагина Shortcodes Ultimate](http://rad-dom.ru/shortcodes-ultimate/)
46
- * (RU) [Shortcodes Ultimate — плагин неограниченных возможностей](http://altacademic.ru/shortcodes-ultimate/)
47
- * (RU) [Шорткоды Wordpress](http://somemoreinfo.ru/shortkody-wordpress-ot-anoxina/)
48
-
49
= Thanks to these great guys for contribution =
50
* Dmitry Semenov - [Magnific Popup jQuery plugin](http://dimsemenov.com/plugins/magnific-popup/)
51
* Craig Thompson - [qTip jQuery plugin](http://qtip2.com/)
52
* Vladimir Kharlampidi - [Swiper jQuery plugin](http://www.idangero.us/sliders/swiper/)
53
* Dave Gandy - [Font Awesome](http://fortawesome.github.io/Font-Awesome/)
54
* James Smith - [Simple Slider jQuery plugin](http://loopj.com/jquery-simple-slider/)
55
-
56
- = Translators =
57
- * pt_br: [Ibidem Translations](http://www.ibidem-translations.com/)
58
- * fr_fr: [Nicolas Leclerc](http://etic-studio.fr/)
59
- * el_gr: [Kleanthis Manolopoulos](mailto:akis_manolopoulos_at_hotmail_dot_com)
60
- * sk_sk: [Patrik Žec (PATWIST)](http://patwist.com/)
61
- * cs_cz: [Punc00](http://nuze.cz/)
62
- * sv_se: [Javier Marcilla](http://ninjaseo.es/)
63
64
== Installation ==
65
66
Unzip plugin file and upload "shortcodes-ultimate" folder under your "/wp-content/plugins/" directory.
67
68
- Resulted names will be:
69
"/wp-content/plugins/shortcodes-ultimate/**"
70
71
Activate the plugin at "Dashboard – Plugins" administration page.
@@ -75,17 +60,17 @@ Activate the plugin at "Dashboard – Plugins" administration page.
75
76
== Screenshots ==
77
78
- 1. Insert Shortcode button added above the post editor
79
- 2. Insert Shortcode window
80
- 3. Variations of [button] shortcode
81
- 4. Tabs, spoilers, quotes/testimonials, boxes, notes
82
- 5. Image slider, carousel and custom gallery
83
84
85
== Frequently Asked Questions ==
86
87
= How this plugin works =
88
- [How Shortcodes Ultimate plugin works](http://docs.getshortcodes.com/article/36-shortcodes-ultimate)
89
90
= Shortcodes do not work. Why? =
91
The most common reasons of this issue are listed [here](http://docs.getshortcodes.com/article/41-shortcodes-do-not-work).
@@ -120,6 +105,20 @@ For help with premium add-ons, please [open new support ticket](https://getshort
120
121
== Changelog ==
122
123
= 5.0.0 =
124
* Read [this blog post](https://vanokhin.com/whats-new-in-shortcodes-ultimate-5/) to learn more about update
125
* New project website [getshortcodes.com](https://getshortcodes.com/)
1
=== Shortcodes Ultimate ===
2
Contributors: gn_themes
3
License: GPLv3
4
+ Donate link: https://paypal.me/anovladimir
5
Tags: shortcode, toggle, columns, button, slider, video, map, visual, responsive, shortcodes, youtube, vimeo, audio, mp3, tabs, jquery, box, accordion, toggle, pullquote, list, image, gallery, navigation, permalink, feed, rss, members, membership, guests, carousel, icons, rtl, multilingual
6
Requires at least: 3.5
7
Tested up to: 4.8
19
* 1-click shortcode insertion with live preview
20
* Works with any theme
21
* Modern responsive design
22
+ * [Comprehensive documentation](http://docs.getshortcodes.com/)
23
* Custom CSS editor
24
* Custom widget
25
+ * Translated into 9 languages
26
* RTL support
27
* Powerful API
28
29
+ = Check out premium add-ons! =
30
* [Extra Shortcodes](https://getshortcodes.com/add-ons/extra-shortcodes/) - 15+ additional shortcodes
31
* [Additional Skins](https://getshortcodes.com/add-ons/additional-skins/) - 60+ additional skins for plugin shortcodes
32
* [Shortcode Creator](https://getshortcodes.com/add-ons/shortcode-creator/) - allows you to create your own custom shortcodes
33
* __[Add-ons Bundle](https://getshortcodes.com/add-ons/add-ons-bundle/)__ - All-in-one!
34
35
= Thanks to these great guys for contribution =
36
+ * [Detailed reviews by advanced users](http://docs.getshortcodes.com/article/84-external-resources)
37
* Dmitry Semenov - [Magnific Popup jQuery plugin](http://dimsemenov.com/plugins/magnific-popup/)
38
* Craig Thompson - [qTip jQuery plugin](http://qtip2.com/)
39
* Vladimir Kharlampidi - [Swiper jQuery plugin](http://www.idangero.us/sliders/swiper/)
40
* Dave Gandy - [Font Awesome](http://fortawesome.github.io/Font-Awesome/)
41
* James Smith - [Simple Slider jQuery plugin](http://loopj.com/jquery-simple-slider/)
42
+ * pt_br locale: [Ibidem Translations](http://www.ibidem-translations.com/)
43
+ * fr_fr locale: [Nicolas Leclerc](http://etic-studio.fr/)
44
+ * el_gr locale: [Kleanthis Manolopoulos](mailto:akis_manolopoulos_at_hotmail_dot_com)
45
+ * sk_sk locale: [Patrik Žec (PATWIST)](http://patwist.com/)
46
+ * cs_cz locale: [Punc00](http://nuze.cz/)
47
+ * sv_se locale: [Javier Marcilla](http://ninjaseo.es/)
48
49
== Installation ==
50
51
Unzip plugin file and upload "shortcodes-ultimate" folder under your "/wp-content/plugins/" directory.
52
53
+ Resulted plugin path should be:
54
"/wp-content/plugins/shortcodes-ultimate/**"
55
56
Activate the plugin at "Dashboard – Plugins" administration page.
60
61
== Screenshots ==
62
63
+ 1. Insert Shortcode button added above the editor
64
+ 2. Shortcode insertion window
65
+ 3. Shortcode settings
66
+ 4. Shortcodes: button, tabs, box, carousel
67
+ 5. Shortcodes: spoiler, service, list, columns, note
68
69
70
== Frequently Asked Questions ==
71
72
= How this plugin works =
73
+ [How Shortcodes Ultimate plugin works](http://docs.getshortcodes.com/article/36-shortcodes-ultimate).
74
75
= Shortcodes do not work. Why? =
76
The most common reasons of this issue are listed [here](http://docs.getshortcodes.com/article/41-shortcodes-do-not-work).
105
106
== Changelog ==
107
108
+ = 5.0.2 =
109
+ * Fixed: an issue where RTL stylesheet won't displayed if custom CSS field is empty
110
+
111
+ = 5.0.1 =
112
+ * Fixed: serious security vulnerability, which allows attacker to run any code using filter in meta, post, or user shortcodes. Thanks to Robert L Mathews.
113
+ * Fixed: changed admin menu position (it was replacing 'Settings' menu on some installations)
114
+ * Fixed: shortcodes prefix field now accepts special characters
115
+ * Fixed: old bug when unwanted code parts was added with shortcode
116
+ * Fixed: bug, where backslashes were removed from custom CSS code
117
+ * Added: new attribute 'ID' for [button] shortcode
118
+ * Added: new filter 'su/slides_query', which can be used to modify posts query for slider, carousel and custom_gallery shortcodes
119
+ * Added: new filter 'su/assets/custom_css/template' to filter custom css output
120
+ * Minor fixes
121
+
122
= 5.0.0 =
123
* Read [this blog post](https://vanokhin.com/whats-new-in-shortcodes-ultimate-5/) to learn more about update
124
* New project website [getshortcodes.com](https://getshortcodes.com/)
shortcodes-ultimate.php CHANGED
@@ -2,7 +2,7 @@
2
/**
3
* Plugin Name: Shortcodes Ultimate
4
* Plugin URI: http://getshortcodes.com/
5
- * Version: 5.0.0
6
* Author: Vladimir Anokhin
7
* Author URI: https://vanokhin.com/
8
* Description: A comprehensive collection of visual components for WordPress
@@ -15,7 +15,7 @@
15
* Define plugin constants.
16
*/
17
define( 'SU_PLUGIN_FILE', __FILE__ );
18
- define( 'SU_PLUGIN_VERSION', '5.0.0' );
19
define( 'SU_ENABLE_CACHE', false );
20
21
/**
2
/**
3
* Plugin Name: Shortcodes Ultimate
4
* Plugin URI: http://getshortcodes.com/
5
+ * Version: 5.0.1
6
* Author: Vladimir Anokhin
7
* Author URI: https://vanokhin.com/
8
* Description: A comprehensive collection of visual components for WordPress
15
* Define plugin constants.
16
*/
17
define( 'SU_PLUGIN_FILE', __FILE__ );
18
+ define( 'SU_PLUGIN_VERSION', '5.0.1' );
19
define( 'SU_ENABLE_CACHE', false );
20
21
/**