Version Description
- Security update (reported by Vulnerability Lab)
- Some small changes
Download this release
Release Info
| Developer | freelancephp |
| Plugin | |
| Version | 1.81 |
| Comparing to | |
| See all releases | |
Code changes from version 1.80 to 1.81
includes/class-admin-external-links.php
CHANGED
|
@@ -260,17 +260,17 @@ style;
|
|
| 260 |
</tr>
|
| 261 |
<tr>
|
| 262 |
<th style="width:250px;"><?php $this->_e( 'Make subdomains internal' ) ?>
|
| 263 |
-
<?php echo $this->tooltip_help( '
|
| 264 |
<td>
|
| 265 |
<label><?php echo $this->form->checkbox( 'ignore_subdomains', 1 ); ?>
|
| 266 |
-
<span><?php $this->_e( '
|
| 267 |
</td>
|
| 268 |
</tr>
|
| 269 |
<tr>
|
| 270 |
<th><?php $this->_e( 'Ignore links with URL\'s containing...' ) ?>
|
| 271 |
<?php echo $this->tooltip_help( 'This plugin will completely ignore links that contain one of the given texts in the URL. Use enter to seperate each text. This check is not case sensitive.' ) ?></th>
|
| 272 |
<td><label><?php echo $this->form->textarea( 'ignore' ); ?>
|
| 273 |
-
<span class="description"><?php _e( 'Seperate each by an enter. No wildcards nescessary, f.e. <code>wordpress.org</code> will be
|
| 274 |
</td>
|
| 275 |
</tr>
|
| 276 |
<?php
|
| 260 |
</tr>
|
| 261 |
<tr>
|
| 262 |
<th style="width:250px;"><?php $this->_e( 'Make subdomains internal' ) ?>
|
| 263 |
+
<?php echo $this->tooltip_help( 'Treat all links to the site\'s domain and subdomains as internal links.' ) ?></th>
|
| 264 |
<td>
|
| 265 |
<label><?php echo $this->form->checkbox( 'ignore_subdomains', 1 ); ?>
|
| 266 |
+
<span><?php $this->_e( 'Treat all links to the site\'s domain and subdomains as internal links' ) ?></span></label>
|
| 267 |
</td>
|
| 268 |
</tr>
|
| 269 |
<tr>
|
| 270 |
<th><?php $this->_e( 'Ignore links with URL\'s containing...' ) ?>
|
| 271 |
<?php echo $this->tooltip_help( 'This plugin will completely ignore links that contain one of the given texts in the URL. Use enter to seperate each text. This check is not case sensitive.' ) ?></th>
|
| 272 |
<td><label><?php echo $this->form->textarea( 'ignore' ); ?>
|
| 273 |
+
<span class="description"><?php _e( 'Seperate each by an enter. No wildcards nescessary, f.e. <code>wordpress.org</code> will be treaded as <code>*wordpress.org*</code>' ) ?></span></label>
|
| 274 |
</td>
|
| 275 |
</tr>
|
| 276 |
<?php
|
includes/class-wp-external-links.php
CHANGED
|
@@ -158,7 +158,7 @@ final class WP_External_Links {
|
|
| 158 |
?>
|
| 159 |
<style type="text/css" media="screen">
|
| 160 |
/* WP External Links Plugin */
|
| 161 |
-
.ext-icon-<?php echo $icon ?> { background:url(<?php echo plugins_url('/images/ext-icons/ext-icon-' . $icon . '.png', WP_EXTERNAL_LINKS_FILE) ?>) no-repeat 100% 50%; padding-right:<?php echo $padding ?>px; }
|
| 162 |
</style>
|
| 163 |
<?php
|
| 164 |
}
|
|
@@ -403,7 +403,7 @@ final class WP_External_Links {
|
|
| 403 |
}
|
| 404 |
|
| 405 |
// is an internal link?
|
| 406 |
-
// rel=external will be
|
| 407 |
$is_external = $this->is_external( $href );
|
| 408 |
$has_rel_external = (strpos( $rel, 'external' ) !== FALSE);
|
| 409 |
|
|
@@ -442,7 +442,7 @@ final class WP_External_Links {
|
|
| 442 |
// set title
|
| 443 |
$title_format = $this->get_opt( 'title' );
|
| 444 |
$title = ( isset( $attrs[ 'title' ] ) ) ? $attrs[ 'title' ] : '';
|
| 445 |
-
$attrs[ 'title' ] = str_replace( '%title%', $title, $title_format );
|
| 446 |
|
| 447 |
// set user-defined class
|
| 448 |
$class = $this->get_opt( 'class_name' );
|
|
@@ -471,10 +471,10 @@ final class WP_External_Links {
|
|
| 471 |
} elseif ($target && $target !== '_none') {
|
| 472 |
if ($this->get_opt( 'use_js' )) {
|
| 473 |
// add data-attr for javascript
|
| 474 |
-
$attrs['data-wpel-target'] = $target;
|
| 475 |
} else {
|
| 476 |
// set target value
|
| 477 |
-
$attrs[ 'target' ] = $target;
|
| 478 |
}
|
| 479 |
}
|
| 480 |
|
|
@@ -535,7 +535,7 @@ final class WP_External_Links {
|
|
| 535 |
if ( empty( $value ) AND $default === NULL ) {
|
| 536 |
unset( $attrs[ $attr_name ] );
|
| 537 |
} else {
|
| 538 |
-
$attrs[ $attr_name ] = $value;
|
| 539 |
}
|
| 540 |
|
| 541 |
return $value;
|
| 158 |
?>
|
| 159 |
<style type="text/css" media="screen">
|
| 160 |
/* WP External Links Plugin */
|
| 161 |
+
.ext-icon-<?php echo esc_html( $icon ) ?> { background:url(<?php echo plugins_url('/images/ext-icons/ext-icon-' . esc_html( $icon ) . '.png', WP_EXTERNAL_LINKS_FILE) ?>) no-repeat 100% 50%; padding-right:<?php echo $padding ?>px; };
|
| 162 |
</style>
|
| 163 |
<?php
|
| 164 |
}
|
| 403 |
}
|
| 404 |
|
| 405 |
// is an internal link?
|
| 406 |
+
// rel=external will be treaded as external link
|
| 407 |
$is_external = $this->is_external( $href );
|
| 408 |
$has_rel_external = (strpos( $rel, 'external' ) !== FALSE);
|
| 409 |
|
| 442 |
// set title
|
| 443 |
$title_format = $this->get_opt( 'title' );
|
| 444 |
$title = ( isset( $attrs[ 'title' ] ) ) ? $attrs[ 'title' ] : '';
|
| 445 |
+
$attrs[ 'title' ] = str_replace( '%title%', $title, esc_attr( $title_format ) );
|
| 446 |
|
| 447 |
// set user-defined class
|
| 448 |
$class = $this->get_opt( 'class_name' );
|
| 471 |
} elseif ($target && $target !== '_none') {
|
| 472 |
if ($this->get_opt( 'use_js' )) {
|
| 473 |
// add data-attr for javascript
|
| 474 |
+
$attrs['data-wpel-target'] = esc_attr( $target );
|
| 475 |
} else {
|
| 476 |
// set target value
|
| 477 |
+
$attrs[ 'target' ] = esc_attr( $target );
|
| 478 |
}
|
| 479 |
}
|
| 480 |
|
| 535 |
if ( empty( $value ) AND $default === NULL ) {
|
| 536 |
unset( $attrs[ $attr_name ] );
|
| 537 |
} else {
|
| 538 |
+
$attrs[ $attr_name ] = esc_attr( $value );
|
| 539 |
}
|
| 540 |
|
| 541 |
return $value;
|
includes/wp-plugin-dev-classes/class-wp-option-forms.php
CHANGED
|
@@ -71,18 +71,32 @@ class WP_Option_Forms_01 {
|
|
| 71 |
public function call_wp_ajax() {
|
| 72 |
check_ajax_referer( 'wpof_update_options', 'wpof-nonce' );
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
$option_name = $_POST[ 'ajax_option_name' ];
|
| 75 |
-
$
|
| 76 |
|
| 77 |
if ( isset( $_POST[ $option_name ] ) )
|
| 78 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
|
| 80 |
-
|
| 81 |
-
$value = trim( $value );
|
| 82 |
|
| 83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
|
| 85 |
-
update_option( $option_name, $
|
| 86 |
|
| 87 |
die( '1' );
|
| 88 |
}
|
|
@@ -141,7 +155,7 @@ class WP_Option_Forms_01 {
|
|
| 141 |
if ( $ajaxSave ) {
|
| 142 |
$html .= wp_nonce_field( 'wpof_update_options', 'wpof-nonce', FALSE, FALSE );
|
| 143 |
$html .= '<input type="hidden" name="action" value="wpof_update_options" />';
|
| 144 |
-
$html .= '<input type="hidden" name="ajax_option_name" value="'. $this->current_option .'" />';
|
| 145 |
|
| 146 |
// instead of using settings_fields();
|
| 147 |
$html .= '<input type="hidden" name="option_page" value="' . esc_attr( $this->current_option ) . '" />';
|
|
@@ -220,7 +234,7 @@ class WP_Option_Forms_01 {
|
|
| 220 |
if ( ! key_exists( 'class', $attrs ) )
|
| 221 |
$attrs[ 'class' ] = 'large-text';
|
| 222 |
|
| 223 |
-
return '<textarea '. $this->attrs( $attrs, $key ) .'>'. $this->value( $key ) .'</textarea>';
|
| 224 |
}
|
| 225 |
|
| 226 |
/**
|
|
@@ -261,7 +275,7 @@ class WP_Option_Forms_01 {
|
|
| 261 |
|
| 262 |
foreach ( $options AS $value => $label ) {
|
| 263 |
$selected = ( $value == $this->value( $key ) ) ? ' selected="selected"' : '';
|
| 264 |
-
$html .= '<option value="'. $value .'"'. $selected .'>'. $label .'</option>';
|
| 265 |
}
|
| 266 |
|
| 267 |
$html .= '</select>';
|
|
@@ -341,14 +355,14 @@ class WP_Option_Forms_01 {
|
|
| 341 |
if ( $key !== NULL ) {
|
| 342 |
$str .= 'name="' . $this->field_name( $key ) .'" ';
|
| 343 |
if ( ! key_exists( 'id', $attrs ) )
|
| 344 |
-
$str .= 'id="' . $key .'" ';
|
| 345 |
}
|
| 346 |
|
| 347 |
if ( $value !== NULL )
|
| 348 |
-
$str .= 'value="' . $value .'" ';
|
| 349 |
|
| 350 |
foreach ( $attrs AS $attr => $value )
|
| 351 |
-
$str .= $attr .'="'. $value .'" ';
|
| 352 |
|
| 353 |
return $str;
|
| 354 |
}
|
| 71 |
public function call_wp_ajax() {
|
| 72 |
check_ajax_referer( 'wpof_update_options', 'wpof-nonce' );
|
| 73 |
|
| 74 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
| 75 |
+
die( '0' );
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
$option_name = $_POST[ 'ajax_option_name' ];
|
| 79 |
+
$values = NULL;
|
| 80 |
|
| 81 |
if ( isset( $_POST[ $option_name ] ) )
|
| 82 |
+
$values = $_POST[ $option_name ];
|
| 83 |
+
|
| 84 |
+
if ( ! is_array( $values ) ) {
|
| 85 |
+
die( '0' );
|
| 86 |
+
}
|
| 87 |
|
| 88 |
+
$values = stripslashes_deep( $values );
|
|
|
|
| 89 |
|
| 90 |
+
foreach ( $values as $key => $val ) {
|
| 91 |
+
if ( $key === 'ignore' ) {
|
| 92 |
+
// text area (don't remove line breaks)
|
| 93 |
+
$values[ $key ] = filter_var( $val, FILTER_SANITIZE_STRING );
|
| 94 |
+
} else {
|
| 95 |
+
$values[ $key ] = sanitize_text_field( $val );
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
|
| 99 |
+
update_option( $option_name, $values );
|
| 100 |
|
| 101 |
die( '1' );
|
| 102 |
}
|
| 155 |
if ( $ajaxSave ) {
|
| 156 |
$html .= wp_nonce_field( 'wpof_update_options', 'wpof-nonce', FALSE, FALSE );
|
| 157 |
$html .= '<input type="hidden" name="action" value="wpof_update_options" />';
|
| 158 |
+
$html .= '<input type="hidden" name="ajax_option_name" value="'. esc_attr( $this->current_option ) .'" />';
|
| 159 |
|
| 160 |
// instead of using settings_fields();
|
| 161 |
$html .= '<input type="hidden" name="option_page" value="' . esc_attr( $this->current_option ) . '" />';
|
| 234 |
if ( ! key_exists( 'class', $attrs ) )
|
| 235 |
$attrs[ 'class' ] = 'large-text';
|
| 236 |
|
| 237 |
+
return '<textarea '. $this->attrs( $attrs, $key ) .'>'. esc_textarea( $this->value( $key ) ) .'</textarea>';
|
| 238 |
}
|
| 239 |
|
| 240 |
/**
|
| 275 |
|
| 276 |
foreach ( $options AS $value => $label ) {
|
| 277 |
$selected = ( $value == $this->value( $key ) ) ? ' selected="selected"' : '';
|
| 278 |
+
$html .= '<option value="'. esc_attr( $value ) .'"'. $selected .'>'. $label .'</option>';
|
| 279 |
}
|
| 280 |
|
| 281 |
$html .= '</select>';
|
| 355 |
if ( $key !== NULL ) {
|
| 356 |
$str .= 'name="' . $this->field_name( $key ) .'" ';
|
| 357 |
if ( ! key_exists( 'id', $attrs ) )
|
| 358 |
+
$str .= 'id="' . esc_attr( $key ) .'" ';
|
| 359 |
}
|
| 360 |
|
| 361 |
if ( $value !== NULL )
|
| 362 |
+
$str .= 'value="' . esc_attr( $value ) .'" ';
|
| 363 |
|
| 364 |
foreach ( $attrs AS $attr => $value )
|
| 365 |
+
$str .= $attr .'="'. esc_attr( $value ) .'" ';
|
| 366 |
|
| 367 |
return $str;
|
| 368 |
}
|
readme.txt
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Contributors: freelancephp
|
| 3 |
Tags: links, external, icon, target, _blank, _new, _none, rel, nofollow, new window, new tab, javascript, xhtml, seo
|
| 4 |
Requires at least: 3.6.0
|
| 5 |
-
Tested up to: 4.2
|
| 6 |
-
Stable tag: 1.
|
| 7 |
|
| 8 |
Open external links in a new window or tab, adding "nofollow", set link icon, styling, SEO friendly options and more. Easy install and go.
|
| 9 |
|
|
@@ -217,6 +217,10 @@ See [FAQ](https://wordpress.org/plugins/wp-external-links/faq/) for more possibi
|
|
| 217 |
|
| 218 |
== Changelog ==
|
| 219 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 220 |
= 1.80 =
|
| 221 |
* Added filter hook wpel_external_link_attrs to change attributes before creating the link
|
| 222 |
* Added filter hook wpel_ignored_external_links
|
| 2 |
Contributors: freelancephp
|
| 3 |
Tags: links, external, icon, target, _blank, _new, _none, rel, nofollow, new window, new tab, javascript, xhtml, seo
|
| 4 |
Requires at least: 3.6.0
|
| 5 |
+
Tested up to: 4.5.2
|
| 6 |
+
Stable tag: 1.81
|
| 7 |
|
| 8 |
Open external links in a new window or tab, adding "nofollow", set link icon, styling, SEO friendly options and more. Easy install and go.
|
| 9 |
|
| 217 |
|
| 218 |
== Changelog ==
|
| 219 |
|
| 220 |
+
= 1.81 =
|
| 221 |
+
* Security update (reported by Vulnerability Lab)
|
| 222 |
+
* Some small changes
|
| 223 |
+
|
| 224 |
= 1.80 =
|
| 225 |
* Added filter hook wpel_external_link_attrs to change attributes before creating the link
|
| 226 |
* Added filter hook wpel_ignored_external_links
|
wp-external-links.php
CHANGED
|
@@ -4,14 +4,14 @@ Plugin Name: WP External Links
|
|
| 4 |
Plugin URI: http://www.freelancephp.net/wp-external-links-plugin
|
| 5 |
Description: Open external links in a new window/tab, add "external" / "nofollow" to rel-attribute, set icon, XHTML strict, SEO friendly...
|
| 6 |
Author: Victor Villaverde Laan
|
| 7 |
-
Version: 1.
|
| 8 |
Author URI: http://www.freelancephp.net
|
| 9 |
License: Dual licensed under the MIT and GPL licenses
|
| 10 |
*/
|
| 11 |
|
| 12 |
// constants
|
| 13 |
if (!defined('WP_EXTERNAL_LINKS_FILE')) { define('WP_EXTERNAL_LINKS_FILE', __FILE__); }
|
| 14 |
-
if (!defined('WP_EXTERNAL_LINKS_VERSION')) { define('WP_EXTERNAL_LINKS_VERSION', '1.
|
| 15 |
if (!defined('WP_EXTERNAL_LINKS_KEY')) { define('WP_EXTERNAL_LINKS_KEY', 'wp_external_links'); }
|
| 16 |
if (!defined('WP_EXTERNAL_LINKS_DOMAIN')) { define('WP_EXTERNAL_LINKS_DOMAIN', 'wp-external-links'); }
|
| 17 |
if (!defined('WP_EXTERNAL_LINKS_OPTIONS_NAME')) { define('WP_EXTERNAL_LINKS_OPTIONS_NAME', 'WP_External_Links_options'); }
|
|
@@ -34,6 +34,15 @@ if (version_compare($wp_version, '3.6', '>=') && version_compare(phpversion(), '
|
|
| 34 |
// create instance
|
| 35 |
$WP_External_Links = new WP_External_Links();
|
| 36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
// init test
|
| 38 |
if (class_exists('Test_WP_External_Links')) {
|
| 39 |
$Test_WP_External_Links = new Test_WP_External_Links;
|
| 4 |
Plugin URI: http://www.freelancephp.net/wp-external-links-plugin
|
| 5 |
Description: Open external links in a new window/tab, add "external" / "nofollow" to rel-attribute, set icon, XHTML strict, SEO friendly...
|
| 6 |
Author: Victor Villaverde Laan
|
| 7 |
+
Version: 1.81
|
| 8 |
Author URI: http://www.freelancephp.net
|
| 9 |
License: Dual licensed under the MIT and GPL licenses
|
| 10 |
*/
|
| 11 |
|
| 12 |
// constants
|
| 13 |
if (!defined('WP_EXTERNAL_LINKS_FILE')) { define('WP_EXTERNAL_LINKS_FILE', __FILE__); }
|
| 14 |
+
if (!defined('WP_EXTERNAL_LINKS_VERSION')) { define('WP_EXTERNAL_LINKS_VERSION', '1.81'); }
|
| 15 |
if (!defined('WP_EXTERNAL_LINKS_KEY')) { define('WP_EXTERNAL_LINKS_KEY', 'wp_external_links'); }
|
| 16 |
if (!defined('WP_EXTERNAL_LINKS_DOMAIN')) { define('WP_EXTERNAL_LINKS_DOMAIN', 'wp-external-links'); }
|
| 17 |
if (!defined('WP_EXTERNAL_LINKS_OPTIONS_NAME')) { define('WP_EXTERNAL_LINKS_OPTIONS_NAME', 'WP_External_Links_options'); }
|
| 34 |
// create instance
|
| 35 |
$WP_External_Links = new WP_External_Links();
|
| 36 |
|
| 37 |
+
// Warning for the next update to version 2.x
|
| 38 |
+
if (!function_exists('wpel_update_notice')) {
|
| 39 |
+
function wpel_update_notice()
|
| 40 |
+
{
|
| 41 |
+
echo '<p style="color:#f00; font-weight:bold;">ATTENTION: This update has some major changes. Please check the changelog first!</p>';
|
| 42 |
+
}
|
| 43 |
+
add_action('in_plugin_update_message-' . plugin_basename(__FILE__), 'wpel_update_notice');
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
// init test
|
| 47 |
if (class_exists('Test_WP_External_Links')) {
|
| 48 |
$Test_WP_External_Links = new Test_WP_External_Links;
|
