PowerPress Podcasting plugin by Blubrry - Version 7.4

Version Description

  • Released on 10/03/2018
  • NEW: Skip to Position in Player shortcode, quickly skip to a position in your audio episodes from your show notes. e.g. [skipto time="2:34"] Learn more
  • MEW: Emoji in show notes! You can now enter Emoji characters into the show notes to appear in podcast apps. Enable option in Feed settings tab. Previously WordPress converst Emoji to images which are not displayed in podcast apps. Learn more
  • Added option to override the Google Podcasts subscribe URL.
  • Enhanced VideoObject, a feature in Podcasting SEO.
  • Improved base64 encoding Google Podcasts Subscribe URLs. (Thanks Daniel Lewis for the heads up!)
  • Removed option Append show title to episode titles per request from Apple.
Download this release

Release Info

Developer amandato
Plugin Icon 128x128 PowerPress Podcasting plugin by Blubrry
Version 7.4
Comparing to
See all releases

Code changes from version 7.3 to 7.4

feed-podcast.php CHANGED
@@ -26,10 +26,13 @@
26
  $content = strip_shortcodes( $content );
27
  $content = str_replace(']]>', ']]>', $content);
28
 
29
- if( function_exists('_oembed_filter_feed_content') )
30
- return wp_staticize_emoji( _oembed_filter_feed_content( $content ) );
31
- if( function_exists('wp_staticize_emoji') )
32
- return wp_staticize_emoji( $content );
 
 
 
33
  return $content;
34
  }
35
 
26
  $content = strip_shortcodes( $content );
27
  $content = str_replace(']]>', ']]>', $content);
28
 
29
+ if( function_exists('_oembed_filter_feed_content') ) // WP 4.4+
30
+ return ( _oembed_filter_feed_content( $content ) );
31
+
32
+ //if( function_exists('wp_encode_emoji') ) { // WP 4.2+
33
+ // return wp_encode_emoji( $content );
34
+ //}
35
+
36
  return $content;
37
  }
38
 
player.js CHANGED
@@ -1,13 +1,14 @@
1
  /**
2
- * jsMediaPlayer 1.6.0 for Blubrry PowerPress
3
  *
4
  * http://www.blubrry.com/powepress/
5
  *
6
- * Copyright (c) 2008-2017 Angelo Mandato (angelo [at] mandato {period} com)
7
  *
8
  * Released under Aoache 2 license:
9
  * http://www.apache.org/licenses/LICENSE-2.0
10
  *
 
11
  * version 1.6.0 - 06/14/2017 - Added code to deal with IE/Edge preloading media for the mediaelement.js player. Removed windows media player support.
12
  * version 1.5.0 - 04/23/2016 - Removed pp_embed_quicktime function (Preventive measure due to security issues with Quicktime) and removed pp_embed_swf, and show embed function enhanced to toggle.
13
  * version 1.4.0 - 09/08/2015 - Removed the pp_flashembed function (we are no longer using flash for fallback).
@@ -178,3 +179,21 @@ function powerpress_onload() {
178
  if ( window.navigator.userAgent.match( /(MSIE|Edge|Trident)\//i ) !== null && window.addEventListener) {
179
  window.addEventListener('load', powerpress_onload, false);
180
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /**
2
+ * jsMediaPlayer 1.7.0 for Blubrry PowerPress
3
  *
4
  * http://www.blubrry.com/powepress/
5
  *
6
+ * Copyright (c) 2008-2018 Angelo Mandato (angelo [at] mandato {period} com)
7
  *
8
  * Released under Aoache 2 license:
9
  * http://www.apache.org/licenses/LICENSE-2.0
10
  *
11
+ * version 1.1.0 - 09/29/2018 - Added skip to position in player code
12
  * version 1.6.0 - 06/14/2017 - Added code to deal with IE/Edge preloading media for the mediaelement.js player. Removed windows media player support.
13
  * version 1.5.0 - 04/23/2016 - Removed pp_embed_quicktime function (Preventive measure due to security issues with Quicktime) and removed pp_embed_swf, and show embed function enhanced to toggle.
14
  * version 1.4.0 - 09/08/2015 - Removed the pp_flashembed function (we are no longer using flash for fallback).
179
  if ( window.navigator.userAgent.match( /(MSIE|Edge|Trident)\//i ) !== null && window.addEventListener) {
180
  window.addEventListener('load', powerpress_onload, false);
181
  }
182
+
183
+ function powerpress_stp(e) {
184
+ e.preventDefault();
185
+ var ct = e.currentTarget;
186
+ var p= ( ct.hasAttribute("data-pp-stp") ? ct.getAttribute("data-pp-stp") : 0 ),
187
+ play =( ct.hasAttribute("data-pp-player") ? ct.getAttribute("data-pp-player") : '' );
188
+ if( play == '' ) return;
189
+ var d = document.getElementById(play);
190
+ if( d === null ) return;
191
+ if( d.tagName == 'AUDIO' || d.tagName == 'MEDIAELEMENTWRAPPER' ) {
192
+ d.currentTime=p;
193
+ d.play();
194
+ } else if( d.tagName == 'IFRAME' ) {
195
+ d.contentWindow.postMessage(p,'*');
196
+ }
197
+
198
+ return false;
199
+ }
player.min.js CHANGED
@@ -1 +1,8 @@
1
- function powerpress_show_embed(e){return document.getElementById("powerpress_embed_"+e)&&("block"==document.getElementById("powerpress_embed_"+e).style.display?document.getElementById("powerpress_embed_"+e).style.display="none":(document.getElementById("powerpress_embed_"+e).style.display="block",document.getElementById("powerpress_embed_"+e+"_t").select())),!1}function powerpress_embed_html5v(e,r,t,n,a){if(document.getElementById("powerpress_player_"+e)){var o="";if(document.getElementById("powerpress_player_"+e).getElementsByTagName){var d=document.getElementById("powerpress_player_"+e).getElementsByTagName("img");d.length&&d[0].src&&(o=d[0].src)}var p="video/mp4";r.indexOf(".webm")>-1&&(p="video/webm"),(r.indexOf(".ogg")>-1||r.indexOf(".ogv")>-1)&&(p="video/ogg");var s=document.createElement("video"),l=!1;if(s.canPlayType){var m=s.canPlayType(p);"probably"==m||"maybe"==m?l=!0:a&&(m=s.canPlayType("video/webm"),("probably"==m||"maybe"==m)&&(l=!0))}if(l){var i=document.createElement("source");if(s.width=t,s.height=n,s.controls=!0,o&&(s.poster=o),i.src=r,i.type=p,s.appendChild(i),a){var c=document.createElement("source");c.src=a,c.type='video/webm; codecs="vp8, vorbis"',s.appendChild(c)}return document.getElementById("powerpress_player_"+e).innerHTML="",document.getElementById("powerpress_player_"+e).appendChild(s),s.play(),window.powerpress_resize_player&&powerpress_resize_player(),!1}}return!0}function powerpress_embed_html5a(e,r){if(document.getElementById("powerpress_player_"+e)){var t="";if(document.getElementById("powerpress_player_"+e).getElementsByTagName){var n=document.getElementById("powerpress_player_"+e).getElementsByTagName("img");n.length&&n[0].src&&(t=n[0].src)}var a="audio/mpeg";r.indexOf(".m4a")>-1&&(a="audio/x-m4a"),(r.indexOf(".ogg")>-1||r.indexOf(".oga")>-1)&&(a="audio/ogg");var o=document.createElement("audio"),d=!1;if(o.canPlayType){var p=o.canPlayType(a);("probably"==p||"maybe"==p)&&(d=!0)}if(d){var s=document.createElement("source");return o.controls=!0,s.src=r,s.type=a,o.appendChild(s),document.getElementById("powerpress_player_"+e).innerHTML="",document.getElementById("powerpress_player_"+e).appendChild(o),o.play(),!1}}return!0}function powerpress_onload(){var e=document.getElementsByTagName("audio");for(i in e)e[i].addEventListener("play",function(e){var r=this.src.match(/media.(blubrry|rawvoice).(net|biz|com)\/[a-zA-Z_]{3,30}\/p\//i);r.length>0&&(this.pause(),this.src=this.src.replace(r[0],r[0].replace("/p/","/e/")),this.load(),this.play())},!0)}null!==window.navigator.userAgent.match(/(MSIE|Edge|Trident)\//i)&&window.addEventListener&&window.addEventListener("load",powerpress_onload,!1);
 
 
 
 
 
 
 
1
+ function powerpress_show_embed(b){document.getElementById("powerpress_embed_"+b)&&("block"==document.getElementById("powerpress_embed_"+b).style.display?document.getElementById("powerpress_embed_"+b).style.display="none":(document.getElementById("powerpress_embed_"+b).style.display="block",document.getElementById("powerpress_embed_"+b+"_t").select()));return!1}
2
+ function powerpress_embed_html5v(b,a,g,e,d){if(document.getElementById("powerpress_player_"+b)){var h="";if(document.getElementById("powerpress_player_"+b).getElementsByTagName){var c=document.getElementById("powerpress_player_"+b).getElementsByTagName("img");c.length&&c[0].src&&(h=c[0].src)}var l="video/mp4";-1<a.indexOf(".webm")&&(l="video/webm");if(-1<a.indexOf(".ogg")||-1<a.indexOf(".ogv"))l="video/ogg";c=document.createElement("video");var f=!1;if(c.canPlayType){var k=c.canPlayType(l);"probably"==
3
+ k||"maybe"==k?f=!0:d&&(k=c.canPlayType("video/webm"),"probably"==k||"maybe"==k)&&(f=!0)}if(f)return f=document.createElement("source"),c.width=g,c.height=e,c.controls=!0,h&&(c.poster=h),f.src=a,f.type=l,c.appendChild(f),d&&(a=document.createElement("source"),a.src=d,a.type='video/webm; codecs="vp8, vorbis"',c.appendChild(a)),document.getElementById("powerpress_player_"+b).innerHTML="",document.getElementById("powerpress_player_"+b).appendChild(c),c.play(),window.powerpress_resize_player&&powerpress_resize_player(),
4
+ !1}return!0}
5
+ function powerpress_embed_html5a(b,a){if(document.getElementById("powerpress_player_"+b)){document.getElementById("powerpress_player_"+b).getElementsByTagName&&document.getElementById("powerpress_player_"+b).getElementsByTagName("img");var g="audio/mpeg";-1<a.indexOf(".m4a")&&(g="audio/x-m4a");if(-1<a.indexOf(".ogg")||-1<a.indexOf(".oga"))g="audio/ogg";var e=document.createElement("audio"),d=!1;if(e.canPlayType){var h=e.canPlayType(g);if("probably"==h||"maybe"==h)d=!0}if(d)return d=document.createElement("source"),e.controls=
6
+ !0,d.src=a,d.type=g,e.appendChild(d),document.getElementById("powerpress_player_"+b).innerHTML="",document.getElementById("powerpress_player_"+b).appendChild(e),e.play(),!1}return!0}
7
+ function powerpress_onload(){var b=document.getElementsByTagName("audio");for(i in b)b[i].addEventListener("play",function(a){a=this.src.match(/media.(blubrry|rawvoice).(net|biz|com)\/[a-zA-Z_]{3,30}\/p\//i);0<a.length&&(this.pause(),this.src=this.src.replace(a[0],a[0].replace("/p/","/e/")),this.load(),this.play())},!0)}null!==window.navigator.userAgent.match(/(MSIE|Edge|Trident)\//i)&&window.addEventListener&&window.addEventListener("load",powerpress_onload,!1);
8
+ function powerpress_stp(b){b.preventDefault();var a=b.currentTarget;b=a.hasAttribute("data-pp-stp")?a.getAttribute("data-pp-stp"):0;a=a.hasAttribute("data-pp-player")?a.getAttribute("data-pp-player"):"";if(""!=a&&(a=document.getElementById(a),null!==a))return"AUDIO"==a.tagName||"MEDIAELEMENTWRAPPER"==a.tagName?(a.currentTime=b,a.play()):"IFRAME"==a.tagName&&a.contentWindow.postMessage(b,"*"),!1};
powerpress-player.php CHANGED
@@ -32,6 +32,8 @@ Initialize powerpress player handling
32
  */
33
  function powerpressplayer_init($GeneralSettings)
34
  {
 
 
35
  if( !empty($GeneralSettings['seo_video_objects']) )
36
  add_filter('powerpress_player', 'powerpressplayer_mediaobjects_video', 1, 3); // Before everythign is added
37
  if( !empty($GeneralSettings['seo_audio_objects']) )
@@ -53,7 +55,6 @@ function powerpressplayer_init($GeneralSettings)
53
  {
54
  add_shortcode('display_podcast', 'powerpress_shortcode_handler');
55
  }
56
-
57
  /*
58
  // include what's needed for each plaer
59
  if( defined('POWERPRESS_JS_DEBUG') )
@@ -153,11 +154,13 @@ function powerpress_shortcode_handler( $attributes, $content = null )
153
  }
154
  else
155
  {
156
- do_action('wp_powerpress_player_scripts');
157
  // If the shortcode specifies a channel, than we definitely want to include the player even if $EpisodeData['no_player'] is true...
158
- if( !isset($EpisodeData['no_player']) )
 
159
  $return = apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), array('id'=>$post->ID,'feed'=>$channel, 'channel'=>$channel, 'image'=>$image, 'type'=>$EpisodeData['type'],'width'=>$width, 'height'=>$height) );
 
160
  if( empty($EpisodeData['no_links']) ) {
 
161
  $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
162
  $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
163
  }
@@ -735,6 +738,7 @@ function powerpressplayer_mediaobjects($type, $content, $media_url, $EpisodeData
735
  $addhtml .= '<meta itemprop="name" content="'. htmlspecialchars($post_title) .'" />'.PHP_EOL_WEB;
736
  }
737
 
 
738
  $addhtml .= '<meta itemprop="encodingFormat" content="'. powerpress_get_contenttype($media_url) .'" />'.PHP_EOL_WEB;
739
  if( !empty($EpisodeData['duration']) ) {
740
  $addhtml .= '<meta itemprop="duration" content="'. powerpress_iso8601_duration($EpisodeData['duration']) .'" />'.PHP_EOL_WEB; // http://en.wikipedia.org/wiki/ISO_8601#Durations
@@ -1029,9 +1033,7 @@ function powerpress_do_pinw($pinw, $process_podpress)
1029
  <title><?php echo __('Blubrry PowerPress Player', 'powerpress'); ?></title>
1030
  <meta name="robots" content="noindex" />
1031
  <?php
1032
-
1033
  do_action('wp_powerpress_player_scripts');
1034
-
1035
  ?>
1036
  <style type="text/css">
1037
  body { font-size: 13px; font-family: Arial, Helvetica, sans-serif; /* width: 100%; min-height: 100%; } html { height: 100%; */ }
@@ -1334,6 +1336,9 @@ function powerpressplayer_build_html5audio($media_url, $EpisodeData=array(), $em
1334
  */
1335
  function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $embed = false )
1336
  {
 
 
 
1337
  // media URL is all we need., as long as it's hosted at blubrry.com...
1338
  if( preg_match('/content\.blubrry\.com/', $media_url) )
1339
  {
@@ -1347,9 +1352,9 @@ function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $
1347
  $hash = '#'.$hash;
1348
  }
1349
  if( !empty($EpisodeData['episode_id']) ) {
1350
- $url = '//player.blubrry.com/?podcast_id='. intval($EpisodeData['episode_id']);
1351
  } else {
1352
- $url = '//player.blubrry.com/?media_url='. urlencode($media_url);
1353
  if( !empty($EpisodeData['id']) ) {
1354
  // Get permalink URL
1355
  $permalink = get_permalink( $EpisodeData['id'] );
@@ -1364,7 +1369,16 @@ function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $
1364
 
1365
  }
1366
  $url = $url.$hash;
1367
- return '<iframe src="'. $url .'" scrolling="no" width="100%" height="138px" frameborder="0"></iframe>';
 
 
 
 
 
 
 
 
 
1368
  }
1369
 
1370
  return powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData, $embed);
@@ -1405,13 +1419,23 @@ function powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData=array
1405
 
1406
  // Double check that WordPress is providing the shortcode...
1407
  global $shortcode_tags;
 
1408
  if( !defined('POWERPRESS_DO_SHORTCODE') ) { // && !empty($shortcode_tags['audio']) && is_string($shortcode_tags['audio']) && $shortcode_tags['audio'] == 'wp_audio_shortcode' ) {
1409
- $content .= wp_audio_shortcode( $attr );
1410
  } else {
1411
- $content .= do_shortcode( '[audio src="'. esc_attr($media_url) .'" autoplay="'. ( $autoplay ?'on':'') .'" loop="" preload="none"]');
1412
  }
1413
 
1414
- $content .= '</div>'.PHP_EOL_WEB;
 
 
 
 
 
 
 
 
 
1415
  return $content;
1416
  }
1417
 
@@ -1684,4 +1708,44 @@ function powerpressplayer_build_videojs($media_url, $EpisodeData = array())
1684
  return $content;
1685
  }
1686
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1687
 
32
  */
33
  function powerpressplayer_init($GeneralSettings)
34
  {
35
+ add_shortcode('skipto', 'powerpress_shortcode_skipto'); // skipto shortcode
36
+
37
  if( !empty($GeneralSettings['seo_video_objects']) )
38
  add_filter('powerpress_player', 'powerpressplayer_mediaobjects_video', 1, 3); // Before everythign is added
39
  if( !empty($GeneralSettings['seo_audio_objects']) )
55
  {
56
  add_shortcode('display_podcast', 'powerpress_shortcode_handler');
57
  }
 
58
  /*
59
  // include what's needed for each plaer
60
  if( defined('POWERPRESS_JS_DEBUG') )
154
  }
155
  else
156
  {
 
157
  // If the shortcode specifies a channel, than we definitely want to include the player even if $EpisodeData['no_player'] is true...
158
+ if( !isset($EpisodeData['no_player']) ) {
159
+ do_action('wp_powerpress_player_scripts');
160
  $return = apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), array('id'=>$post->ID,'feed'=>$channel, 'channel'=>$channel, 'image'=>$image, 'type'=>$EpisodeData['type'],'width'=>$width, 'height'=>$height) );
161
+ }
162
  if( empty($EpisodeData['no_links']) ) {
163
+ do_action('wp_powerpress_player_scripts');
164
  $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
165
  $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
166
  }
738
  $addhtml .= '<meta itemprop="name" content="'. htmlspecialchars($post_title) .'" />'.PHP_EOL_WEB;
739
  }
740
 
741
+ $addhtml .= '<meta itemprop="uploadDate" content="'. get_the_date('c') .'" />'.PHP_EOL_WEB;
742
  $addhtml .= '<meta itemprop="encodingFormat" content="'. powerpress_get_contenttype($media_url) .'" />'.PHP_EOL_WEB;
743
  if( !empty($EpisodeData['duration']) ) {
744
  $addhtml .= '<meta itemprop="duration" content="'. powerpress_iso8601_duration($EpisodeData['duration']) .'" />'.PHP_EOL_WEB; // http://en.wikipedia.org/wiki/ISO_8601#Durations
1033
  <title><?php echo __('Blubrry PowerPress Player', 'powerpress'); ?></title>
1034
  <meta name="robots" content="noindex" />
1035
  <?php
 
1036
  do_action('wp_powerpress_player_scripts');
 
1037
  ?>
1038
  <style type="text/css">
1039
  body { font-size: 13px; font-family: Arial, Helvetica, sans-serif; /* width: 100%; min-height: 100%; } html { height: 100%; */ }
1336
  */
1337
  function powerpressplayer_build_blubrryaudio($media_url, $EpisodeData=array(), $embed = false )
1338
  {
1339
+ static $instance = 0;
1340
+ $instance++;
1341
+
1342
  // media URL is all we need., as long as it's hosted at blubrry.com...
1343
  if( preg_match('/content\.blubrry\.com/', $media_url) )
1344
  {
1352
  $hash = '#'.$hash;
1353
  }
1354
  if( !empty($EpisodeData['episode_id']) ) {
1355
+ $url = 'https://player.blubrry.com/?podcast_id='. intval($EpisodeData['episode_id']);
1356
  } else {
1357
+ $url = 'https://player.blubrry.com/?media_url='. urlencode($media_url);
1358
  if( !empty($EpisodeData['id']) ) {
1359
  // Get permalink URL
1360
  $permalink = get_permalink( $EpisodeData['id'] );
1369
 
1370
  }
1371
  $url = $url.$hash;
1372
+ $playerID = sprintf('blubrryplayer-%d', $instance);
1373
+
1374
+ $feedSlug = 'podcast';
1375
+ if( !empty($EpisodeData['feed']) )
1376
+ $feedSlug = $EpisodeData['feed'];
1377
+
1378
+ if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ] ) )
1379
+ $GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ] = $playerID;
1380
+
1381
+ return '<iframe src="'. $url .'" scrolling="no" width="100%" height="138px" frameborder="0" id="'. $playerID .'"></iframe>';
1382
  }
1383
 
1384
  return powerpressplayer_build_mediaelementaudio($media_url, $EpisodeData, $embed);
1419
 
1420
  // Double check that WordPress is providing the shortcode...
1421
  global $shortcode_tags;
1422
+ $player = '';
1423
  if( !defined('POWERPRESS_DO_SHORTCODE') ) { // && !empty($shortcode_tags['audio']) && is_string($shortcode_tags['audio']) && $shortcode_tags['audio'] == 'wp_audio_shortcode' ) {
1424
+ $player .= wp_audio_shortcode( $attr );
1425
  } else {
1426
+ $player .= do_shortcode( '[audio src="'. esc_attr($media_url) .'" autoplay="'. ( $autoplay ?'on':'') .'" loop="" preload="none"]');
1427
  }
1428
 
1429
+ // Get the DIV id for this element
1430
+ $feedSlug = 'podcast';
1431
+ if( !empty($EpisodeData['feed']) )
1432
+ $feedSlug = $EpisodeData['feed'];
1433
+
1434
+ if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ]) && preg_match('/\<audio.*id="([^"]*)"/i', $player, $matches) ) {
1435
+ $GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ] = $matches[1];
1436
+ }
1437
+
1438
+ $content .= $player .'</div>'.PHP_EOL_WEB;
1439
  return $content;
1440
  }
1441
 
1708
  return $content;
1709
  }
1710
 
1711
+ function powerpress_shortcode_skipto($attributes, $content = null)
1712
+ {
1713
+ $pos = '';
1714
+ if( isset($attributes['time']) ) {
1715
+ $pos = $attributes['time'];
1716
+ } else if (isset($attributes['timestamp'])) {
1717
+ $pos = $attributes['timestamp'];
1718
+ } else if (isset($attributes['ts'])) {
1719
+ $pos = $attributes['ts'];
1720
+ }
1721
+
1722
+ if( empty($pos) )
1723
+ return $content;
1724
+
1725
+ // Prepare data
1726
+ $timeInSeconds = powerpress_raw_duration($pos);
1727
+ $readableTime = powerpress_readable_duration($timeInSeconds);
1728
+ if( empty($content) )
1729
+ $content = $readableTime;
1730
+
1731
+ // We can't add players to feeds
1732
+ if( is_feed() )
1733
+ return $content;
1734
+
1735
+ $feedSlug = 'podcast';
1736
+ if( !empty($attributes['channel']) )
1737
+ $feedSlug = $attributes['channel'];
1738
+
1739
+ if( empty($GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ]) ) {
1740
+ if( function_exists('qed_stt_shortcode') ) { // If using the skip to timestamp plugin, we will fall back to it since we are not handling the player...
1741
+ return qed_stt_shortcode($attributes, $content);
1742
+ }
1743
+
1744
+ return $content;
1745
+ }
1746
+
1747
+ $playerID = $GLOBALS['powerpress_skipto_player'][ get_the_ID() ][ $feedSlug ];
1748
+ return '<a title="'. esc_attr(sprintf(__('Skip to %s', 'powerpress'), $readableTime)) .'" href="'. get_permalink() .'#" onclick="return powerpress_stp(event);" class="powerpress-skip-a" data-pp-stp="'. $timeInSeconds .'" data-pp-player="'. $playerID .'">'. $content .'</a>';
1749
+ }
1750
+
1751
 
powerpress-subscribe.php CHANGED
@@ -288,7 +288,10 @@ function powerpressplayer_link_subscribe_pre($content, $media_url, $ExtraData =
288
 
289
  if( !empty($SubscribeSettings['subscribe_feature_gp']) )
290
  {
291
- $SubscribeSettings['googleplay_url'] = 'https://www.google.com/podcasts?feed='. base64_encode($feed_url);
 
 
 
292
  $links_array[] = "<a href=\"". esc_attr($SubscribeSettings['googleplay_url'] ) ."\" class=\"powerpress_link_subscribe powerpress_link_subscribe_googleplay\" title=\"". __('Subscribe on Google Podcasts', 'powerpress') ."\" rel=\"nofollow\">". __('Google Podcasts','powerpress') ."</a>".PHP_EOL_WEB;
293
  }
294
 
@@ -588,7 +591,12 @@ function powerpress_do_subscribe_widget($settings)
588
  }
589
 
590
  // Google Podcasts
591
- $html .= '<a href="'. esc_url( 'https://www.google.com/podcasts?feed='. base64_encode($settings['feed_url']) ) .'" class="pp-sub-btn pp-sub-gp" title="'. esc_attr( __('Subscribe on Google Podcasts', 'powerpress') ) .'"><span class="pp-sub-ic"></span>'. esc_html( __('on Google Podcasts', 'powerpress') ) .'</a>';
 
 
 
 
 
592
 
593
 
594
  if( !empty($settings['stitcher_url']) )
@@ -657,7 +665,12 @@ function powerpress_do_subscribe_sidebar_widget($settings)
657
  }
658
 
659
  if( !empty($settings['subscribe_feature_gp']) ) {
660
- $gp_url = 'https://www.google.com/podcasts?feed='.base64_encode($settings['feed_url']);
 
 
 
 
 
661
  $html .= '<a href="'. esc_url( $gp_url ) .'" class="pp-ssb-btn pp-ssb-gp" title="'. esc_attr( __('Subscribe on Google Podcasts', 'powerpress') ) .'"><span class="pp-ssb-ic"></span>'. esc_html( __('on Google Podcasts', 'powerpress') ) .'</a>';
662
  }
663
 
288
 
289
  if( !empty($SubscribeSettings['subscribe_feature_gp']) )
290
  {
291
+ if( !empty($SubscribeSettings['google_url']) )
292
+ $SubscribeSettings['googleplay_url'] =$SubscribeSettings['google_url'];
293
+ else
294
+ $SubscribeSettings['googleplay_url'] = 'https://www.google.com/podcasts?feed='. powerpress_base64_encode($feed_url);
295
  $links_array[] = "<a href=\"". esc_attr($SubscribeSettings['googleplay_url'] ) ."\" class=\"powerpress_link_subscribe powerpress_link_subscribe_googleplay\" title=\"". __('Subscribe on Google Podcasts', 'powerpress') ."\" rel=\"nofollow\">". __('Google Podcasts','powerpress') ."</a>".PHP_EOL_WEB;
296
  }
297
 
591
  }
592
 
593
  // Google Podcasts
594
+ $googleUrl = '';
595
+ if( !empty($settings['google_url']) )
596
+ $googleUrl = $settings['google_url'];
597
+ else
598
+ $googleUrl = 'https://www.google.com/podcasts?feed='. powerpress_base64_encode($settings['feed_url']);
599
+ $html .= '<a href="'. esc_url( $googleUrl ) .'" class="pp-sub-btn pp-sub-gp" title="'. esc_attr( __('Subscribe on Google Podcasts', 'powerpress') ) .'"><span class="pp-sub-ic"></span>'. esc_html( __('on Google Podcasts', 'powerpress') ) .'</a>';
600
 
601
 
602
  if( !empty($settings['stitcher_url']) )
665
  }
666
 
667
  if( !empty($settings['subscribe_feature_gp']) ) {
668
+ $googleUrl = '';
669
+ if( !empty($settings['google_url']) )
670
+ $gp_url = $settings['google_url'];
671
+ else
672
+ $gp_url = 'https://www.google.com/podcasts?feed='.powerpress_base64_encode($settings['feed_url']);
673
+
674
  $html .= '<a href="'. esc_url( $gp_url ) .'" class="pp-ssb-btn pp-ssb-gp" title="'. esc_attr( __('Subscribe on Google Podcasts', 'powerpress') ) .'"><span class="pp-ssb-ic"></span>'. esc_html( __('on Google Podcasts', 'powerpress') ) .'</a>';
675
  }
676
 
powerpress.php CHANGED
@@ -3,11 +3,11 @@
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports Apple Podcasts (previously iTunes), Google Podcasts, Spotify, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
- Version: 7.3
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Requires at least: 3.6
10
- Tested up to: 4.8.1
11
  Text Domain: powerpress
12
  Change Log:
13
  Please see readme.txt for detailed change log.
@@ -32,7 +32,7 @@ if( !function_exists('add_action') )
32
  die("access denied.");
33
 
34
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
35
- define('POWERPRESS_VERSION', '7.3' );
36
 
37
  // Translation support:
38
  if ( !defined('POWERPRESS_ABSPATH') )
@@ -306,13 +306,9 @@ function powerpress_content($content)
306
  }
307
  else
308
  {
309
- if( !isset($EpisodeData['no_links']) || ($GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0) )
310
- {
311
- do_action('wp_powerpress_player_scripts');
312
- }
313
-
314
  if( $GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0 ) // Play in new window only or disabled
315
  {
 
316
  $AddDefaultPlayer = empty($EpisodeData['no_player']);
317
 
318
  if( $EpisodeData && !empty($EpisodeData['embed']) )
@@ -333,6 +329,7 @@ function powerpress_content($content)
333
  }
334
 
335
  if( !isset($EpisodeData['no_links']) ) {
 
336
  $new_content .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
337
  $new_content .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
338
  }
@@ -1250,18 +1247,6 @@ function powerpress_the_title_rss($title)
1250
  }
1251
  }
1252
  }
1253
-
1254
- if( !empty($GeneralSettings['seo_append_show_title']) )
1255
- {
1256
- $title_of_program = get_wp_title_rss();
1257
-
1258
- if( defined('POWERPRESS_APPEND_SHOW_TITLE_SEPARATOR') && POWERPRESS_APPEND_SHOW_TITLE_SEPARATOR )
1259
- $new_title .= ' '. POWERPRESS_APPEND_SHOW_TITLE_SEPARATOR .' '.$title_of_program;
1260
- else if( defined('POWERPRESS_APPEND_SHOW_TITLE_SEPARATOR') )
1261
- $new_title .= ' '.$title_of_program;
1262
- else
1263
- $new_title .= ' - '.$title_of_program;
1264
- }
1265
 
1266
  return $new_title;
1267
  }
@@ -1560,6 +1545,15 @@ function powerpress_init()
1560
  array(),
1561
  '20141021',
1562
  'all' );
 
 
 
 
 
 
 
 
 
1563
  }
1564
 
1565
  add_action('init', 'powerpress_init', -100); // We need to add the feeds before other plugins start screwing with them
@@ -2245,13 +2239,9 @@ function get_the_powerpress_content()
2245
  }
2246
  else
2247
  {
2248
- if( !isset($EpisodeData['no_links']) || ($GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0) )
2249
- {
2250
- do_action('wp_powerpress_player_scripts');
2251
- }
2252
-
2253
  if( $GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0 ) // Play in new window only or disabled
2254
  {
 
2255
  $AddDefaultPlayer = empty($EpisodeData['no_player']);
2256
 
2257
  if( $EpisodeData && !empty($EpisodeData['embed']) )
@@ -2279,6 +2269,7 @@ function get_the_powerpress_content()
2279
 
2280
  if( !isset($EpisodeData['no_links']) )
2281
  {
 
2282
  $new_content .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
2283
  $new_content .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
2284
  }
@@ -2906,7 +2897,7 @@ function powerpress_add_redirect_url($MediaURL, $EpisodeData = false) // $channe
2906
  $ValidRedirectDomainsPattern = '/^(media\.blubrry\.com|media\.rawvoice\.com|media\.techpodcasts\.com|.*\.podtrac\.com|traffic\.cast\.plus)$/';
2907
  if( $URLScheme == 'https://' ) {
2908
  $ValidRedirectDomains = array('media.blubrry.com', 'media.rawvoice.com', 'www.podtrac.com', 'podtrac.com'); // Only URLs that support https:// to an https:// media file
2909
- $ValidRedirectDomainsPattern = '/^(media\.blubrry\.com|media\.rawvoice\.com|.*\.podtrac\.com)$/';
2910
  }
2911
 
2912
  $RedirectDomain = strtolower(substr($RedirectClean, 0, strpos($RedirectClean, '/') ));
@@ -3077,6 +3068,11 @@ function powerpress_repair_serialize($string)
3077
  return $string;
3078
  }
3079
 
 
 
 
 
 
3080
  /*
3081
  powerpress_get_post_meta()
3082
  Safe function to retrieve corrupted PodPress data from the database
@@ -3387,17 +3383,14 @@ function get_the_powerpress_all_players($slug = false, $no_link=false)
3387
  continue;
3388
  }
3389
 
3390
- if( !isset($EpisodeData['no_links']) || (!isset($EpisodeData['no_player']) && $AddDefaultPlayer) )
3391
- {
3392
- do_action('wp_powerpress_player_scripts');
3393
- }
3394
-
3395
  if( !isset($EpisodeData['no_player']) && $AddDefaultPlayer )
3396
  {
 
3397
  $return .= apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3398
  }
3399
  if( !isset($EpisodeData['no_links']) && $no_link == false )
3400
  {
 
3401
  $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3402
  $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3403
  }
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="http://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports Apple Podcasts (previously iTunes), Google Podcasts, Spotify, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
+ Version: 7.4
7
  Author: Blubrry
8
  Author URI: http://www.blubrry.com/
9
  Requires at least: 3.6
10
+ Tested up to: 4.9.9
11
  Text Domain: powerpress
12
  Change Log:
13
  Please see readme.txt for detailed change log.
32
  die("access denied.");
33
 
34
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
35
+ define('POWERPRESS_VERSION', '7.4' );
36
 
37
  // Translation support:
38
  if ( !defined('POWERPRESS_ABSPATH') )
306
  }
307
  else
308
  {
 
 
 
 
 
309
  if( $GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0 ) // Play in new window only or disabled
310
  {
311
+ do_action('wp_powerpress_player_scripts');
312
  $AddDefaultPlayer = empty($EpisodeData['no_player']);
313
 
314
  if( $EpisodeData && !empty($EpisodeData['embed']) )
329
  }
330
 
331
  if( !isset($EpisodeData['no_links']) ) {
332
+ do_action('wp_powerpress_player_scripts');
333
  $new_content .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
334
  $new_content .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
335
  }
1247
  }
1248
  }
1249
  }
 
 
 
 
 
 
 
 
 
 
 
 
1250
 
1251
  return $new_title;
1252
  }
1545
  array(),
1546
  '20141021',
1547
  'all' );
1548
+
1549
+ if( !empty($GeneralSettings['rss_emoji']) ) {
1550
+ if( has_filter('the_content_feed', 'wp_staticize_emoji') ) {
1551
+ remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); // Remove the emoji images
1552
+ remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
1553
+ //add_filter( 'the_content_feed', 'wp_encode_emoji' ); // Convert an emoji to &#x1Fxxx;
1554
+ //add_filter( 'get_wp_title_rss', 'wp_encode_emoji' );
1555
+ }
1556
+ }
1557
  }
1558
 
1559
  add_action('init', 'powerpress_init', -100); // We need to add the feeds before other plugins start screwing with them
2239
  }
2240
  else
2241
  {
 
 
 
 
 
2242
  if( $GeneralSettings['player_function'] != 3 && $GeneralSettings['player_function'] != 0 ) // Play in new window only or disabled
2243
  {
2244
+ do_action('wp_powerpress_player_scripts');
2245
  $AddDefaultPlayer = empty($EpisodeData['no_player']);
2246
 
2247
  if( $EpisodeData && !empty($EpisodeData['embed']) )
2269
 
2270
  if( !isset($EpisodeData['no_links']) )
2271
  {
2272
+ do_action('wp_powerpress_player_scripts');
2273
  $new_content .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
2274
  $new_content .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
2275
  }
2897
  $ValidRedirectDomainsPattern = '/^(media\.blubrry\.com|media\.rawvoice\.com|media\.techpodcasts\.com|.*\.podtrac\.com|traffic\.cast\.plus)$/';
2898
  if( $URLScheme == 'https://' ) {
2899
  $ValidRedirectDomains = array('media.blubrry.com', 'media.rawvoice.com', 'www.podtrac.com', 'podtrac.com'); // Only URLs that support https:// to an https:// media file
2900
+ $ValidRedirectDomainsPattern = '/^(media\.blubrry\.com|media\.rawvoice\.com|.*\.podtrac\.com|traffic\.cast\.plus)$/';
2901
  }
2902
 
2903
  $RedirectDomain = strtolower(substr($RedirectClean, 0, strpos($RedirectClean, '/') ));
3068
  return $string;
3069
  }
3070
 
3071
+
3072
+ function powerpress_base64_encode($value)
3073
+ {
3074
+ return rtrim(strtr(base64_encode($value), '+/', '-_'), '=');
3075
+ }
3076
  /*
3077
  powerpress_get_post_meta()
3078
  Safe function to retrieve corrupted PodPress data from the database
3383
  continue;
3384
  }
3385
 
 
 
 
 
 
3386
  if( !isset($EpisodeData['no_player']) && $AddDefaultPlayer )
3387
  {
3388
+ do_action('wp_powerpress_player_scripts');
3389
  $return .= apply_filters('powerpress_player', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3390
  }
3391
  if( !isset($EpisodeData['no_links']) && $no_link == false )
3392
  {
3393
+ do_action('wp_powerpress_player_scripts');
3394
  $return .= apply_filters('powerpress_player_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3395
  $return .= apply_filters('powerpress_player_subscribe_links', '', powerpress_add_flag_to_redirect_url($EpisodeData['url'], 'p'), $EpisodeData );
3396
  }
powerpressadmin-basic.php CHANGED
@@ -396,9 +396,9 @@ jQuery(document).ready( function() {
396
  ?>
397
  </li>
398
  <li><?php echo __('Tell the world about PowerPress by writing about it on your blog', 'powerpress'); ?>,
399
- <a href="http://twitter.com/home/?status=<?php echo urlencode( __('I\'m podcasting with Blubrry PowerPress (http://blubrry.com/powerpress/) #powerpress #wordpress', 'powerpress') ); ?>" target="_blank"><?php echo __('Twitter', 'powerpress'); ?></a>,
400
- <a href="http://www.facebook.com/share.php?u=<?php echo urlencode('http://www.blubrry.com/powerpress'); ?>&amp;t=<?php echo urlencode( __('I podcast with Blubrry PowerPress', 'powerpress')); ?>" target="_blank"><?php echo __('Facebook', 'powerpress'); ?></a>,
401
- <a href="https://plus.google.com/share?url==<?php echo urlencode('http://www.blubrry.com/powerpress'); ?>" target="_blank"><?php echo __('Google+', 'powerpress'); ?></a>,
402
  etc...</li>
403
  <li><a href="http://www.blubrry.com/contact.php" target="_blank"><?php echo __('Send us feedback', 'powerpress'); ?></a> (<?php echo __('we love getting suggestions for new features!', 'powerpress'); ?>)</li>
404
  </ul>
@@ -1545,11 +1545,11 @@ function powerpressadmin_edit_artwork($FeedSettings, $General)
1545
  <p><strong><?php echo __('A square 3000 x 3000 pixel image in .jpg format is recommended.', 'powerpress'); ?></strong></p>
1546
 
1547
  <p>
1548
- <?php echo __('This image is for your listing on the iTunes podcast directory and may also be used by other directories like Blubrry. It is not the artwork that is displayed during episode playback. That artwork needs to be saved into the media file in the form of tags (ID3 tags for mp3) following the production of the media file.', 'powerpress'); ?>
1549
  </p>
1550
 
1551
  <p class="description"><?php echo __('Note: If you change the iTunes image without changing the file name it may take some time (days or even months) for iTunes to update the image in the iTunes Podcast Directory.', 'powerpress'); ?>
1552
- <?php echo sprintf( __('Please contact %s if you are having issues with your image changes not appearing in iTunes.', 'powerpress'), '<a href="http://www.apple.com/support/itunes/contact/">'. __('iTunes Support', 'powerpress') .'</a>'); ?></p>
1553
  <?php if( $SupportUploads ) { ?>
1554
 
1555
  <p><label class="powerpress-normal-font"><input name="itunes_image_checkbox" type="checkbox" onchange="powerpress_show_field('itunes_image_upload', this.checked)" value="1" /> <?php echo __('Upload new image', 'powerpress'); ?></label> &nbsp;
396
  ?>
397
  </li>
398
  <li><?php echo __('Tell the world about PowerPress by writing about it on your blog', 'powerpress'); ?>,
399
+ <a href="https://twitter.com/home/?status=<?php echo urlencode( __('I\'m podcasting with Blubrry PowerPress (https://blubrry.com/powerpress/) #powerpress #wordpress', 'powerpress') ); ?>" target="_blank"><?php echo __('Twitter', 'powerpress'); ?></a>,
400
+ <a href="https://www.facebook.com/share.php?u=<?php echo urlencode('https://www.blubrry.com/powerpress'); ?>&amp;t=<?php echo urlencode( __('I podcast with Blubrry PowerPress', 'powerpress')); ?>" target="_blank"><?php echo __('Facebook', 'powerpress'); ?></a>,
401
+ <a href="https://plus.google.com/share?url==<?php echo urlencode('https://www.blubrry.com/powerpress'); ?>" target="_blank"><?php echo __('Google+', 'powerpress'); ?></a>,
402
  etc...</li>
403
  <li><a href="http://www.blubrry.com/contact.php" target="_blank"><?php echo __('Send us feedback', 'powerpress'); ?></a> (<?php echo __('we love getting suggestions for new features!', 'powerpress'); ?>)</li>
404
  </ul>
1545
  <p><strong><?php echo __('A square 3000 x 3000 pixel image in .jpg format is recommended.', 'powerpress'); ?></strong></p>
1546
 
1547
  <p>
1548
+ <?php echo __('This image is for your listing on the Apple podcasts directory and may also be used by other directories like Blubrry. It is not the artwork that is displayed during episode playback. That artwork needs to be saved into the media file in the form of tags (ID3 tags for mp3) following the production of the media file.', 'powerpress'); ?>
1549
  </p>
1550
 
1551
  <p class="description"><?php echo __('Note: If you change the iTunes image without changing the file name it may take some time (days or even months) for iTunes to update the image in the iTunes Podcast Directory.', 'powerpress'); ?>
1552
+ <?php echo sprintf( __('Please contact %s if you are having issues with your image changes not appearing in iTunes.', 'powerpress'), '<a href="https://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-itunes/itunes-support/">'. __('Apple Podcasts Support', 'powerpress') .'</a>'); ?></p>
1553
  <?php if( $SupportUploads ) { ?>
1554
 
1555
  <p><label class="powerpress-normal-font"><input name="itunes_image_checkbox" type="checkbox" onchange="powerpress_show_field('itunes_image_upload', this.checked)" value="1" /> <?php echo __('Upload new image', 'powerpress'); ?></label> &nbsp;
powerpressadmin-editfeed.php CHANGED
@@ -354,6 +354,9 @@ function powerpressadmin_edit_feed_general($FeedSettings, $General)
354
  {
355
  $warning = __('WARNING: You must create at least one podcast episode for your podcast feed to be valid.', 'powerpress');
356
  }
 
 
 
357
  ?>
358
  <h3><?php echo __('Podcast Feeds', 'powerpress'); ?></h3>
359
  <table class="form-table">
@@ -435,6 +438,26 @@ function powerpressadmin_edit_feed_general($FeedSettings, $General)
435
  </td>
436
  </tr>
437
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
438
 
439
  </table>
440
  <?php
@@ -611,7 +634,7 @@ else
611
  </th>
612
  <td>
613
  <p><input type="checkbox" name="Feed[maximize_feed]" value="1" <?php if( !empty($FeedSettings['maximize_feed']) ) echo 'checked'; ?> />
614
- <?php echo __('Maximize the number of episodes while maintaining an optimal feed size.', 'powerpress'); ?> <a href="http://create.blubrry.com/resources/powerpress/powerpress-settings/feeds/#maximizer" target="_blank"><?php echo __('Learn more', 'powerpress'); ?></p>
615
  <p></a></p>
616
  </td>
617
  </tr>
@@ -1021,7 +1044,7 @@ foreach( $types as $value=> $desc )
1021
  </strong>
1022
  </p>
1023
  <p>
1024
- <?php echo __('Learn more:', 'powerpress'); ?> <a href="http://create.blubrry.com/manual/syndicating-your-podcast-rss-feeds/changing-your-podcast-rss-feed-address-url/" target="_blank"><?php echo __('Changing Your Podcast RSS Feed Address (URL)', 'powerpress'); ?></a>
1025
  </p>
1026
  </div>
1027
  <div id="new_feed_url_step_2" style="display: <?php echo ( !empty($FeedSettings['itunes_new_feed_url']) || !empty($FeedSettings['itunes_new_feed_url_podcast']) ?'block':'none'); ?>;">
@@ -1068,7 +1091,7 @@ foreach( $types as $value=> $desc )
1068
  </p>
1069
  <p style="margin-left: 25%;margin-top: 0;font-size: 90%;">(<?php echo __('Leave blank for no New Feed URL', 'powerpress'); ?>)</p>
1070
 
1071
- <p><a href="http://www.apple.com/itunes/whatson/podcasts/specs.html#changing" target="_blank"><?php echo __('More information regarding the iTunes New Feed URL is available here.', 'powerpress'); ?></a></p>
1072
  <p>
1073
  <?php
1074
  if( !$cat_ID && !$feed_slug )
354
  {
355
  $warning = __('WARNING: You must create at least one podcast episode for your podcast feed to be valid.', 'powerpress');
356
  }
357
+
358
+ if( !isset($FeedSettings['apply_to']) )
359
+ $FeedSettings['apply_to'] = 1;
360
  ?>
361
  <h3><?php echo __('Podcast Feeds', 'powerpress'); ?></h3>
362
  <table class="form-table">
438
  </td>
439
  </tr>
440
 
441
+ <tr valign="top">
442
+ <th scope="row">
443
+ <?php echo __('Emoji', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></th>
444
+ <td>
445
+ <?php
446
+ if( 'utf8mb4' != $GLOBALS['wpdb']->charset )
447
+ {
448
+ ?>
449
+ <p style="font-weight: bold; color: #CC0000;">
450
+ <?php
451
+ echo __('Emoji may not be supported with your WordPress installation. Please upgrade your database to support utf8mb4 available in WordPress 4.2 and newer.', 'powerpress');
452
+ ?>
453
+ </p>
454
+ <?php } ?>
455
+ <input type="hidden" name="General[rss_emoji]" value="0" />
456
+ <p><label><input type="checkbox" name="General[rss_emoji]" value="1" <?php if( !empty($General['rss_emoji']) ) echo 'checked '; ?>/> <?php echo __('Include Emoji in feeds.', 'powerpress'); ?></label>
457
+ <a href="https://create.blubrry.com/resources/powerpress/powerpress-settings/feeds/#emoji" target="_blank"><?php echo __('Learn more', 'powerpress'); ?></p>
458
+ </p>
459
+ </td>
460
+ </tr>
461
 
462
  </table>
463
  <?php
634
  </th>
635
  <td>
636
  <p><input type="checkbox" name="Feed[maximize_feed]" value="1" <?php if( !empty($FeedSettings['maximize_feed']) ) echo 'checked'; ?> />
637
+ <?php echo __('Maximize the number of episodes while maintaining an optimal feed size.', 'powerpress'); ?> <a href="https://create.blubrry.com/resources/powerpress/powerpress-settings/feeds/#maximizer" target="_blank"><?php echo __('Learn more', 'powerpress'); ?></p>
638
  <p></a></p>
639
  </td>
640
  </tr>
1044
  </strong>
1045
  </p>
1046
  <p>
1047
+ <?php echo __('Learn more:', 'powerpress'); ?> <a href="https://create.blubrry.com/manual/syndicating-your-podcast-rss-feeds/changing-your-podcast-rss-feed-address-url/" target="_blank"><?php echo __('Changing Your Podcast RSS Feed Address (URL)', 'powerpress'); ?></a>
1048
  </p>
1049
  </div>
1050
  <div id="new_feed_url_step_2" style="display: <?php echo ( !empty($FeedSettings['itunes_new_feed_url']) || !empty($FeedSettings['itunes_new_feed_url_podcast']) ?'block':'none'); ?>;">
1091
  </p>
1092
  <p style="margin-left: 25%;margin-top: 0;font-size: 90%;">(<?php echo __('Leave blank for no New Feed URL', 'powerpress'); ?>)</p>
1093
 
1094
+ <p><a href="https://create.blubrry.com/manual/syndicating-your-podcast-rss-feeds/changing-your-podcast-rss-feed-address-url/" target="_blank"><?php echo __('More information regarding the iTunes New Feed URL is available here.', 'powerpress'); ?></a></p>
1095
  <p>
1096
  <?php
1097
  if( !$cat_ID && !$feed_slug )
powerpressadmin-import-feed.php CHANGED
@@ -15,6 +15,7 @@ function powerpress_admin_import_feed()
15
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-libsyn-rss-podcast"); ?>"><?php echo __('Podcast from LibSyn', 'powerpress'); ?></a></strong></li>
16
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-podbean-rss-podcast"); ?>"><?php echo __('Podcast from PodBean', 'powerpress'); ?></a></strong></li>
17
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-squarespace-rss-podcast"); ?>"><?php echo __('Podcast from Squarespace', 'powerpress'); ?></a></strong></li>
 
18
  </ul>
19
  <h4><?php echo __('Import from anywhere else', 'powerpress'); ?></h4>
20
  <ul>
15
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-libsyn-rss-podcast"); ?>"><?php echo __('Podcast from LibSyn', 'powerpress'); ?></a></strong></li>
16
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-podbean-rss-podcast"); ?>"><?php echo __('Podcast from PodBean', 'powerpress'); ?></a></strong></li>
17
  <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-squarespace-rss-podcast"); ?>"><?php echo __('Podcast from Squarespace', 'powerpress'); ?></a></strong></li>
18
+ <li><strong><a href="<?php echo admin_url("admin.php?import=powerpress-anchor-rss-podcast"); ?>"><?php echo __('Podcast from Anchor.fm', 'powerpress'); ?></a></strong></li>
19
  </ul>
20
  <h4><?php echo __('Import from anywhere else', 'powerpress'); ?></h4>
21
  <ul>
powerpressadmin-notifications.php CHANGED
@@ -213,9 +213,6 @@ if( powerpressadmin_notifications_appropriate() ) {
213
  $message .= "\n\n";
214
  $message .= '<div style="text-align: center; margin: 5px 0; font-weight: bold;"><i>'. powerpress_review_message() .'</i></div>';
215
 
216
- // http://www.apple.com/customer-letter/
217
- // if you love PowerPress, Please rate and review PowerPress here:
218
-
219
  $PowerPressNotificationManager->add('spotify-201807', $message);
220
  }
221
 
213
  $message .= "\n\n";
214
  $message .= '<div style="text-align: center; margin: 5px 0; font-weight: bold;"><i>'. powerpress_review_message() .'</i></div>';
215
 
 
 
 
216
  $PowerPressNotificationManager->add('spotify-201807', $message);
217
  }
218
 
powerpressadmin-rss-import.php CHANGED
@@ -58,7 +58,6 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
58
 
59
  function header() {
60
  echo '<div class="wrap" style="padding-left: 5%">';
61
- screen_icon();
62
 
63
  if( !empty($_GET['import']) )
64
  {
@@ -68,6 +67,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
68
  case 'powerpress-libsyn-rss-podcast': echo '<h2>'.__('Import Podcast from LibSyn', 'powerpress').'</h2>'; break;
69
  case 'powerpress-podbean-rss-podcast': echo '<h2>'.__('Import Podcast from PodBean', 'powerpress').'</h2>'; break;
70
  case 'powerpress-squarespace-rss-podcast': echo '<h2>'.__('Import Podcast from Squarespace', 'powerpress').'</h2>'; break;
 
71
  case 'powerpress-rss-podcast':
72
  default: echo '<h2>'.__('Import Podcast RSS Feed', 'powerpress').'</h2>'; break;
73
  }
@@ -105,6 +105,7 @@ class PowerPress_RSS_Podcast_Import extends WP_Importer {
105
  case 'powerpress-libsyn-rss-podcast': $placeholder = 'http://yourshow.libsyn.com/rss'; break;
106
  case 'powerpress-podbean-rss-podcast': $placeholder = 'http://yourshow.podbean.com/feed/'; break;
107
  case 'powerpress-squarespace-rss-podcast': $placeholder = 'http://example.com/podcast/?format=rss'; break;
 
108
  }
109
  ?>
110
  <input type="text" name="podcast_feed_url" id="podcast_feed_url" size="50" class="code" style="width: 90%;" placeholder="<?php echo esc_attr($placeholder); ?>" />
@@ -1563,6 +1564,7 @@ jQuery(document).ready( function() {
1563
  register_importer('powerpress-libsyn-rss-podcast', __('Podcast from LibSyn', 'powerpress'), __('Import episodes from a LibSyn podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1564
  register_importer('powerpress-podbean-rss-podcast', __('Podcast from PodBean ', 'powerpress'), __('Import episodes from a PodBean podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1565
  register_importer('powerpress-squarespace-rss-podcast', __('Podcast from Squarespace', 'powerpress'), __('Import episodes from a Squarespace podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
 
1566
  register_importer('powerpress-rss-podcast', __('Podcast RSS Feed', 'powerpress'), __('Import episodes from a RSS podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1567
 
1568
  }; // end if WP_Importer exists
58
 
59
  function header() {
60
  echo '<div class="wrap" style="padding-left: 5%">';
 
61
 
62
  if( !empty($_GET['import']) )
63
  {
67
  case 'powerpress-libsyn-rss-podcast': echo '<h2>'.__('Import Podcast from LibSyn', 'powerpress').'</h2>'; break;
68
  case 'powerpress-podbean-rss-podcast': echo '<h2>'.__('Import Podcast from PodBean', 'powerpress').'</h2>'; break;
69
  case 'powerpress-squarespace-rss-podcast': echo '<h2>'.__('Import Podcast from Squarespace', 'powerpress').'</h2>'; break;
70
+ case 'powerpress-anchor-rss-podcast': echo '<h2>'.__('Import Podcast from Anchor.fm', 'powerpress').'</h2>'; break;
71
  case 'powerpress-rss-podcast':
72
  default: echo '<h2>'.__('Import Podcast RSS Feed', 'powerpress').'</h2>'; break;
73
  }
105
  case 'powerpress-libsyn-rss-podcast': $placeholder = 'http://yourshow.libsyn.com/rss'; break;
106
  case 'powerpress-podbean-rss-podcast': $placeholder = 'http://yourshow.podbean.com/feed/'; break;
107
  case 'powerpress-squarespace-rss-podcast': $placeholder = 'http://example.com/podcast/?format=rss'; break;
108
+ case 'powerpress-anchor-rss-podcast': $placeholder = 'https://anchor.fm/s/xxxxxx/podcast/rss'; break;
109
  }
110
  ?>
111
  <input type="text" name="podcast_feed_url" id="podcast_feed_url" size="50" class="code" style="width: 90%;" placeholder="<?php echo esc_attr($placeholder); ?>" />
1564
  register_importer('powerpress-libsyn-rss-podcast', __('Podcast from LibSyn', 'powerpress'), __('Import episodes from a LibSyn podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1565
  register_importer('powerpress-podbean-rss-podcast', __('Podcast from PodBean ', 'powerpress'), __('Import episodes from a PodBean podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1566
  register_importer('powerpress-squarespace-rss-podcast', __('Podcast from Squarespace', 'powerpress'), __('Import episodes from a Squarespace podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1567
+ register_importer('powerpress-anchor-rss-podcast', __('Podcast from Anchor.fm', 'powerpress'), __('Import episodes from an Anchor.fm podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1568
  register_importer('powerpress-rss-podcast', __('Podcast RSS Feed', 'powerpress'), __('Import episodes from a RSS podcast feed.', 'powerpress'), array ($powerpress_rss_podcast_import, 'dispatch'));
1569
 
1570
  }; // end if WP_Importer exists
powerpressadmin-search.php CHANGED
@@ -14,9 +14,7 @@ jQuery(document).ready(function() {
14
 
15
  <?php
16
 
17
- if( empty($General['seo_append_show_title']) )
18
- echo " jQuery('#powerpress_example_show_title').hide();\n";
19
- if( !empty($General['seo_feed_title']) && $General['seo_feed_title'] == 1 )
20
  echo " jQuery('#powerpress_example_post_title').hide();\n";
21
  ?>
22
  jQuery('#seo_feed_title').change( function() {
@@ -25,12 +23,6 @@ jQuery(document).ready(function() {
25
  else
26
  jQuery('.powerpress_seo_feed_title').prop('checked', false);
27
  });
28
- jQuery('#seo_append_show_title').change( function() {
29
- if( jQuery(this).prop('checked') )
30
- jQuery('#powerpress_example_show_title').show();
31
- else
32
- jQuery('#powerpress_example_show_title').hide();
33
- });
34
  jQuery('.powerpress_seo_feed_title').change( function() {
35
 
36
  jQuery('#seo_feed_title').prop('checked', true);
@@ -91,19 +83,12 @@ jQuery(document).ready(function() {
91
  <p><label style="display: block;"><input type="radio" class="powerpress_seo_feed_title" id="powerpress_seo_feed_title_3" name="General[seo_feed_title]" value="3" <?php if( $General['seo_feed_title'] == 3 ) echo 'checked'; ?> />
92
  <?php echo __('Feed episode title appended to post title', 'powerpress'); ?></label></p>
93
  </div>
94
- <p>
95
- <label for="seo_append_show_title">
96
- <input name="General[seo_append_show_title]" type="hidden" value="0" />
97
- <input id="seo_append_show_title" name="General[seo_append_show_title]" type="checkbox" value="1" <?php if( !empty($General['seo_append_show_title']) ) echo 'checked '; ?> />
98
- <?php echo __('Append show title to episode titles.', 'powerpress'); ?></label>
99
- </p>
100
  <p style="margin: 10px 0 0 40px;">
101
  <strong><?php echo __('Example based on options selected above:', 'powerpress'); ?></strong><br /><i>
102
  <span id="powerpress_example_post_episode_title">
103
  <span id="powerpress_example_post_title" style="margin: 0 5px;"> <?php echo __('Blog Post Title', 'powerpress'); ?> </span>
104
  <span id="powerpress_example_episode_title" style="margin: 0 5px;"> <?php echo __('Custom Episode Title', 'powerpress'); ?> </span>
105
  </span>
106
- <span id="powerpress_example_show_title"> - <span style="margin: 0 5px;"><?php echo __('Show Title', 'powerpress'); ?></span></span>
107
  </i>
108
  </p>
109
  </td>
14
 
15
  <?php
16
 
17
+ if( !empty($General['seo_feed_title']) && $General['seo_feed_title'] == 1 )
 
 
18
  echo " jQuery('#powerpress_example_post_title').hide();\n";
19
  ?>
20
  jQuery('#seo_feed_title').change( function() {
23
  else
24
  jQuery('.powerpress_seo_feed_title').prop('checked', false);
25
  });
 
 
 
 
 
 
26
  jQuery('.powerpress_seo_feed_title').change( function() {
27
 
28
  jQuery('#seo_feed_title').prop('checked', true);
83
  <p><label style="display: block;"><input type="radio" class="powerpress_seo_feed_title" id="powerpress_seo_feed_title_3" name="General[seo_feed_title]" value="3" <?php if( $General['seo_feed_title'] == 3 ) echo 'checked'; ?> />
84
  <?php echo __('Feed episode title appended to post title', 'powerpress'); ?></label></p>
85
  </div>
 
 
 
 
 
 
86
  <p style="margin: 10px 0 0 40px;">
87
  <strong><?php echo __('Example based on options selected above:', 'powerpress'); ?></strong><br /><i>
88
  <span id="powerpress_example_post_episode_title">
89
  <span id="powerpress_example_post_title" style="margin: 0 5px;"> <?php echo __('Blog Post Title', 'powerpress'); ?> </span>
90
  <span id="powerpress_example_episode_title" style="margin: 0 5px;"> <?php echo __('Custom Episode Title', 'powerpress'); ?> </span>
91
  </span>
 
92
  </i>
93
  </p>
94
  </td>
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: amandato, blubrry
3
  Tags: podcasting, podcast, podcaster, powerpress, itunes, apple, apple podcasts, google podcasts, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, squarespace, youtube, viddler, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry, mp4, m4v, wordpressmu, mu, wordpress mu, multisite, multi site, mediacaster, post, plugin, posts, simple, social, dashboard, TSG, Buzzsprout, MTR, WP-boxCast, CastMyBlog, tgs podcasting, simple podcasting, seriously simple podcasting, seriously-simple-podcasting, serious, seriously, ssp, podlove, podcast.de, clammr, clammr radio, audio player, stitcher, tunein, show, shows, series, docs, documentation, support, free, add-ons, extensions, addons, libsyn, libsyn-podcasting, podbean, podomatic, spreaker
4
  Requires at least: 3.6
5
  Requires PHP: 5.2
6
- Tested up to: 4.9.7
7
- Stable tag: 7.3
8
  Donate link: https://create.blubrry.com/resources/podcast-media-hosting/
9
  License: GPLv2 or later
10
 
@@ -30,6 +30,7 @@ When you're ready you can switch to Advanced mode to tap into all the options pr
30
  = PowerPress Key Features =
31
  - Full Apple Podcasts (previously iTunes Podcasts) & Google Podcasts support: Adds Apple Podcast compliant podcast feeds to your WordPress site.
32
  - Integrated HTML5 Media Players: Audio/video Web players with embed support from sites such as YouTube.
 
33
  - Subscribe tools: Create subscribe page with our exclusive subscribe shortcode embed and subscribe sidebar widget optimized for responsive websites, high-resolution screens and Apple Retina displays.
34
  - Podcasting SEO: Improve discovery of your podcast on search engines such as Google, and with the Apple Podcasts directory.
35
  - Podcast Importing: Import your podcast from SoundCloud, LibSyn, PodBean, Squarespace, or other podcast RSS feed.
@@ -37,7 +38,7 @@ When you're ready you can switch to Advanced mode to tap into all the options pr
37
  - Multi-podcast support: Create separate podcasts by category (Category Podcasting) or by media format (Podcast Channels).
38
  - Post type and taxonomy podcasting: Create podcasts from custom post types and taxonomies.
39
  - *Media Statistics: Get FREE Blubrry Media Statistics from your WordPress dashboard.
40
- - Multi-languages and locales: See [PowerPress in your language](http://create.blubrry.com/resources/powerpress/powerpress-language/) for details.
41
 
42
  = Includes Full Apple Podcasts Support! =
43
  Blubrry PowerPress fully supports Apple Podcasts (previously iTunes podcasts), which is required for podcasting. PowerPress comes with the following Apple Podcasts specific features:
@@ -166,6 +167,7 @@ If you are having a problem specifically with the player and links, try the "Hav
166
  * [Eli's PowerPress Addon Widget](http://wordpress.org/extend/plugins/podpress-addons/) - Adds a sidebar widget that lists your podcast episodes linked to the play in a new window PowerPress player.
167
  * [PowerPress Posts From MySQL](http://wordpress.org/extend/plugins/powerpress-posts-from-mysql/developers/) - Creates blog posts with PowerPress podcast episode information from a MySQL table.
168
  * [Featured Podcast Widget](http://wordpress.org/plugins/featured-podcast-widget/), [Home Page](http://www.richardfarrar.com/featured-podcast-widget-for-wordpress/) - A widget that enables you to display your latest podcast from a category or featured podcast utilising the PowerPress plugin's default player.
 
169
 
170
 
171
  = Why doesn't Blubrry PowerPress support multiple enclosures in one feed item/post? =
@@ -232,6 +234,17 @@ To install Blubrry PowerPress manually, follow these steps:
232
  = Fan of PowerPress and want to show your support? =
233
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
234
 
 
 
 
 
 
 
 
 
 
 
 
235
  = 7.3 =
236
  * Released on 07/10/2018
237
  * Spotify and Google Podcasts subscribe links added to Destinations.
3
  Tags: podcasting, podcast, podcaster, powerpress, itunes, apple, apple podcasts, google podcasts, google play, enclosure, professional, apple, apple tv, ipad, iphone, soundcloud, squarespace, youtube, viddler, ustream, podcasting, audio, video, rss2, feed, player, media, rss, mp3, music, embed, feedburner, statistics, stats, flv, flash, id3, episodes, blubrry, mp4, m4v, wordpressmu, mu, wordpress mu, multisite, multi site, mediacaster, post, plugin, posts, simple, social, dashboard, TSG, Buzzsprout, MTR, WP-boxCast, CastMyBlog, tgs podcasting, simple podcasting, seriously simple podcasting, seriously-simple-podcasting, serious, seriously, ssp, podlove, podcast.de, clammr, clammr radio, audio player, stitcher, tunein, show, shows, series, docs, documentation, support, free, add-ons, extensions, addons, libsyn, libsyn-podcasting, podbean, podomatic, spreaker
4
  Requires at least: 3.6
5
  Requires PHP: 5.2
6
+ Tested up to: 4.9.9
7
+ Stable tag: 7.4
8
  Donate link: https://create.blubrry.com/resources/podcast-media-hosting/
9
  License: GPLv2 or later
10
 
30
  = PowerPress Key Features =
31
  - Full Apple Podcasts (previously iTunes Podcasts) & Google Podcasts support: Adds Apple Podcast compliant podcast feeds to your WordPress site.
32
  - Integrated HTML5 Media Players: Audio/video Web players with embed support from sites such as YouTube.
33
+ - NEW: [Skip to Position in Player](https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/skip-to-position-in-player/) shortcode
34
  - Subscribe tools: Create subscribe page with our exclusive subscribe shortcode embed and subscribe sidebar widget optimized for responsive websites, high-resolution screens and Apple Retina displays.
35
  - Podcasting SEO: Improve discovery of your podcast on search engines such as Google, and with the Apple Podcasts directory.
36
  - Podcast Importing: Import your podcast from SoundCloud, LibSyn, PodBean, Squarespace, or other podcast RSS feed.
38
  - Multi-podcast support: Create separate podcasts by category (Category Podcasting) or by media format (Podcast Channels).
39
  - Post type and taxonomy podcasting: Create podcasts from custom post types and taxonomies.
40
  - *Media Statistics: Get FREE Blubrry Media Statistics from your WordPress dashboard.
41
+ - Multi-languages, locales and emoji support: See [PowerPress in your language](http://create.blubrry.com/resources/powerpress/powerpress-language/) and [Enable Emoji in podcast feeds](https://create.blubrry.com/resources/powerpress/powerpress-settings/feeds/#emoji) for details.
42
 
43
  = Includes Full Apple Podcasts Support! =
44
  Blubrry PowerPress fully supports Apple Podcasts (previously iTunes podcasts), which is required for podcasting. PowerPress comes with the following Apple Podcasts specific features:
167
  * [Eli's PowerPress Addon Widget](http://wordpress.org/extend/plugins/podpress-addons/) - Adds a sidebar widget that lists your podcast episodes linked to the play in a new window PowerPress player.
168
  * [PowerPress Posts From MySQL](http://wordpress.org/extend/plugins/powerpress-posts-from-mysql/developers/) - Creates blog posts with PowerPress podcast episode information from a MySQL table.
169
  * [Featured Podcast Widget](http://wordpress.org/plugins/featured-podcast-widget/), [Home Page](http://www.richardfarrar.com/featured-podcast-widget-for-wordpress/) - A widget that enables you to display your latest podcast from a category or featured podcast utilising the PowerPress plugin's default player.
170
+ * [Skip to Timestamp](https://wordpress.org/plugins/skip-to-timestamp/) - Skip to Timestamp allows for generating links in your posts that automatically skip to a given time in an audio, video or youtube embed.
171
 
172
 
173
  = Why doesn't Blubrry PowerPress support multiple enclosures in one feed item/post? =
234
  = Fan of PowerPress and want to show your support? =
235
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
236
 
237
+
238
+ = 7.4 =
239
+ * Released on 10/03/2018
240
+ * NEW: [Skip to Position in Player](https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/skip-to-position-in-player/) shortcode, quickly skip to a position in your audio episodes from your show notes. e.g. `[skipto time="2:34"]` [Learn more](https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/skip-to-position-in-player/)
241
+ * MEW: Emoji in show notes! You can now enter Emoji characters into the show notes to appear in podcast apps. Enable option in Feed settings tab. Previously WordPress converst Emoji to images which are not displayed in podcast apps. [Learn more](https://create.blubrry.com/resources/powerpress/powerpress-settings/feeds/#emoji)
242
+ * Added option to override the Google Podcasts subscribe URL.
243
+ * Enhanced VideoObject, a feature in Podcasting SEO.
244
+ * Improved base64 encoding Google Podcasts Subscribe URLs. (Thanks Daniel Lewis for the heads up!)
245
+ * Removed option `Append show title to episode titles` per request from Apple.
246
+
247
+
248
  = 7.3 =
249
  * Released on 07/10/2018
250
  * Spotify and Google Podcasts subscribe links added to Destinations.
views/settings_tab_appearance.php CHANGED
@@ -73,7 +73,7 @@
73
  <?php
74
  }
75
  ?>
76
- <p><a href="http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/subscribe-page/" target="_blank"><?php echo __('Learn more about the PowerPress Subscribe Page', 'powerpress'); ?></a></p>
77
  <?php
78
  // TODO: use the $FeedAttribs to create a recommended shortcode for this particular channel, may be simple [powerpress_subscribe] or it may specify the category, taxonomy, and/or feed_slug/post tpe podcasting
79
  ?>
@@ -127,7 +127,7 @@
127
  <?php echo __('The Player shortcode is used to position your media presentation (player and download links) exactly where you want within your post or page content.', 'powerpress'); ?>
128
  </p>
129
  <p>
130
- <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/shortcode/" target="_blank">'. __('PowerPress Player Shortcode', 'powerpress') .'</a>' ); ?>
131
  </p>
132
  <p class="description">
133
  <?php echo __('Note: When specifying a URL to media in the powerpress shortcode, only the player is included. The Media Links will <u>NOT</u> be included since there is not enough meta information to display them.', 'powerpress'); ?>
@@ -147,7 +147,7 @@
147
  <?php echo __('The Playlist shortcode is used to display a player with a playlist of your podcast episodes. It utilizes the default playlist built into WordPress.', 'powerpress'); ?>
148
  </p>
149
  <p>
150
- <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-playlist-shortcode/" target="_blank">'. __('PowerPress Playlist Shortcode', 'powerpress') .'</a>' ); ?>
151
  </p>
152
 
153
  <h3><?php echo __('PowerPress Subscribe Shortcode', 'powerpress'); ?> </h3>
@@ -158,7 +158,26 @@
158
  <?php echo __('The Subscribe shortcode is used to display a subscribe to podcast widget for your podcast. It is intended for use on a custom subscribe page. See the Subscribe Page section below for more details.', 'powerpress'); ?>
159
  </p>
160
  <p>
161
- <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="http://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-subscribe-shortcode/" target="_blank">'. __('PowerPress Subscribe Shortcode', 'powerpress') .'</a>' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  </p>
163
 
164
  </td>
73
  <?php
74
  }
75
  ?>
76
+ <p><a href="https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/subscribe-page/" target="_blank"><?php echo __('Learn more about the PowerPress Subscribe Page', 'powerpress'); ?></a></p>
77
  <?php
78
  // TODO: use the $FeedAttribs to create a recommended shortcode for this particular channel, may be simple [powerpress_subscribe] or it may specify the category, taxonomy, and/or feed_slug/post tpe podcasting
79
  ?>
127
  <?php echo __('The Player shortcode is used to position your media presentation (player and download links) exactly where you want within your post or page content.', 'powerpress'); ?>
128
  </p>
129
  <p>
130
+ <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/shortcode/" target="_blank">'. __('PowerPress Player Shortcode', 'powerpress') .'</a>' ); ?>
131
  </p>
132
  <p class="description">
133
  <?php echo __('Note: When specifying a URL to media in the powerpress shortcode, only the player is included. The Media Links will <u>NOT</u> be included since there is not enough meta information to display them.', 'powerpress'); ?>
147
  <?php echo __('The Playlist shortcode is used to display a player with a playlist of your podcast episodes. It utilizes the default playlist built into WordPress.', 'powerpress'); ?>
148
  </p>
149
  <p>
150
+ <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-playlist-shortcode/" target="_blank">'. __('PowerPress Playlist Shortcode', 'powerpress') .'</a>' ); ?>
151
  </p>
152
 
153
  <h3><?php echo __('PowerPress Subscribe Shortcode', 'powerpress'); ?> </h3>
158
  <?php echo __('The Subscribe shortcode is used to display a subscribe to podcast widget for your podcast. It is intended for use on a custom subscribe page. See the Subscribe Page section below for more details.', 'powerpress'); ?>
159
  </p>
160
  <p>
161
+ <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/powerpress-subscribe-shortcode/" target="_blank">'. __('PowerPress Subscribe Shortcode', 'powerpress') .'</a>' ); ?>
162
+ </p>
163
+
164
+
165
+
166
+ <h3><?php echo __('PowerPress Skip-to-Position in Player Shortcode', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></h3>
167
+ <p>
168
+ <?php echo '<code>[skipto time="TIME"]</code>'; ?>
169
+ </p>
170
+ <p>
171
+ <?php echo __('The Skip-to-Position in Player shortcode creates a link in your page to skip to the specified position in the player. Time may be entered in seconds, minutes:seconds, or hours:minutes:seconds. A label may be specified by providing text followed by a closing shortcode tag. See examples below.', 'powerpress'); ?>
172
+ </p>
173
+ <ul style="margin-left: 40px;">
174
+ <li>[skipto time="45"] &#8212; <a href="#" onclick="return false;">0:45</a></li>
175
+ <li>[skipto time="45"]Skip intro[/skipto] &#8212; <a href="#" onclick="return false;">Skip intro</a></li>
176
+ <li>[skipto time="3:05"] <?php echo __('or', 'powerpress'); ?> [skipto time="185"] &#8212; <a href="#" onclick="return false;">3:05</a></li>
177
+ <li>[skipto time="1:23:45"] <?php echo __('or', 'powerpress'); ?> [skipto time="83:45"] <?php echo __('or', 'powerpress'); ?> [skipto time="5025"] &#8212; <a href="#" onclick="return false;">1:23:45</a></li>
178
+ </ul>
179
+ <p>
180
+ <?php echo sprintf(__('Please visit the %s page for additional options.', 'powerpress'), '<a href="https://create.blubrry.com/resources/powerpress/advanced-tools-and-options/skip-to-position-in-player/" target="_blank">'. __('PowerPress Skip-to-Position in Player Shortcode', 'powerpress') .'</a>' ); ?>
181
  </p>
182
 
183
  </td>
views/settings_tab_destinations.php CHANGED
@@ -39,9 +39,11 @@
39
  if( empty($FeedSettings['tunein_url']) )
40
  $FeedSettings['tunein_url'] = '';
41
  if( empty($FeedSettings['spotify_url']) )
42
- $FeedSettings['spotify_url'] = '';
 
 
43
 
44
- $googleUrl = 'https://www.google.com/podcasts?feed='.base64_encode($feed_url);
45
  ?>
46
 
47
 
@@ -66,7 +68,7 @@
66
  <tr valign="top">
67
  <th scope="row"><?php echo __('Apple', 'powerpress'); ?></th>
68
  <td>
69
- <p><strong><a href="http://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-itunes/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Apple', 'powerpress'); ?></a></strong></p>
70
  <label for="itunes_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Apple Subscription URL', 'powerpress'); ?></label>
71
  <input type="text" style="width: 80%;" id="itunes_url" name="Feed[itunes_url]" value="<?php echo esc_attr($FeedSettings['itunes_url']); ?>" maxlength="255" />
72
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://itunes.apple.com/podcast/title-of-podcast/id<strong>000000000</strong>'); ?></p>
@@ -79,14 +81,35 @@
79
  <tr valign="top">
80
  <th scope="row"><?php echo __('Google', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></th>
81
  <td>
82
- <p><strong><a href="http://create.blubrry.com/manual/podcast-promotion/submit-podcast-google-podcasts/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Learn more about Google Podcasts', 'powerpress'); ?></a></strong></p>
83
  <label for="googleplay_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Google Listing URL', 'powerpress'); ?></label>
84
- <input type="text" class="bpp-input-normal" id="googleplay_url" name="Null[google_url]" value="<?php echo esc_attr($googleUrl); ?>" maxlength="255" readOnly onclick="javascript: this.select();" onfocus="javascript: this.select();" />
 
 
85
  <p><?php echo __('Google Podcasts directory is available through Google search, Google Home smart speakers, and the new Google Podcasts app for Android. As long as your podcast website is discoverable by Google search, your podcast will be included in this directory.', 'powerpress'); ?></p>
86
  </td>
87
  </tr>
88
  </table>
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  <table class="form-table">
91
  <tr valign="top">
92
  <th scope="row"><?php echo __('Blubrry Podcast Directory', 'powerpress'); ?></th>
@@ -95,7 +118,7 @@
95
  <p>
96
  <?php echo __('The largest podcast directory in the World!', 'powerpress'); ?>
97
  </p><p>
98
- <?php echo sprintf(__('Once listed, %s to expand your podcast distribution to Blubrry\'s SmartTV Apps (e.g. Roku) and apply to be on Spotify.', 'powerpress'), '<a href="http://create.blubrry.com/resources/blubrry-podcast-directory/" target="_blank">'. __('Get Featured', 'powerpress').'</a>' ); ?>
99
  </p>
100
  <label for="blubrry_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Blubrry Listing URL', 'powerpress'); ?></label>
101
  <input type="text" class="bpp-input-normal" id="blubrry_url" name="Feed[blubrry_url]" value="<?php echo esc_attr($FeedSettings['blubrry_url']); ?>" maxlength="255" />
@@ -108,7 +131,7 @@
108
  <tr valign="top">
109
  <th scope="row"><?php echo __('Stitcher Podcast Radio', 'powerpress'); ?></th>
110
  <td>
111
- <p><strong><a href="http://create.blubrry.com/manual/podcast-promotion/publish-podcast-stitcher/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Stitcher', 'powerpress'); ?></a></strong></p>
112
  <label for="stitcher_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Stitcher Listing URL', 'powerpress'); ?></label>
113
  <input type="text" class="bpp-input-normal" id="stitcher_url" name="Feed[stitcher_url]" value="<?php echo esc_attr($FeedSettings['stitcher_url']); ?>" maxlength="255" />
114
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://www.stitcher.com/podcast/your/listing-url/'); ?></p>
@@ -120,7 +143,7 @@
120
  <tr valign="top">
121
  <th scope="row"><?php echo __('TuneIn', 'powerpress'); ?></th>
122
  <td>
123
- <p><strong><a href="http://create.blubrry.com/manual/podcast-promotion/publish-podcast-tunein/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to TuneIn', 'powerpress'); ?></a></strong></p>
124
  <label for="tunein_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('TuneIn Listing URL', 'powerpress'); ?></label>
125
  <input type="text" class="bpp-input-normal" id="tunein_url" name="Feed[tunein_url]" value="<?php echo esc_attr($FeedSettings['tunein_url']); ?>" maxlength="255" />
126
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://tunein.com/radio/your-podcast-p000000/'); ?></p>
@@ -133,7 +156,7 @@
133
  <tr valign="top">
134
  <th scope="row"><?php echo __('Spotify', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></th>
135
  <td>
136
- <p><strong><a href="http://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-spotify/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Spotify', 'powerpress'); ?></a></strong></p>
137
  <label for="tunein_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Spotify Listing URL', 'powerpress'); ?></label>
138
  <input type="text" class="bpp-input-normal" id="spotify_url" name="Feed[spotify_url]" value="<?php echo esc_attr($FeedSettings['spotify_url']); ?>" maxlength="255" />
139
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'https://open.spotify.com/show/abcdefghijklmnopqrstu'); ?></p>
39
  if( empty($FeedSettings['tunein_url']) )
40
  $FeedSettings['tunein_url'] = '';
41
  if( empty($FeedSettings['spotify_url']) )
42
+ $FeedSettings['spotify_url'] = '';
43
+ if( empty($FeedSettings['google_url']) )
44
+ $FeedSettings['google_url'] = '';
45
 
46
+ $googleUrl = 'https://www.google.com/podcasts?feed='.powerpress_base64_encode($feed_url);
47
  ?>
48
 
49
 
68
  <tr valign="top">
69
  <th scope="row"><?php echo __('Apple', 'powerpress'); ?></th>
70
  <td>
71
+ <p><strong><a href="https://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-itunes/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Apple', 'powerpress'); ?></a></strong></p>
72
  <label for="itunes_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Apple Subscription URL', 'powerpress'); ?></label>
73
  <input type="text" style="width: 80%;" id="itunes_url" name="Feed[itunes_url]" value="<?php echo esc_attr($FeedSettings['itunes_url']); ?>" maxlength="255" />
74
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://itunes.apple.com/podcast/title-of-podcast/id<strong>000000000</strong>'); ?></p>
81
  <tr valign="top">
82
  <th scope="row"><?php echo __('Google', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></th>
83
  <td>
84
+ <p><strong><a href="https://create.blubrry.com/manual/podcast-promotion/submit-podcast-google-podcasts/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Learn more about Google Podcasts', 'powerpress'); ?></a></strong></p>
85
  <label for="googleplay_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Google Listing URL', 'powerpress'); ?></label>
86
+ <input type="text" class="bpp-input-normal" style="<?php echo ( empty($FeedSettings['google_url'])?'':'display: none;'); ?>" id="google_url" name="Null[google_url]" value="<?php echo esc_attr($googleUrl); ?>" maxlength="255" readOnly onclick="javascript: this.select();" onfocus="javascript: this.select();" />
87
+ <input type="text" class="bpp-input-normal" placeholder="<?php echo esc_attr($googleUrl); ?>" style="<?php echo ( empty($FeedSettings['google_url'])?'display: none;':''); ?>" id="google_url_override" name="Feed[google_url]" value="<?php echo esc_attr($FeedSettings['google_url']); ?>" maxlength="255" />
88
+ <label><input type="checkbox" name="NULL[google_url_toggle]" id="google_url_toggle" value="1" <?php echo ( empty($FeedSettings['google_url'])?'':'checked'); ?> /> <?php echo __('Modify', 'powerpress'); ?></label>
89
  <p><?php echo __('Google Podcasts directory is available through Google search, Google Home smart speakers, and the new Google Podcasts app for Android. As long as your podcast website is discoverable by Google search, your podcast will be included in this directory.', 'powerpress'); ?></p>
90
  </td>
91
  </tr>
92
  </table>
93
 
94
+ <script>
95
+ jQuery( document ).ready(function() {
96
+ // Handler for .ready() called.
97
+ jQuery('#google_url_toggle').click( function(e) {
98
+ if( this.checked ) {
99
+ jQuery('#google_url').hide();
100
+ jQuery('#google_url_override').show();
101
+ } else {
102
+ if( confirm('<?php echo esc_js( __('Reset, are you sure?', 'powerpres') ); ?>') ) {
103
+ jQuery('#google_url_override').val('');
104
+ jQuery('#google_url_override').hide();
105
+ jQuery('#google_url').show();
106
+ } else {
107
+ e.preventDefault();
108
+ }
109
+ }
110
+ });
111
+ });
112
+ </script>
113
  <table class="form-table">
114
  <tr valign="top">
115
  <th scope="row"><?php echo __('Blubrry Podcast Directory', 'powerpress'); ?></th>
118
  <p>
119
  <?php echo __('The largest podcast directory in the World!', 'powerpress'); ?>
120
  </p><p>
121
+ <?php echo sprintf(__('Once listed, %s to expand your podcast distribution to Blubrry\'s SmartTV Apps (e.g. Roku) and apply to be on Spotify.', 'powerpress'), '<a href="https://create.blubrry.com/resources/blubrry-podcast-directory/" target="_blank">'. __('Get Featured', 'powerpress').'</a>' ); ?>
122
  </p>
123
  <label for="blubrry_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Blubrry Listing URL', 'powerpress'); ?></label>
124
  <input type="text" class="bpp-input-normal" id="blubrry_url" name="Feed[blubrry_url]" value="<?php echo esc_attr($FeedSettings['blubrry_url']); ?>" maxlength="255" />
131
  <tr valign="top">
132
  <th scope="row"><?php echo __('Stitcher Podcast Radio', 'powerpress'); ?></th>
133
  <td>
134
+ <p><strong><a href="https://create.blubrry.com/manual/podcast-promotion/publish-podcast-stitcher/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Stitcher', 'powerpress'); ?></a></strong></p>
135
  <label for="stitcher_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Stitcher Listing URL', 'powerpress'); ?></label>
136
  <input type="text" class="bpp-input-normal" id="stitcher_url" name="Feed[stitcher_url]" value="<?php echo esc_attr($FeedSettings['stitcher_url']); ?>" maxlength="255" />
137
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://www.stitcher.com/podcast/your/listing-url/'); ?></p>
143
  <tr valign="top">
144
  <th scope="row"><?php echo __('TuneIn', 'powerpress'); ?></th>
145
  <td>
146
+ <p><strong><a href="https://create.blubrry.com/manual/podcast-promotion/publish-podcast-tunein/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to TuneIn', 'powerpress'); ?></a></strong></p>
147
  <label for="tunein_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('TuneIn Listing URL', 'powerpress'); ?></label>
148
  <input type="text" class="bpp-input-normal" id="tunein_url" name="Feed[tunein_url]" value="<?php echo esc_attr($FeedSettings['tunein_url']); ?>" maxlength="255" />
149
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'http://tunein.com/radio/your-podcast-p000000/'); ?></p>
156
  <tr valign="top">
157
  <th scope="row"><?php echo __('Spotify', 'powerpress'); ?> <?php echo powerpressadmin_new(); ?></th>
158
  <td>
159
+ <p><strong><a href="https://create.blubrry.com/manual/podcast-promotion/submit-podcast-to-spotify/?podcast-feed=<?php echo urlencode($feed_url); ?>" target="_blank"><?php echo __('Submit podcast to Spotify', 'powerpress'); ?></a></strong></p>
160
  <label for="tunein_url" style="font-size: 120%; display: block; font-weight: bold;"><?php echo __('Spotify Listing URL', 'powerpress'); ?></label>
161
  <input type="text" class="bpp-input-normal" id="spotify_url" name="Feed[spotify_url]" value="<?php echo esc_attr($FeedSettings['spotify_url']); ?>" maxlength="255" />
162
  <p class="description"><?php echo sprintf(__('e.g. %s', 'powerpress'), 'https://open.spotify.com/show/abcdefghijklmnopqrstu'); ?></p>