Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/modules/shortcod...
File: vimeo.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Vimeo Shortcode.
[2] Fix | Delete
*
[3] Fix | Delete
* Examples:
[4] Fix | Delete
* [vimeo 141358]
[5] Fix | Delete
* [vimeo http://vimeo.com/141358]
[6] Fix | Delete
* [vimeo 141358 h=500&w=350]
[7] Fix | Delete
* [vimeo 141358 h=500 w=350]
[8] Fix | Delete
* [vimeo id=141358 width=350 height=500]
[9] Fix | Delete
*
[10] Fix | Delete
* <iframe src="http://player.vimeo.com/video/18427511" width="400" height="225" frameborder="0"></iframe><p><a href="http://vimeo.com/18427511">Eskmo 'We Got More' (Official Video)</a> from <a href="http://vimeo.com/ninjatune">Ninja Tune</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
[11] Fix | Delete
*
[12] Fix | Delete
* @package automattic/jetpack
[13] Fix | Delete
*/
[14] Fix | Delete
[15] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[16] Fix | Delete
exit( 0 );
[17] Fix | Delete
}
[18] Fix | Delete
[19] Fix | Delete
/**
[20] Fix | Delete
* Extract Vimeo ID from shortcode.
[21] Fix | Delete
*
[22] Fix | Delete
* @param array $atts Shortcode attributes.
[23] Fix | Delete
*/
[24] Fix | Delete
function jetpack_shortcode_get_vimeo_id( $atts ) {
[25] Fix | Delete
if ( isset( $atts[0] ) ) {
[26] Fix | Delete
$atts[0] = trim( $atts[0], '=' );
[27] Fix | Delete
if ( is_numeric( $atts[0] ) ) {
[28] Fix | Delete
return (int) $atts[0];
[29] Fix | Delete
}
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* Extract Vimeo ID from the URL. For examples:
[33] Fix | Delete
* https://vimeo.com/12345
[34] Fix | Delete
* https://vimeo.com/289091934/cd1f466bcc
[35] Fix | Delete
* https://vimeo.com/album/2838732/video/6342264
[36] Fix | Delete
* https://vimeo.com/groups/758728/videos/897094040
[37] Fix | Delete
* https://vimeo.com/channels/staffpicks/123456789
[38] Fix | Delete
* https://vimeo.com/album/1234567/video/7654321
[39] Fix | Delete
* https://player.vimeo.com/video/18427511
[40] Fix | Delete
*/
[41] Fix | Delete
$pattern = '/(?:https?:\/\/)?vimeo\.com\/(?:groups\/\d+\/videos\/|album\/\d+\/video\/|video\/|channels\/[^\/]+\/videos\/|[^\/]+\/)?([0-9]+)(?:[^\'\"0-9<]|$)/i';
[42] Fix | Delete
$match = array();
[43] Fix | Delete
if ( preg_match( $pattern, $atts[0], $match ) ) {
[44] Fix | Delete
return (int) $match[1];
[45] Fix | Delete
}
[46] Fix | Delete
}
[47] Fix | Delete
[48] Fix | Delete
return 0;
[49] Fix | Delete
}
[50] Fix | Delete
[51] Fix | Delete
/**
[52] Fix | Delete
* Get video dimensions.
[53] Fix | Delete
*
[54] Fix | Delete
* @since 8.0.0
[55] Fix | Delete
*
[56] Fix | Delete
* @param array $attr The attributes of the shortcode.
[57] Fix | Delete
* @param array $old_attr Optional array of attributes from the old shortcode format.
[58] Fix | Delete
*
[59] Fix | Delete
* @return array Width and height.
[60] Fix | Delete
*/
[61] Fix | Delete
function jetpack_shortcode_get_vimeo_dimensions( $attr, $old_attr = array() ) {
[62] Fix | Delete
global $content_width;
[63] Fix | Delete
[64] Fix | Delete
$default_width = 600;
[65] Fix | Delete
$default_height = 338;
[66] Fix | Delete
$aspect_ratio = $default_height / $default_width;
[67] Fix | Delete
[68] Fix | Delete
/*
[69] Fix | Delete
* For width and height, we want to support both formats
[70] Fix | Delete
* that can be provided in the new shortcode format:
[71] Fix | Delete
* - for width: width or w
[72] Fix | Delete
* - for height: height or h
[73] Fix | Delete
*
[74] Fix | Delete
* For each variation, the full word takes priority.
[75] Fix | Delete
*
[76] Fix | Delete
* If no variation is set, we default to the default width and height values set above.
[77] Fix | Delete
*/
[78] Fix | Delete
if ( ! empty( $attr['width'] ) ) {
[79] Fix | Delete
$width = absint( $attr['width'] );
[80] Fix | Delete
} elseif ( ! empty( $attr['w'] ) ) {
[81] Fix | Delete
$width = absint( $attr['w'] );
[82] Fix | Delete
} else {
[83] Fix | Delete
$width = $default_width;
[84] Fix | Delete
}
[85] Fix | Delete
[86] Fix | Delete
if ( ! empty( $attr['height'] ) ) {
[87] Fix | Delete
$height = absint( $attr['height'] );
[88] Fix | Delete
} elseif ( ! empty( $attr['h'] ) ) {
[89] Fix | Delete
$height = absint( $attr['h'] );
[90] Fix | Delete
} else {
[91] Fix | Delete
$height = $default_height;
[92] Fix | Delete
}
[93] Fix | Delete
[94] Fix | Delete
/*
[95] Fix | Delete
* Support w and h argument as fallbacks in old shortcode format.
[96] Fix | Delete
*/
[97] Fix | Delete
if (
[98] Fix | Delete
$default_width === $width
[99] Fix | Delete
&& ! empty( $old_attr['w'] )
[100] Fix | Delete
) {
[101] Fix | Delete
$width = absint( $old_attr['w'] );
[102] Fix | Delete
[103] Fix | Delete
if (
[104] Fix | Delete
$default_width === $width
[105] Fix | Delete
&& empty( $old_attr['h'] )
[106] Fix | Delete
) {
[107] Fix | Delete
$height = round( $width * $aspect_ratio );
[108] Fix | Delete
}
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
if (
[112] Fix | Delete
$default_height === $height
[113] Fix | Delete
&& ! empty( $old_attr['h'] )
[114] Fix | Delete
) {
[115] Fix | Delete
$height = absint( $old_attr['h'] );
[116] Fix | Delete
[117] Fix | Delete
if ( empty( $old_attr['w'] ) ) {
[118] Fix | Delete
$width = round( $height * $aspect_ratio );
[119] Fix | Delete
}
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
/*
[123] Fix | Delete
* If we have a content width defined, let it be the new default.
[124] Fix | Delete
*/
[125] Fix | Delete
if (
[126] Fix | Delete
$default_width === $width
[127] Fix | Delete
&& ! empty( $content_width )
[128] Fix | Delete
) {
[129] Fix | Delete
$width = absint( $content_width );
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
/*
[133] Fix | Delete
* If we have a custom width, we need a custom height as well
[134] Fix | Delete
* to maintain aspect ratio.
[135] Fix | Delete
*/
[136] Fix | Delete
if (
[137] Fix | Delete
$default_width !== $width
[138] Fix | Delete
&& $default_height === $height
[139] Fix | Delete
) {
[140] Fix | Delete
$height = round( ( $width / 640 ) * 360 );
[141] Fix | Delete
}
[142] Fix | Delete
[143] Fix | Delete
/**
[144] Fix | Delete
* Filter the Vimeo player width.
[145] Fix | Delete
*
[146] Fix | Delete
* @module shortcodes
[147] Fix | Delete
*
[148] Fix | Delete
* @since 3.4.0
[149] Fix | Delete
*
[150] Fix | Delete
* @param int $width Width of the Vimeo player in pixels.
[151] Fix | Delete
*/
[152] Fix | Delete
$width = (int) apply_filters( 'vimeo_width', $width );
[153] Fix | Delete
[154] Fix | Delete
/**
[155] Fix | Delete
* Filter the Vimeo player height.
[156] Fix | Delete
*
[157] Fix | Delete
* @module shortcodes
[158] Fix | Delete
*
[159] Fix | Delete
* @since 3.4.0
[160] Fix | Delete
*
[161] Fix | Delete
* @param int $height Height of the Vimeo player in pixels.
[162] Fix | Delete
*/
[163] Fix | Delete
$height = (int) apply_filters( 'vimeo_height', $height );
[164] Fix | Delete
[165] Fix | Delete
return array( $width, $height );
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
/**
[169] Fix | Delete
* Convert a Vimeo shortcode into an embed code.
[170] Fix | Delete
*
[171] Fix | Delete
* @param array $atts An array of shortcode attributes.
[172] Fix | Delete
*
[173] Fix | Delete
* @return string The embed code for the Vimeo video.
[174] Fix | Delete
*/
[175] Fix | Delete
function vimeo_shortcode( $atts ) {
[176] Fix | Delete
$attr = array_map(
[177] Fix | Delete
'intval',
[178] Fix | Delete
shortcode_atts(
[179] Fix | Delete
array(
[180] Fix | Delete
'id' => 0,
[181] Fix | Delete
'width' => 0,
[182] Fix | Delete
'height' => 0,
[183] Fix | Delete
'autoplay' => 0,
[184] Fix | Delete
'loop' => 0,
[185] Fix | Delete
'w' => 0,
[186] Fix | Delete
'h' => 0,
[187] Fix | Delete
),
[188] Fix | Delete
$atts
[189] Fix | Delete
)
[190] Fix | Delete
);
[191] Fix | Delete
[192] Fix | Delete
if ( isset( $atts[0] ) ) {
[193] Fix | Delete
$attr['id'] = jetpack_shortcode_get_vimeo_id( $atts );
[194] Fix | Delete
}
[195] Fix | Delete
[196] Fix | Delete
if ( ! $attr['id'] ) {
[197] Fix | Delete
return '<!-- vimeo error: not a vimeo video -->';
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
// Handle old shortcode params such as h=500&w=350.
[201] Fix | Delete
$params = shortcode_new_to_old_params( $atts );
[202] Fix | Delete
$params = str_replace( array( '&amp;', '&#038;' ), '&', $params );
[203] Fix | Delete
parse_str( $params, $args );
[204] Fix | Delete
[205] Fix | Delete
list( $width, $height ) = jetpack_shortcode_get_vimeo_dimensions( $attr, $args );
[206] Fix | Delete
[207] Fix | Delete
$url = esc_url( 'https://player.vimeo.com/video/' . $attr['id'] );
[208] Fix | Delete
[209] Fix | Delete
// Handle autoplay and loop arguments.
[210] Fix | Delete
if (
[211] Fix | Delete
isset( $args['autoplay'] ) && '1' === $args['autoplay'] // Parsed from the embedded URL.
[212] Fix | Delete
|| $attr['autoplay'] // Parsed from shortcode arguments.
[213] Fix | Delete
|| in_array( 'autoplay', $atts, true ) // Catch the argument passed without a value.
[214] Fix | Delete
) {
[215] Fix | Delete
$url = add_query_arg( 'autoplay', 1, $url );
[216] Fix | Delete
}
[217] Fix | Delete
[218] Fix | Delete
if (
[219] Fix | Delete
isset( $args['loop'] ) && '1' === $args['loop'] // Parsed from the embedded URL.
[220] Fix | Delete
|| $attr['loop'] // Parsed from shortcode arguments.
[221] Fix | Delete
|| in_array( 'loop', $atts, true ) // Catch the argument passed without a value.
[222] Fix | Delete
) {
[223] Fix | Delete
$url = add_query_arg( 'loop', 1, $url );
[224] Fix | Delete
}
[225] Fix | Delete
[226] Fix | Delete
if (
[227] Fix | Delete
class_exists( 'Jetpack_AMP_Support' )
[228] Fix | Delete
&& Jetpack_AMP_Support::is_amp_request()
[229] Fix | Delete
) {
[230] Fix | Delete
$html = sprintf(
[231] Fix | Delete
'<amp-vimeo data-videoid="%1$s" layout="responsive" width="%2$d" height="%3$d"></amp-vimeo>',
[232] Fix | Delete
esc_attr( $attr['id'] ),
[233] Fix | Delete
absint( $width ),
[234] Fix | Delete
absint( $height )
[235] Fix | Delete
);
[236] Fix | Delete
} else {
[237] Fix | Delete
$html = sprintf(
[238] Fix | Delete
'<div class="embed-vimeo" style="text-align: center;"><iframe src="%1$s" width="%2$u" height="%3$u" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>',
[239] Fix | Delete
esc_url( $url ),
[240] Fix | Delete
esc_attr( $width ),
[241] Fix | Delete
esc_attr( $height )
[242] Fix | Delete
);
[243] Fix | Delete
}
[244] Fix | Delete
[245] Fix | Delete
/**
[246] Fix | Delete
* Filter the Vimeo player HTML.
[247] Fix | Delete
*
[248] Fix | Delete
* @module shortcodes
[249] Fix | Delete
*
[250] Fix | Delete
* @since 1.2.3
[251] Fix | Delete
*
[252] Fix | Delete
* @param string $html Embedded Vimeo player HTML.
[253] Fix | Delete
*/
[254] Fix | Delete
$html = apply_filters( 'video_embed_html', $html );
[255] Fix | Delete
[256] Fix | Delete
return $html;
[257] Fix | Delete
}
[258] Fix | Delete
add_shortcode( 'vimeo', 'vimeo_shortcode' );
[259] Fix | Delete
[260] Fix | Delete
/**
[261] Fix | Delete
* Callback to modify output of embedded Vimeo video using Jetpack's shortcode.
[262] Fix | Delete
*
[263] Fix | Delete
* @since 3.9
[264] Fix | Delete
* @deprecated since 13.8
[265] Fix | Delete
*
[266] Fix | Delete
* @param array $matches Regex partial matches against the URL passed.
[267] Fix | Delete
* @param array $attr Attributes received in embed response.
[268] Fix | Delete
* @param array $url Requested URL to be embedded.
[269] Fix | Delete
*
[270] Fix | Delete
* @return string Return output of Vimeo shortcode with the proper markup.
[271] Fix | Delete
*/
[272] Fix | Delete
function wpcom_vimeo_embed_url( $matches, $attr, $url ) {
[273] Fix | Delete
_deprecated_function( __FUNCTION__, 'jetpack-13.8' );
[274] Fix | Delete
$vimeo_info = array( $url );
[275] Fix | Delete
[276] Fix | Delete
// If we are able to extract a video ID, use it in the shortcode instead of the full URL.
[277] Fix | Delete
if ( ! empty( $matches['video_id'] ) ) {
[278] Fix | Delete
$vimeo_info = array( 'id' => $matches['video_id'] );
[279] Fix | Delete
}
[280] Fix | Delete
[281] Fix | Delete
return vimeo_shortcode( $vimeo_info );
[282] Fix | Delete
}
[283] Fix | Delete
[284] Fix | Delete
/**
[285] Fix | Delete
* For bare URLs on their own line of the form.
[286] Fix | Delete
*
[287] Fix | Delete
* Accepted formats:
[288] Fix | Delete
* https://vimeo.com/289091934/cd1f466bcc
[289] Fix | Delete
* https://vimeo.com/album/2838732/video/6342264
[290] Fix | Delete
* https://vimeo.com/6342264
[291] Fix | Delete
* http://player.vimeo.com/video/18427511
[292] Fix | Delete
*
[293] Fix | Delete
* @since 3.9
[294] Fix | Delete
* @deprecated since 13.8
[295] Fix | Delete
*
[296] Fix | Delete
* @uses wpcom_vimeo_embed_url
[297] Fix | Delete
*/
[298] Fix | Delete
function wpcom_vimeo_embed_url_init() {
[299] Fix | Delete
_deprecated_function( __FUNCTION__, 'jetpack-13.8' );
[300] Fix | Delete
wp_embed_register_handler( 'wpcom_vimeo_embed_url', '#https?://(?:[^/]+\.)?vimeo\.com/(?:album/(?<album_id>\d+)/)?(?:video/)?(?<video_id>\d+)(?:/.*)?$#i', 'wpcom_vimeo_embed_url' );
[301] Fix | Delete
}
[302] Fix | Delete
[303] Fix | Delete
/**
[304] Fix | Delete
* Transform a Vimeo embed iFrame into a Vimeo shortcode.
[305] Fix | Delete
*
[306] Fix | Delete
* @param string $content Post content.
[307] Fix | Delete
*/
[308] Fix | Delete
function vimeo_embed_to_shortcode( $content ) {
[309] Fix | Delete
if ( ! is_string( $content ) || false === stripos( $content, 'player.vimeo.com/video/' ) ) {
[310] Fix | Delete
return $content;
[311] Fix | Delete
}
[312] Fix | Delete
[313] Fix | Delete
$regexp = '!<iframe\s+src=[\'"](https?:)?//player\.vimeo\.com/video/(\d+)[\w=&;?]*[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
[314] Fix | Delete
$regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
[315] Fix | Delete
[316] Fix | Delete
foreach ( compact( 'regexp', 'regexp_ent' ) as $reg => $regexp ) {
[317] Fix | Delete
if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
[318] Fix | Delete
continue;
[319] Fix | Delete
}
[320] Fix | Delete
[321] Fix | Delete
foreach ( $matches as $match ) {
[322] Fix | Delete
$id = (int) $match[2];
[323] Fix | Delete
[324] Fix | Delete
$params = $match[3];
[325] Fix | Delete
[326] Fix | Delete
if ( 'regexp_ent' === $reg ) {
[327] Fix | Delete
$params = html_entity_decode( $params, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 );
[328] Fix | Delete
}
[329] Fix | Delete
[330] Fix | Delete
$params = wp_kses_hair( $params, array( 'http' ) );
[331] Fix | Delete
[332] Fix | Delete
$width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
[333] Fix | Delete
$height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
[334] Fix | Delete
[335] Fix | Delete
$wh = '';
[336] Fix | Delete
if ( $width && $height ) {
[337] Fix | Delete
$wh = ' w=' . $width . ' h=' . $height;
[338] Fix | Delete
}
[339] Fix | Delete
[340] Fix | Delete
$shortcode = '[vimeo ' . $id . $wh . ']';
[341] Fix | Delete
$content = str_replace( $match[0], $shortcode, $content );
[342] Fix | Delete
}
[343] Fix | Delete
}
[344] Fix | Delete
[345] Fix | Delete
return $content;
[346] Fix | Delete
}
[347] Fix | Delete
[348] Fix | Delete
if ( jetpack_shortcodes_should_hook_pre_kses() ) {
[349] Fix | Delete
add_filter( 'pre_kses', 'vimeo_embed_to_shortcode' );
[350] Fix | Delete
}
[351] Fix | Delete
[352] Fix | Delete
/**
[353] Fix | Delete
* Replaces shortcodes and plain-text URLs to Vimeo videos with Vimeo embeds.
[354] Fix | Delete
* Covers shortcode usage [vimeo 1234] | [vimeo https://vimeo.com/1234] | [vimeo http://vimeo.com/1234]
[355] Fix | Delete
* Or plain text URLs https://vimeo.com/1234 | vimeo.com/1234 | //vimeo.com/1234
[356] Fix | Delete
* Links are left intact.
[357] Fix | Delete
*
[358] Fix | Delete
* @since 3.7.0
[359] Fix | Delete
* @since 3.9.5 One regular expression matches shortcodes and plain URLs.
[360] Fix | Delete
*
[361] Fix | Delete
* @param string $content HTML content.
[362] Fix | Delete
*
[363] Fix | Delete
* @return string The content with embeds instead of URLs
[364] Fix | Delete
*/
[365] Fix | Delete
function vimeo_link( $content ) {
[366] Fix | Delete
/**
[367] Fix | Delete
* [vimeo 12345]
[368] Fix | Delete
* [vimeo http://vimeo.com/12345]
[369] Fix | Delete
*/
[370] Fix | Delete
$shortcode = '(?:\[vimeo\s+[^0-9]*)([0-9]+)(?:\])';
[371] Fix | Delete
[372] Fix | Delete
/**
[373] Fix | Delete
* Regex to look for a Vimeo link.
[374] Fix | Delete
*
[375] Fix | Delete
* - http://vimeo.com/12345
[376] Fix | Delete
* - https://vimeo.com/12345
[377] Fix | Delete
* - //vimeo.com/12345
[378] Fix | Delete
* - vimeo.com/some/descender/12345
[379] Fix | Delete
*
[380] Fix | Delete
* Should not capture inside HTML attributes
[381] Fix | Delete
* [Not] <a href="vimeo.com/12345">Cool Video</a>
[382] Fix | Delete
* [Not] <a href="https://vimeo.com/12345">vimeo.com/12345</a>
[383] Fix | Delete
*
[384] Fix | Delete
* Could erroneously capture:
[385] Fix | Delete
* <a href="some.link/maybe/even/vimeo">This video (vimeo.com/12345) is teh cat's meow!</a>
[386] Fix | Delete
*/
[387] Fix | Delete
$plain_url = "(?:[^'\">]?\/?(?:https?:\/\/)?vimeo\.com\/(?:groups\/\d+\/videos\/|album\/\d+\/video\/|video\/|channels\/[^\/]+\/videos\/|[^\/]+\/)?)([0-9]+)(?:[^'\"0-9<]|$)";
[388] Fix | Delete
[389] Fix | Delete
return jetpack_preg_replace_callback_outside_tags(
[390] Fix | Delete
sprintf( '#%s|%s#i', $shortcode, $plain_url ),
[391] Fix | Delete
'vimeo_link_callback',
[392] Fix | Delete
$content,
[393] Fix | Delete
'vimeo'
[394] Fix | Delete
);
[395] Fix | Delete
}
[396] Fix | Delete
[397] Fix | Delete
/**
[398] Fix | Delete
* Callback function for the regex that replaces Vimeo URLs with Vimeo embeds.
[399] Fix | Delete
*
[400] Fix | Delete
* @since 3.7.0
[401] Fix | Delete
*
[402] Fix | Delete
* @param array $matches An array containing a Vimeo URL.
[403] Fix | Delete
* @return string The Vimeo HTML embed code.
[404] Fix | Delete
*/
[405] Fix | Delete
function vimeo_link_callback( $matches ) {
[406] Fix | Delete
$id = isset( $matches[2] ) ? $matches[2] : $matches[1];
[407] Fix | Delete
if ( isset( $id ) && ctype_digit( $id ) ) {
[408] Fix | Delete
return "\n" . vimeo_shortcode( array( 'id' => $id ) ) . "\n";
[409] Fix | Delete
}
[410] Fix | Delete
return $matches[0];
[411] Fix | Delete
}
[412] Fix | Delete
[413] Fix | Delete
if (
[414] Fix | Delete
! is_admin()
[415] Fix | Delete
/** This filter is documented in modules/shortcodes/youtube.php */
[416] Fix | Delete
&& apply_filters( 'jetpack_comments_allow_oembed', true )
[417] Fix | Delete
// No need for this on WordPress.com, this is done for multiple shortcodes at a time there.
[418] Fix | Delete
&& ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM )
[419] Fix | Delete
) {
[420] Fix | Delete
/*
[421] Fix | Delete
* We attach wp_kses_post to comment_text in default-filters.php with priority of 10 anyway,
[422] Fix | Delete
* so the iframe gets filtered out.
[423] Fix | Delete
* Higher priority because we need it before auto-link and autop get to it
[424] Fix | Delete
*/
[425] Fix | Delete
add_filter( 'comment_text', 'vimeo_link', 1 );
[426] Fix | Delete
}
[427] Fix | Delete
[428] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function