Version Description
- 20/02/2017 =
- Added $sizes param to feedzy_thumb_output.
- Added check when title is empty.
- Fixed image encoding url.
Download this release
Release Info
Developer | codeinwp |
Plugin | FEEDZY RSS Feeds Lite |
Version | 3.0.8 |
Comparing to | |
See all releases |
Code changes from version 3.0.7 to 3.0.8
- CHANGELOG.md +5 -3
- css/feedzy-rss-feeds.css +2 -2
- feedzy-rss-feed.php +1 -1
- includes/abstract/feedzy-rss-feeds-admin-abstract.php +425 -382
- includes/feedzy-rss-feeds.php +1 -1
- languages/feedzy-rss-feeds.pot +5 -5
- readme.txt +5 -0
CHANGELOG.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
|
|
|
|
|
|
|
2 |
-
|
3 |
-
|
4 |
|
5 |
|
6 |
|
7 |
-
Fixed is_new when pro is active.
|
1 |
|
2 |
+
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
|
8 |
|
9 |
|
|
css/feedzy-rss-feeds.css
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* feedzy-rss-feeds.css
|
3 |
* Feedzy RSS Feed
|
4 |
* Copyright: (c) 2016 Themeisle, themeisle.com
|
5 |
-
* Version: 3.0.
|
6 |
* Plugin Name: FEEDZY RSS Feeds
|
7 |
* Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
|
8 |
* Author: Themeisle
|
@@ -48,7 +48,7 @@
|
|
48 |
|
49 |
/*noinspection CssUnusedSymbol*/
|
50 |
.feedzy-rss .rss_item .rss_image .fetched {
|
51 |
-
z-index:
|
52 |
}
|
53 |
|
54 |
.feedzy-rss .rss_item .rss_image {
|
2 |
* feedzy-rss-feeds.css
|
3 |
* Feedzy RSS Feed
|
4 |
* Copyright: (c) 2016 Themeisle, themeisle.com
|
5 |
+
* Version: 3.0.8
|
6 |
* Plugin Name: FEEDZY RSS Feeds
|
7 |
* Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
|
8 |
* Author: Themeisle
|
48 |
|
49 |
/*noinspection CssUnusedSymbol*/
|
50 |
.feedzy-rss .rss_item .rss_image .fetched {
|
51 |
+
z-index: 9;
|
52 |
}
|
53 |
|
54 |
.feedzy-rss .rss_item .rss_image {
|
feedzy-rss-feed.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* Plugin Name: Feedzy RSS Feeds Lite
|
16 |
* Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds-lite/
|
17 |
* Description: This is a short description of what the plugin does. It's displayed in the WordPress admin area.
|
18 |
-
* Version: 3.0.
|
19 |
* Author: Themeisle
|
20 |
* Author URI: http://themeisle.com
|
21 |
* License: GPL-2.0+
|
15 |
* Plugin Name: Feedzy RSS Feeds Lite
|
16 |
* Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds-lite/
|
17 |
* Description: This is a short description of what the plugin does. It's displayed in the WordPress admin area.
|
18 |
+
* Version: 3.0.8
|
19 |
* Author: Themeisle
|
20 |
* Author URI: http://themeisle.com
|
21 |
* License: GPL-2.0+
|
includes/abstract/feedzy-rss-feeds-admin-abstract.php
CHANGED
@@ -8,6 +8,7 @@
|
|
8 |
* @package feedzy-rss-feeds
|
9 |
* @subpackage feedzy-rss-feeds/includes/abstract
|
10 |
*/
|
|
|
11 |
/**
|
12 |
* The Feedzy RSS functions of the plugin.
|
13 |
*
|
@@ -20,17 +21,19 @@
|
|
20 |
*/
|
21 |
abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
22 |
|
23 |
-
|
24 |
/**
|
25 |
* Defines the default image to use on RSS Feeds
|
26 |
*
|
27 |
* @since 3.0.0
|
28 |
* @access public
|
|
|
29 |
* @param string $imageSrc The image source, currently not used.
|
|
|
30 |
* @return string
|
31 |
*/
|
32 |
public function feedzy_define_default_image( $imageSrc ) {
|
33 |
$defaultImg = FEEDZY_ABSURL . '/img/feedzy-default.jpg';
|
|
|
34 |
return apply_filters( 'feedzy_define_default_image_filter', $defaultImg );
|
35 |
}
|
36 |
|
@@ -42,12 +45,15 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
42 |
*
|
43 |
* @since 3.0.0
|
44 |
* @access public
|
|
|
45 |
* @param object $error The error Object.
|
46 |
* @param string $feedURL The feed URL.
|
|
|
47 |
* @return string
|
48 |
*/
|
49 |
-
public function feedzy_default_error_notice( $error, $feedURL
|
50 |
error_log( 'Feedzy RSS Feeds - related feed: ' . print_r( $feedURL ) . ' - Error message: ' . $this->feedzy_array_obj_string( $error ) );
|
|
|
51 |
return '<div id="message" class="error" data-error"' . esc_attr( $this->feedzy_array_obj_string( $error ) ) . '"><p>' . __( 'Sorry, this feed is currently unavailable or does not exists anymore.', 'feedzy-rss-feeds' ) . '</p></div>';
|
52 |
}
|
53 |
|
@@ -56,7 +62,9 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
56 |
*
|
57 |
* @since 3.0.0
|
58 |
* @access public
|
|
|
59 |
* @param object $error The error Object.
|
|
|
60 |
* @return string
|
61 |
*/
|
62 |
public function feedzy_array_obj_string( $error ) {
|
@@ -72,14 +80,17 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
72 |
*
|
73 |
* @since 3.0.0
|
74 |
* @access public
|
75 |
-
*
|
76 |
-
* @param
|
|
|
|
|
77 |
* @return string
|
78 |
*/
|
79 |
public function feedzy_add_item_padding( $itemAttr, $sizes ) {
|
80 |
-
$paddinTop
|
81 |
$paddinBottom = number_format( ( 25 / 150 ) * $sizes['height'], 0 );
|
82 |
$stylePadding = ' style="padding: ' . $paddinTop . 'px 0 ' . $paddinBottom . 'px"';
|
|
|
83 |
return $itemAttr . $stylePadding;
|
84 |
}
|
85 |
|
@@ -88,220 +99,29 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
88 |
*
|
89 |
* @since 3.0.0
|
90 |
* @access public
|
91 |
-
*
|
|
|
|
|
92 |
* @return string
|
93 |
*/
|
94 |
public function feedzy_classes_item( $itemAttr = '', $sizes = '', $item = '', $feedURL = '', $sc = '' ) {
|
95 |
$classes = array( 'rss_item' );
|
96 |
$classes = apply_filters( 'feedzy_add_classes_item', $classes, $sc );
|
97 |
$classes = ' class="' . implode( ' ', $classes ) . '"';
|
98 |
-
return $itemAttr . $classes;
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Retrive image from the item object
|
103 |
-
*
|
104 |
-
* @since 3.0.0
|
105 |
-
* @access public
|
106 |
-
* @param object $item The item object.
|
107 |
-
* @return string
|
108 |
-
*/
|
109 |
-
public function feedzy_retrieve_image( $item ) {
|
110 |
-
$theThumbnail = '';
|
111 |
-
if ( $enclosures = $item->get_enclosures() ) {
|
112 |
-
foreach ( (array) $enclosures as $enclosure ) {
|
113 |
-
// Item thumbnail
|
114 |
-
if ( $thumbnail = $enclosure->get_thumbnail() ) {
|
115 |
-
$theThumbnail = $thumbnail;
|
116 |
-
}
|
117 |
-
|
118 |
-
if ( isset( $enclosure->thumbnails ) ) {
|
119 |
-
foreach ( (array) $enclosure->thumbnails as $thumbnail ) {
|
120 |
-
$theThumbnail = $thumbnail;
|
121 |
-
}
|
122 |
-
}
|
123 |
-
|
124 |
-
if ( $thumbnail = $enclosure->embed() ) {
|
125 |
-
$pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/iU';
|
126 |
-
if ( preg_match( $pattern, $thumbnail, $matches ) ) {
|
127 |
-
$theThumbnail = $matches[0];
|
128 |
-
}
|
129 |
-
}
|
130 |
-
|
131 |
-
foreach ( (array) $enclosure->get_link() as $thumbnail ) {
|
132 |
-
$pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/iU';
|
133 |
-
$imgsrc = $thumbnail;
|
134 |
-
|
135 |
-
if ( preg_match( $pattern, $imgsrc, $matches ) ) {
|
136 |
-
$theThumbnail = $matches[0];
|
137 |
-
break;
|
138 |
-
}
|
139 |
-
}
|
140 |
-
|
141 |
-
// Break loop if thumbnail is found
|
142 |
-
if ( ! empty( $theThumbnail ) ) {
|
143 |
-
break;
|
144 |
-
}
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
// xmlns:itunes podcast
|
149 |
-
if ( empty( $theThumbnail ) ) {
|
150 |
-
$data = $item->get_item_tags( 'http://www.itunes.com/dtds/podcast-1.0.dtd', 'image' );
|
151 |
-
if ( isset( $data['0']['attribs']['']['href'] ) && ! empty( $data['0']['attribs']['']['href'] ) ) {
|
152 |
-
$theThumbnail = $data['0']['attribs']['']['href'];
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
// Content image
|
157 |
-
if ( empty( $theThumbnail ) ) {
|
158 |
-
$feedDescription = $item->get_content();
|
159 |
-
$theThumbnail = $this->feedzy_return_image( $feedDescription );
|
160 |
-
}
|
161 |
-
|
162 |
-
// Description image
|
163 |
-
if ( empty( $theThumbnail ) ) {
|
164 |
-
$feedDescription = $item->get_description();
|
165 |
-
$theThumbnail = $this->feedzy_return_image( $feedDescription );
|
166 |
-
}
|
167 |
-
|
168 |
-
return $theThumbnail;
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Get an image from a string
|
173 |
-
*
|
174 |
-
* @since 3.0.0
|
175 |
-
* @access public
|
176 |
-
* @param string $string A string with an <img/> tag.
|
177 |
-
* @return string
|
178 |
-
*/
|
179 |
-
public function feedzy_return_image( $string ) {
|
180 |
-
$img = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
|
181 |
-
$pattern = '/<img[^>]+\>/i';
|
182 |
-
preg_match( $pattern, $img, $matches );
|
183 |
-
if ( isset( $matches[0] ) ) {
|
184 |
-
$blacklistCount = 0;
|
185 |
-
foreach ( $matches as $matche ) {
|
186 |
-
$link = $this->feedzy_scrape_image( $matche );
|
187 |
-
$blacklist = array();
|
188 |
-
$blacklist = apply_filters( 'feedzy_feed_blacklist_images', $this->feedzy_blacklist_images( $blacklist ) );
|
189 |
-
foreach ( $blacklist as $string ) {
|
190 |
-
if ( strpos( (string) $link, $string ) !== false ) {
|
191 |
-
$blacklistCount++;
|
192 |
-
}
|
193 |
-
}
|
194 |
-
if ( $blacklistCount == 0 ) { break;
|
195 |
-
}
|
196 |
-
}
|
197 |
-
if ( $blacklistCount == 0 ) { return $link;
|
198 |
-
}
|
199 |
-
}
|
200 |
-
return '';
|
201 |
-
}
|
202 |
|
203 |
-
|
204 |
-
* Scrape an image for link from a string with an <img/>
|
205 |
-
*
|
206 |
-
* @since 3.0.0
|
207 |
-
* @access public
|
208 |
-
* @param string $string A string with an <img/> tag.
|
209 |
-
* @param string $link The link to search for.
|
210 |
-
* @return string
|
211 |
-
*/
|
212 |
-
public function feedzy_scrape_image( $string, $link = '' ) {
|
213 |
-
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
|
214 |
-
preg_match( $pattern, $string, $link );
|
215 |
-
if ( isset( $link[1] ) ) {
|
216 |
-
$link = urldecode( $link[1] );
|
217 |
-
}
|
218 |
-
return $link;
|
219 |
}
|
220 |
|
221 |
/**
|
222 |
-
*
|
223 |
*
|
224 |
* @since 3.0.0
|
225 |
* @access public
|
226 |
-
* @param array $blacklist An array with blacklisted resources.
|
227 |
-
* @return array
|
228 |
-
*/
|
229 |
-
public function feedzy_blacklist_images( $blacklist ) {
|
230 |
-
$blacklist = array(
|
231 |
-
'frownie.png',
|
232 |
-
'icon_arrow.gif',
|
233 |
-
'icon_biggrin.gif',
|
234 |
-
'icon_confused.gif',
|
235 |
-
'icon_cool.gif',
|
236 |
-
'icon_cry.gif',
|
237 |
-
'icon_eek.gif',
|
238 |
-
'icon_evil.gif',
|
239 |
-
'icon_exclaim.gif',
|
240 |
-
'icon_idea.gif',
|
241 |
-
'icon_lol.gif',
|
242 |
-
'icon_mad.gif',
|
243 |
-
'icon_mrgreen.gif',
|
244 |
-
'icon_neutral.gif',
|
245 |
-
'icon_question.gif',
|
246 |
-
'icon_razz.gif',
|
247 |
-
'icon_redface.gif',
|
248 |
-
'icon_rolleyes.gif',
|
249 |
-
'icon_sad.gif',
|
250 |
-
'icon_smile.gif',
|
251 |
-
'icon_surprised.gif',
|
252 |
-
'icon_twisted.gif',
|
253 |
-
'icon_wink.gif',
|
254 |
-
'mrgreen.png',
|
255 |
-
'rolleyes.png',
|
256 |
-
'simple-smile.png',
|
257 |
-
);
|
258 |
-
return $blacklist;
|
259 |
-
}
|
260 |
-
|
261 |
-
/**
|
262 |
-
* Image name encoder and url retrive if in url param
|
263 |
*
|
264 |
-
* @
|
265 |
-
* @
|
266 |
-
* @param string $
|
267 |
-
* @return string
|
268 |
-
*/
|
269 |
-
public function feedzy_image_encode( $string ) {
|
270 |
-
// Check if img url is set as an URL parameter
|
271 |
-
$url_tab = parse_url( $string );
|
272 |
-
if ( isset( $url_tab['query'] ) ) {
|
273 |
-
preg_match_all( '/(http|https):\/\/[^ ]+(\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG)/', $url_tab['query'], $imgUrl );
|
274 |
-
if ( isset( $imgUrl[0][0] ) ) {
|
275 |
-
$string = $imgUrl[0][0];
|
276 |
-
}
|
277 |
-
}
|
278 |
-
|
279 |
-
// Encode image name only en keep extra parameters
|
280 |
-
$query = $extention = '';
|
281 |
-
$url_tab = parse_url( $string );
|
282 |
-
if ( isset( $url_tab['query'] ) ) {
|
283 |
-
$query = '?' . $url_tab['query'];
|
284 |
-
}
|
285 |
-
$path_parts = pathinfo( $string );
|
286 |
-
$path = $path_parts['dirname'];
|
287 |
-
$file = rawurldecode( $path_parts['filename'] );
|
288 |
-
$extention = pathinfo( $url_tab['path'], PATHINFO_EXTENSION );
|
289 |
-
if ( ! empty( $extention ) ) {
|
290 |
-
$extention = '.' . $extention;
|
291 |
-
}
|
292 |
-
|
293 |
-
// Return a well encoded image url
|
294 |
-
return $path . '/' . rawurlencode( $file ) . $extention . $query;
|
295 |
-
}
|
296 |
-
|
297 |
-
/**
|
298 |
-
* Filter feed description input
|
299 |
*
|
300 |
-
* @since 3.0.0
|
301 |
-
* @access public
|
302 |
-
* @param string $description The feed description.
|
303 |
-
* @param string $content The feed description.
|
304 |
-
* @param string $feedURL The feed URL.
|
305 |
* @return string
|
306 |
*/
|
307 |
public function feedzy_summary_input_filter( $description, $content, $feedURL ) {
|
@@ -316,17 +136,18 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
316 |
*
|
317 |
* @since 3.0.0
|
318 |
* @access public
|
|
|
319 |
* @param boolean $continue A boolean to stop the script.
|
320 |
-
* @param array $sc
|
321 |
-
* @param object $item
|
322 |
-
* @param string $feedURL
|
|
|
323 |
* @return boolean
|
324 |
*/
|
325 |
public function feedzy_feed_item_keywords_title( $continue, $sc, $item, $feedURL ) {
|
326 |
if ( feedzy_is_new() && ! feedzy_is_pro() ) {
|
327 |
return true;
|
328 |
}
|
329 |
-
|
330 |
$keywords_title = $sc['keywords_title'];
|
331 |
if ( ! empty( $keywords_title ) ) {
|
332 |
$continue = false;
|
@@ -336,10 +157,10 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
336 |
}
|
337 |
}
|
338 |
}
|
|
|
339 |
return $continue;
|
340 |
}
|
341 |
|
342 |
-
|
343 |
/**
|
344 |
* Include cover picture (medium) to rss feed enclosure
|
345 |
* and media:content
|
@@ -349,44 +170,125 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
349 |
*/
|
350 |
public function feedzy_include_thumbnail_rss() {
|
351 |
global $post;
|
352 |
-
|
353 |
if ( has_post_thumbnail( $post->ID ) ) {
|
354 |
-
|
355 |
$postThumbnailId = get_post_thumbnail_id( $post->ID );
|
356 |
-
$attachmentMeta
|
357 |
-
$imageUrl
|
358 |
-
|
359 |
echo '<enclosure url="' . $imageUrl[0] . '" length="' . filesize( get_attached_file( $postThumbnailId ) ) . '" type="image/jpg" />';
|
360 |
echo '<media:content url="' . $imageUrl[0] . '" width="' . $attachmentMeta['sizes']['medium']['width'] . '" height="' . $attachmentMeta['sizes']['medium']['height'] . '" medium="image" type="' . $attachmentMeta['sizes']['medium']['mime-type'] . '" />';
|
361 |
|
362 |
}
|
363 |
}
|
364 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
/**
|
366 |
* Returns the attributes of the shortcode
|
367 |
*
|
368 |
* @since 3.0.0
|
369 |
* @access public
|
|
|
370 |
* @param array $atts The attributes passed by WordPress.
|
|
|
371 |
* @return array
|
372 |
*/
|
373 |
public function get_short_code_attributes( $atts ) {
|
374 |
// Retrieve & extract shorcode parameters
|
375 |
$sc = shortcode_atts( array(
|
376 |
-
'feeds'
|
377 |
-
|
378 |
-
'
|
379 |
-
|
380 |
-
'
|
381 |
-
|
382 |
-
'
|
383 |
-
|
384 |
-
'
|
385 |
-
|
386 |
-
'
|
387 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
388 |
), $atts, 'feedzy_default' );
|
389 |
-
|
390 |
$sc = array_merge( $sc, apply_filters( 'feedzy_get_short_code_attributes_filter', $atts ) );
|
391 |
|
392 |
return $sc;
|
@@ -397,24 +299,26 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
397 |
*
|
398 |
* @since 3.0.0
|
399 |
* @access public
|
|
|
400 |
* @param string $feeds The feeds from the shortcode attribute.
|
|
|
401 |
* @return array|mixed
|
402 |
*/
|
403 |
public function get_feed_url( $feeds ) {
|
404 |
$feedURL = '';
|
405 |
if ( ! empty( $feeds ) ) {
|
406 |
-
$feeds
|
407 |
-
$feeds
|
408 |
$feedURL = array();
|
409 |
// Remove SSL from HTTP request to prevent fetching errors
|
410 |
foreach ( $feeds as $feed ) {
|
411 |
$feedURL[] = preg_replace( '/^https:/i', 'http:', $feed );
|
412 |
}
|
413 |
-
|
414 |
if ( count( $feedURL ) === 1 ) {
|
415 |
$feedURL = $feedURL[0];
|
416 |
}
|
417 |
}
|
|
|
418 |
return $feedURL;
|
419 |
}
|
420 |
|
@@ -423,8 +327,10 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
423 |
*
|
424 |
* @since 3.0.0
|
425 |
* @access public
|
426 |
-
*
|
427 |
-
* @param
|
|
|
|
|
428 |
* @return mixed
|
429 |
*/
|
430 |
public function sanitize_attr( $sc, $feedURL ) {
|
@@ -433,15 +339,12 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
433 |
} elseif ( empty( $sc['max'] ) || ! ctype_digit( $sc['max'] ) ) {
|
434 |
$sc['max'] = '5';
|
435 |
}
|
436 |
-
|
437 |
if ( empty( $sc['size'] ) || ! ctype_digit( $sc['size'] ) ) {
|
438 |
$sc['size'] = '150';
|
439 |
}
|
440 |
-
|
441 |
if ( ! empty( $sc['title'] ) && ! ctype_digit( $sc['title'] ) ) {
|
442 |
$sc['title'] = '';
|
443 |
}
|
444 |
-
|
445 |
if ( ! empty( $sc['keywords_title'] ) ) {
|
446 |
$sc['keywords_title'] = rtrim( $sc['keywords_title'], ',' );
|
447 |
$sc['keywords_title'] = array_map( 'trim', explode( ',', $sc['keywords_title'] ) );
|
@@ -450,11 +353,9 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
450 |
$sc['keywords_ban'] = rtrim( $sc['keywords_ban'], ',' );
|
451 |
$sc['keywords_ban'] = array_map( 'trim', explode( ',', $sc['keywords_ban'] ) );
|
452 |
}
|
453 |
-
|
454 |
if ( ! empty( $sc['summarylength'] ) && ! ctype_digit( $sc['summarylength'] ) ) {
|
455 |
$sc['summarylength'] = '';
|
456 |
}
|
457 |
-
|
458 |
if ( empty( $sc['default'] ) ) {
|
459 |
$sc['default'] = apply_filters( 'feedzy_default_image', $sc['default'], $feedURL );
|
460 |
}
|
@@ -463,20 +364,102 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
463 |
}
|
464 |
|
465 |
/**
|
466 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
467 |
*
|
468 |
* @since 3.0.0
|
469 |
* @access private
|
470 |
-
*
|
|
|
|
|
471 |
* @return array
|
472 |
*/
|
473 |
private function get_feed_title_filter( $feed ) {
|
474 |
return array(
|
475 |
-
'rss_url'
|
476 |
-
'rss_title_class'
|
477 |
-
'rss_title'
|
478 |
'rss_description_class' => 'rss_description',
|
479 |
-
'rss_description'
|
480 |
);
|
481 |
}
|
482 |
|
@@ -485,16 +468,17 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
485 |
*
|
486 |
* @since 3.0.0
|
487 |
* @access private
|
488 |
-
*
|
489 |
-
* @param array $
|
490 |
-
* @param
|
491 |
-
* @param
|
|
|
|
|
492 |
* @return array
|
493 |
*/
|
494 |
private function get_feed_item_filter( $sc, $sizes, $item, $feedURL ) {
|
495 |
$itemLink = $item->get_permalink();
|
496 |
-
$newLink
|
497 |
-
|
498 |
// Fetch image thumbnail
|
499 |
if ( $sc['thumb'] == 'yes' || $sc['thumb'] == 'auto' ) {
|
500 |
$theThumbnail = $this->feedzy_retrieve_image( $item );
|
@@ -510,14 +494,12 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
510 |
$contentThumb .= '<span class="default" style="background-image:url(' . $sc['default'] . ');" alt="' . $item->get_title() . '"></span>';
|
511 |
}
|
512 |
}
|
513 |
-
|
514 |
-
$contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL );
|
515 |
} else {
|
516 |
$contentThumb = '';
|
517 |
$contentThumb .= '<span class="default" style="width:' . $sizes['width'] . 'px; height:' . $sizes['height'] . 'px; background-image:url(' . $sc['default'] . ');" alt="' . $item->get_title() . '"></span>';
|
518 |
-
$contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL );
|
519 |
}
|
520 |
-
|
521 |
$contentTitle = '';
|
522 |
if ( is_numeric( $sc['title'] ) && strlen( $item->get_title() ) > $sc['title'] ) {
|
523 |
$contentTitle .= preg_replace( '/\s+?(\S+)?$/', '', substr( $item->get_title(), 0, $sc['title'] ) ) . '...';
|
@@ -525,17 +507,15 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
525 |
$contentTitle .= $item->get_title();
|
526 |
}
|
527 |
$contentTitle = apply_filters( 'feedzy_title_output', $contentTitle, $feedURL );
|
528 |
-
|
529 |
// Define Meta args
|
530 |
$metaArgs = array(
|
531 |
-
'author'
|
532 |
-
'date'
|
533 |
'date_format' => get_option( 'date_format' ),
|
534 |
'time_format' => get_option( 'time_format' ),
|
535 |
);
|
536 |
-
|
537 |
// Filter: feedzy_meta_args
|
538 |
-
$metaArgs
|
539 |
$contentMeta = '';
|
540 |
if ( $sc['meta'] == 'yes' && ( $metaArgs['author'] || $metaArgs['date'] ) ) {
|
541 |
$contentMeta = '';
|
@@ -549,186 +529,249 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
|
549 |
$contentMeta .= __( 'by', 'feedzy-rss-feeds' ) . ' <a href="http://' . $domain['host'] . '" target="' . $sc['target'] . '" title="' . $domain['host'] . '" >' . $authorName . '</a> ';
|
550 |
}
|
551 |
}
|
552 |
-
|
553 |
if ( $metaArgs['date'] ) {
|
554 |
$date_time = $item->get_date( 'U' );
|
555 |
-
$date_time = apply_filters( 'feedzy_feed_timestamp'
|
556 |
-
|
557 |
$contentMeta .= __( 'on', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['date_format'], $date_time );
|
558 |
$contentMeta .= ' ';
|
559 |
$contentMeta .= __( 'at', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['time_format'], $date_time );
|
560 |
}
|
561 |
}
|
562 |
-
$contentMeta
|
563 |
$contentSummary = '';
|
564 |
if ( $sc['summary'] == 'yes' ) {
|
565 |
$contentSummary = '';
|
566 |
-
$description
|
567 |
-
$description
|
568 |
-
|
569 |
if ( is_numeric( $sc['summarylength'] ) && strlen( $description ) > $sc['summarylength'] ) {
|
570 |
$contentSummary .= preg_replace( '/\s+?(\S+)?$/', '', substr( $description, 0, $sc['summarylength'] ) ) . ' […]';
|
571 |
} else {
|
572 |
$contentSummary .= $description . ' […]';
|
573 |
}
|
574 |
-
|
575 |
$contentSummary = apply_filters( 'feedzy_summary_output', $contentSummary, $newLink, $feedURL );
|
576 |
}
|
577 |
-
|
578 |
$itemArray = array(
|
579 |
-
'item_img_class'
|
580 |
-
'item_img_style'
|
581 |
-
'item_url'
|
582 |
-
'item_url_target'
|
583 |
-
'item_url_title'
|
584 |
-
'item_img'
|
585 |
-
'item_title'
|
586 |
'item_content_class' => 'rss_content',
|
587 |
'item_content_style' => '',
|
588 |
-
'item_meta'
|
589 |
-
'item_description'
|
590 |
);
|
591 |
-
|
592 |
$itemArray = apply_filters( 'feedzy_item_filter', $itemArray, $item );
|
593 |
|
594 |
return $itemArray;
|
595 |
}
|
596 |
|
597 |
/**
|
598 |
-
*
|
599 |
*
|
600 |
* @since 3.0.0
|
601 |
* @access public
|
602 |
-
*
|
603 |
-
* @param object $
|
604 |
-
*
|
605 |
-
* @param string $feedURL The feed url.
|
606 |
* @return string
|
607 |
*/
|
608 |
-
public function
|
609 |
-
$
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
617 |
}
|
618 |
-
|
619 |
-
$
|
620 |
-
|
621 |
-
$
|
622 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
623 |
}
|
624 |
|
625 |
-
$
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
633 |
break;
|
634 |
}
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
$count++;
|
639 |
}
|
640 |
}
|
641 |
|
642 |
-
|
|
|
643 |
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
648 |
}
|
649 |
|
650 |
-
$
|
651 |
-
|
652 |
-
$content .= '
|
653 |
-
<li ' . $item['itemAttr'] . '>
|
654 |
-
' . ( ( ! empty( $item['item_img'] ) && $sc['thumb'] != 'no' ) ? '
|
655 |
-
<div class="' . $item['item_img_class'] . '" style="' . $item['item_img_style'] . '">
|
656 |
-
<a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '" title="' . $item['item_url_title'] . '" style="' . $item['item_img_style'] . '">
|
657 |
-
' . $item['item_img'] . '
|
658 |
-
</a>
|
659 |
-
</div>' : '' ) . '
|
660 |
-
<span class="title">
|
661 |
-
<a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '">
|
662 |
-
' . $item['item_title'] . '
|
663 |
-
</a>
|
664 |
-
</span>
|
665 |
-
<div class="' . $item['item_content_class'] . '" style="' . $item['item_content_style'] . '">
|
666 |
-
' . ( ! empty( $item['item_meta'] ) ? '<small>
|
667 |
-
' . $item['item_meta'] . '
|
668 |
-
</small>' : '' ) . '
|
669 |
-
' . ( ! empty( $item['item_description'] ) ? '<p>' . $item['item_description'] . '</p>':'') . '
|
670 |
-
</div>
|
671 |
-
</li>
|
672 |
-
';
|
673 |
-
}
|
674 |
-
$content .= '</ul> </div>';
|
675 |
|
676 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
677 |
|
678 |
-
return $
|
679 |
}
|
680 |
|
681 |
/**
|
682 |
-
*
|
683 |
*
|
684 |
* @since 3.0.0
|
685 |
* @access public
|
686 |
-
*
|
687 |
-
* @param string $
|
688 |
-
*
|
|
|
689 |
*/
|
690 |
-
public function
|
691 |
-
//
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
// Load SimplePie Instance
|
698 |
-
$feed = fetch_feed( $feedURL );
|
699 |
-
// TODO report error when is an error loading the feed
|
700 |
-
if ( is_wp_error( $feed ) ) {
|
701 |
-
// Fallback for different edge cases.
|
702 |
-
if ( is_array( $feedURL ) ) {
|
703 |
-
$feedURL = array_map( 'html_entity_decode',$feedURL );
|
704 |
-
} else {
|
705 |
-
$feedURL = html_entity_decode( $feedURL );
|
706 |
}
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
712 |
}
|
713 |
}
|
714 |
-
$feed->set_sanitize_class( 'SimplePie_Sanitize' );
|
715 |
-
$feed->sanitize = new SimplePie_Sanitize();
|
716 |
-
$feed -> enable_cache( true );
|
717 |
-
$feed -> enable_order_by_date( true );
|
718 |
-
$feed -> set_cache_class( 'WP_Feed_Cache' );
|
719 |
-
$feed -> set_file_class( 'WP_SimplePie_File' );
|
720 |
-
$feed -> set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 7200, $feedURL ) );
|
721 |
-
do_action_ref_array( 'wp_feed_options', array( $feed, $feedURL ) );
|
722 |
-
$feed -> strip_comments( true );
|
723 |
-
$feed -> strip_htmltags( array( 'base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style' ) );
|
724 |
-
$feed -> init();
|
725 |
-
$feed -> handle_content_type();
|
726 |
|
727 |
-
|
728 |
-
|
729 |
-
$content = $this->render_content( $sc, $feed, $content, $feedURL );
|
730 |
-
|
731 |
-
return $content;
|
732 |
}
|
733 |
|
734 |
/**
|
8 |
* @package feedzy-rss-feeds
|
9 |
* @subpackage feedzy-rss-feeds/includes/abstract
|
10 |
*/
|
11 |
+
|
12 |
/**
|
13 |
* The Feedzy RSS functions of the plugin.
|
14 |
*
|
21 |
*/
|
22 |
abstract class Feedzy_Rss_Feeds_Admin_Abstract {
|
23 |
|
|
|
24 |
/**
|
25 |
* Defines the default image to use on RSS Feeds
|
26 |
*
|
27 |
* @since 3.0.0
|
28 |
* @access public
|
29 |
+
*
|
30 |
* @param string $imageSrc The image source, currently not used.
|
31 |
+
*
|
32 |
* @return string
|
33 |
*/
|
34 |
public function feedzy_define_default_image( $imageSrc ) {
|
35 |
$defaultImg = FEEDZY_ABSURL . '/img/feedzy-default.jpg';
|
36 |
+
|
37 |
return apply_filters( 'feedzy_define_default_image_filter', $defaultImg );
|
38 |
}
|
39 |
|
45 |
*
|
46 |
* @since 3.0.0
|
47 |
* @access public
|
48 |
+
*
|
49 |
* @param object $error The error Object.
|
50 |
* @param string $feedURL The feed URL.
|
51 |
+
*
|
52 |
* @return string
|
53 |
*/
|
54 |
+
public function feedzy_default_error_notice( $error, $feedURL ) {
|
55 |
error_log( 'Feedzy RSS Feeds - related feed: ' . print_r( $feedURL ) . ' - Error message: ' . $this->feedzy_array_obj_string( $error ) );
|
56 |
+
|
57 |
return '<div id="message" class="error" data-error"' . esc_attr( $this->feedzy_array_obj_string( $error ) ) . '"><p>' . __( 'Sorry, this feed is currently unavailable or does not exists anymore.', 'feedzy-rss-feeds' ) . '</p></div>';
|
58 |
}
|
59 |
|
62 |
*
|
63 |
* @since 3.0.0
|
64 |
* @access public
|
65 |
+
*
|
66 |
* @param object $error The error Object.
|
67 |
+
*
|
68 |
* @return string
|
69 |
*/
|
70 |
public function feedzy_array_obj_string( $error ) {
|
80 |
*
|
81 |
* @since 3.0.0
|
82 |
* @access public
|
83 |
+
*
|
84 |
+
* @param string $itemAttr The item attribute.
|
85 |
+
* @param array $sizes An array with the current sizes.
|
86 |
+
*
|
87 |
* @return string
|
88 |
*/
|
89 |
public function feedzy_add_item_padding( $itemAttr, $sizes ) {
|
90 |
+
$paddinTop = number_format( ( 15 / 150 ) * $sizes['height'], 0 );
|
91 |
$paddinBottom = number_format( ( 25 / 150 ) * $sizes['height'], 0 );
|
92 |
$stylePadding = ' style="padding: ' . $paddinTop . 'px 0 ' . $paddinBottom . 'px"';
|
93 |
+
|
94 |
return $itemAttr . $stylePadding;
|
95 |
}
|
96 |
|
99 |
*
|
100 |
* @since 3.0.0
|
101 |
* @access public
|
102 |
+
*
|
103 |
+
* @param string $itemAttr The item attribute.
|
104 |
+
*
|
105 |
* @return string
|
106 |
*/
|
107 |
public function feedzy_classes_item( $itemAttr = '', $sizes = '', $item = '', $feedURL = '', $sc = '' ) {
|
108 |
$classes = array( 'rss_item' );
|
109 |
$classes = apply_filters( 'feedzy_add_classes_item', $classes, $sc );
|
110 |
$classes = ' class="' . implode( ' ', $classes ) . '"';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
+
return $itemAttr . $classes;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
}
|
114 |
|
115 |
/**
|
116 |
+
* Filter feed description input
|
117 |
*
|
118 |
* @since 3.0.0
|
119 |
* @access public
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
*
|
121 |
+
* @param string $description The feed description.
|
122 |
+
* @param string $content The feed description.
|
123 |
+
* @param string $feedURL The feed URL.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
*
|
|
|
|
|
|
|
|
|
|
|
125 |
* @return string
|
126 |
*/
|
127 |
public function feedzy_summary_input_filter( $description, $content, $feedURL ) {
|
136 |
*
|
137 |
* @since 3.0.0
|
138 |
* @access public
|
139 |
+
*
|
140 |
* @param boolean $continue A boolean to stop the script.
|
141 |
+
* @param array $sc The shortcode attributes.
|
142 |
+
* @param object $item The feed item.
|
143 |
+
* @param string $feedURL The feed URL.
|
144 |
+
*
|
145 |
* @return boolean
|
146 |
*/
|
147 |
public function feedzy_feed_item_keywords_title( $continue, $sc, $item, $feedURL ) {
|
148 |
if ( feedzy_is_new() && ! feedzy_is_pro() ) {
|
149 |
return true;
|
150 |
}
|
|
|
151 |
$keywords_title = $sc['keywords_title'];
|
152 |
if ( ! empty( $keywords_title ) ) {
|
153 |
$continue = false;
|
157 |
}
|
158 |
}
|
159 |
}
|
160 |
+
|
161 |
return $continue;
|
162 |
}
|
163 |
|
|
|
164 |
/**
|
165 |
* Include cover picture (medium) to rss feed enclosure
|
166 |
* and media:content
|
170 |
*/
|
171 |
public function feedzy_include_thumbnail_rss() {
|
172 |
global $post;
|
|
|
173 |
if ( has_post_thumbnail( $post->ID ) ) {
|
|
|
174 |
$postThumbnailId = get_post_thumbnail_id( $post->ID );
|
175 |
+
$attachmentMeta = wp_get_attachment_metadata( $postThumbnailId );
|
176 |
+
$imageUrl = wp_get_attachment_image_src( $postThumbnailId, 'medium' );
|
|
|
177 |
echo '<enclosure url="' . $imageUrl[0] . '" length="' . filesize( get_attached_file( $postThumbnailId ) ) . '" type="image/jpg" />';
|
178 |
echo '<media:content url="' . $imageUrl[0] . '" width="' . $attachmentMeta['sizes']['medium']['width'] . '" height="' . $attachmentMeta['sizes']['medium']['height'] . '" medium="image" type="' . $attachmentMeta['sizes']['medium']['mime-type'] . '" />';
|
179 |
|
180 |
}
|
181 |
}
|
182 |
|
183 |
+
/**
|
184 |
+
* Main shortcode function
|
185 |
+
*
|
186 |
+
* @since 3.0.0
|
187 |
+
* @access public
|
188 |
+
*
|
189 |
+
* @param array $atts Shortcode attributes.
|
190 |
+
* @param string $content The item feed content.
|
191 |
+
*
|
192 |
+
* @return mixed
|
193 |
+
*/
|
194 |
+
public function feedzy_rss( $atts, $content = '' ) {
|
195 |
+
// Load SimplePie if not already
|
196 |
+
if ( ! class_exists( 'SimplePie' ) ) {
|
197 |
+
require_once( ABSPATH . WPINC . '/feed.php' );
|
198 |
+
}
|
199 |
+
$sc = $this->get_short_code_attributes( $atts );
|
200 |
+
$feedURL = $this->get_feed_url( $sc['feeds'] );
|
201 |
+
// Load SimplePie Instance
|
202 |
+
$feed = fetch_feed( $feedURL );
|
203 |
+
// TODO report error when is an error loading the feed
|
204 |
+
if ( is_wp_error( $feed ) ) {
|
205 |
+
// Fallback for different edge cases.
|
206 |
+
if ( is_array( $feedURL ) ) {
|
207 |
+
$feedURL = array_map( 'html_entity_decode', $feedURL );
|
208 |
+
} else {
|
209 |
+
$feedURL = html_entity_decode( $feedURL );
|
210 |
+
}
|
211 |
+
$feed = fetch_feed( $feedURL );
|
212 |
+
if ( is_wp_error( $feed ) ) {
|
213 |
+
return '';
|
214 |
+
}
|
215 |
+
}
|
216 |
+
$feed->set_sanitize_class( 'SimplePie_Sanitize' );
|
217 |
+
$feed->sanitize = new SimplePie_Sanitize();
|
218 |
+
$feed->enable_cache( true );
|
219 |
+
$feed->enable_order_by_date( true );
|
220 |
+
$feed->set_cache_class( 'WP_Feed_Cache' );
|
221 |
+
$feed->set_file_class( 'WP_SimplePie_File' );
|
222 |
+
$feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 7200, $feedURL ) );
|
223 |
+
do_action_ref_array( 'wp_feed_options', array( $feed, $feedURL ) );
|
224 |
+
$feed->strip_comments( true );
|
225 |
+
$feed->strip_htmltags( array(
|
226 |
+
'base',
|
227 |
+
'blink',
|
228 |
+
'body',
|
229 |
+
'doctype',
|
230 |
+
'embed',
|
231 |
+
'font',
|
232 |
+
'form',
|
233 |
+
'frame',
|
234 |
+
'frameset',
|
235 |
+
'html',
|
236 |
+
'iframe',
|
237 |
+
'input',
|
238 |
+
'marquee',
|
239 |
+
'meta',
|
240 |
+
'noscript',
|
241 |
+
'object',
|
242 |
+
'param',
|
243 |
+
'script',
|
244 |
+
'style',
|
245 |
+
) );
|
246 |
+
$feed->init();
|
247 |
+
$feed->handle_content_type();
|
248 |
+
$sc = $this->sanitize_attr( $sc, $feedURL );
|
249 |
+
$content = $this->render_content( $sc, $feed, $content, $feedURL );
|
250 |
+
|
251 |
+
return $content;
|
252 |
+
}
|
253 |
+
|
254 |
/**
|
255 |
* Returns the attributes of the shortcode
|
256 |
*
|
257 |
* @since 3.0.0
|
258 |
* @access public
|
259 |
+
*
|
260 |
* @param array $atts The attributes passed by WordPress.
|
261 |
+
*
|
262 |
* @return array
|
263 |
*/
|
264 |
public function get_short_code_attributes( $atts ) {
|
265 |
// Retrieve & extract shorcode parameters
|
266 |
$sc = shortcode_atts( array(
|
267 |
+
'feeds' => '',
|
268 |
+
// comma separated feeds url
|
269 |
+
'max' => '5',
|
270 |
+
// number of feeds items (0 for unlimited)
|
271 |
+
'feed_title' => 'yes',
|
272 |
+
// display feed title yes/no
|
273 |
+
'target' => '_blank',
|
274 |
+
// _blank, _self
|
275 |
+
'title' => '',
|
276 |
+
// strip title after X char
|
277 |
+
'meta' => 'yes',
|
278 |
+
// yes, no
|
279 |
+
'summary' => 'yes',
|
280 |
+
// strip title
|
281 |
+
'summarylength' => '',
|
282 |
+
// strip summary after X char
|
283 |
+
'thumb' => 'auto',
|
284 |
+
// yes, no, auto
|
285 |
+
'default' => '',
|
286 |
+
// default thumb URL if no image found (only if thumb is set to yes or auto)
|
287 |
+
'size' => '',
|
288 |
+
// thumbs pixel size
|
289 |
+
'keywords_title' => '',
|
290 |
+
// only display item if title contains specific keywords (comma-separated list/case sensitive)
|
291 |
), $atts, 'feedzy_default' );
|
|
|
292 |
$sc = array_merge( $sc, apply_filters( 'feedzy_get_short_code_attributes_filter', $atts ) );
|
293 |
|
294 |
return $sc;
|
299 |
*
|
300 |
* @since 3.0.0
|
301 |
* @access public
|
302 |
+
*
|
303 |
* @param string $feeds The feeds from the shortcode attribute.
|
304 |
+
*
|
305 |
* @return array|mixed
|
306 |
*/
|
307 |
public function get_feed_url( $feeds ) {
|
308 |
$feedURL = '';
|
309 |
if ( ! empty( $feeds ) ) {
|
310 |
+
$feeds = rtrim( $feeds, ',' );
|
311 |
+
$feeds = explode( ',', $feeds );
|
312 |
$feedURL = array();
|
313 |
// Remove SSL from HTTP request to prevent fetching errors
|
314 |
foreach ( $feeds as $feed ) {
|
315 |
$feedURL[] = preg_replace( '/^https:/i', 'http:', $feed );
|
316 |
}
|
|
|
317 |
if ( count( $feedURL ) === 1 ) {
|
318 |
$feedURL = $feedURL[0];
|
319 |
}
|
320 |
}
|
321 |
+
|
322 |
return $feedURL;
|
323 |
}
|
324 |
|
327 |
*
|
328 |
* @since 3.0.0
|
329 |
* @access public
|
330 |
+
*
|
331 |
+
* @param array $sc The shorcode attributes array.
|
332 |
+
* @param string $feedURL The feed url.
|
333 |
+
*
|
334 |
* @return mixed
|
335 |
*/
|
336 |
public function sanitize_attr( $sc, $feedURL ) {
|
339 |
} elseif ( empty( $sc['max'] ) || ! ctype_digit( $sc['max'] ) ) {
|
340 |
$sc['max'] = '5';
|
341 |
}
|
|
|
342 |
if ( empty( $sc['size'] ) || ! ctype_digit( $sc['size'] ) ) {
|
343 |
$sc['size'] = '150';
|
344 |
}
|
|
|
345 |
if ( ! empty( $sc['title'] ) && ! ctype_digit( $sc['title'] ) ) {
|
346 |
$sc['title'] = '';
|
347 |
}
|
|
|
348 |
if ( ! empty( $sc['keywords_title'] ) ) {
|
349 |
$sc['keywords_title'] = rtrim( $sc['keywords_title'], ',' );
|
350 |
$sc['keywords_title'] = array_map( 'trim', explode( ',', $sc['keywords_title'] ) );
|
353 |
$sc['keywords_ban'] = rtrim( $sc['keywords_ban'], ',' );
|
354 |
$sc['keywords_ban'] = array_map( 'trim', explode( ',', $sc['keywords_ban'] ) );
|
355 |
}
|
|
|
356 |
if ( ! empty( $sc['summarylength'] ) && ! ctype_digit( $sc['summarylength'] ) ) {
|
357 |
$sc['summarylength'] = '';
|
358 |
}
|
|
|
359 |
if ( empty( $sc['default'] ) ) {
|
360 |
$sc['default'] = apply_filters( 'feedzy_default_image', $sc['default'], $feedURL );
|
361 |
}
|
364 |
}
|
365 |
|
366 |
/**
|
367 |
+
* Render the content to be displayed
|
368 |
+
*
|
369 |
+
* @since 3.0.0
|
370 |
+
* @access public
|
371 |
+
*
|
372 |
+
* @param array $sc The shorcode attributes array.
|
373 |
+
* @param object $feed The feed object.
|
374 |
+
* @param string $content The original content.
|
375 |
+
* @param string $feedURL The feed url.
|
376 |
+
*
|
377 |
+
* @return string
|
378 |
+
*/
|
379 |
+
public function render_content( $sc, $feed, $content = '', $feedURL ) {
|
380 |
+
$count = 0;
|
381 |
+
$sizes = array( 'width' => $sc['size'], 'height' => $sc['size'] );
|
382 |
+
$sizes = apply_filters( 'feedzy_thumb_sizes', $sizes, $feedURL );
|
383 |
+
// Display the error message
|
384 |
+
if ( $feed->error() ) {
|
385 |
+
$content .= apply_filters( 'feedzy_default_error', $feed->error(), $feedURL );
|
386 |
+
}
|
387 |
+
$feed_title['use_title'] = false;
|
388 |
+
if ( $sc['feed_title'] == 'yes' ) {
|
389 |
+
$feed_title = $this->get_feed_title_filter( $feed );
|
390 |
+
$feed_title['use_title'] = true;
|
391 |
+
}
|
392 |
+
$count = 0;
|
393 |
+
$items = apply_filters( 'feedzy_feed_items', $feed->get_items(), $feedURL );
|
394 |
+
$feed_items = array();
|
395 |
+
foreach ( (array) $items as $item ) {
|
396 |
+
if ( ! trim( $item->get_title() ) != '' ) {
|
397 |
+
$continue = apply_filters( 'feedzy_item_keyword', true, $sc, $item, $feedURL );
|
398 |
+
if ( $continue == true ) {
|
399 |
+
// Count items
|
400 |
+
if ( $count >= $sc['max'] ) {
|
401 |
+
break;
|
402 |
+
}
|
403 |
+
$itemAttr = apply_filters( 'feedzy_item_attributes', $itemAttr = '', $sizes, $item, $feedURL, $sc );
|
404 |
+
$feed_items[ $count ] = $this->get_feed_item_filter( $sc, $sizes, $item, $feedURL );
|
405 |
+
$feed_items[ $count ]['itemAttr'] = $itemAttr;
|
406 |
+
$count ++;
|
407 |
+
}
|
408 |
+
}
|
409 |
+
}
|
410 |
+
$content = '<div class="feedzy-rss">';
|
411 |
+
if ( $feed_title['use_title'] ) {
|
412 |
+
$content .= '<div class="rss_header">';
|
413 |
+
$content .= '<h2><a href="' . $feed->get_permalink() . '" class="rss_title">' . html_entity_decode( $feed->get_title() ) . '</a> <span class="rss_description"> ' . $feed->get_description() . '</span></h2>';
|
414 |
+
$content .= '</div>';
|
415 |
+
}
|
416 |
+
$content .= '<ul>';
|
417 |
+
foreach ( $feed_items as $item ) {
|
418 |
+
$content .= '
|
419 |
+
<li ' . $item['itemAttr'] . '>
|
420 |
+
' . ( ( ! empty( $item['item_img'] ) && $sc['thumb'] != 'no' ) ? '
|
421 |
+
<div class="' . $item['item_img_class'] . '" style="' . $item['item_img_style'] . '">
|
422 |
+
<a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '" title="' . $item['item_url_title'] . '" style="' . $item['item_img_style'] . '">
|
423 |
+
' . $item['item_img'] . '
|
424 |
+
</a>
|
425 |
+
</div>' : '' ) . '
|
426 |
+
<span class="title">
|
427 |
+
<a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '">
|
428 |
+
' . $item['item_title'] . '
|
429 |
+
</a>
|
430 |
+
</span>
|
431 |
+
<div class="' . $item['item_content_class'] . '" style="' . $item['item_content_style'] . '">
|
432 |
+
' . ( ! empty( $item['item_meta'] ) ? '<small>
|
433 |
+
' . $item['item_meta'] . '
|
434 |
+
</small>' : '' ) . '
|
435 |
+
' . ( ! empty( $item['item_description'] ) ? '<p>' . $item['item_description'] . '</p>' : '' ) . '
|
436 |
+
</div>
|
437 |
+
</li>
|
438 |
+
';
|
439 |
+
}
|
440 |
+
$content .= '</ul> </div>';
|
441 |
+
$content = apply_filters( 'feedzy_global_output', $content, $sc, $feed_title, $feed_items );
|
442 |
+
|
443 |
+
return $content;
|
444 |
+
}
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Retrive the filter rss title array
|
448 |
*
|
449 |
* @since 3.0.0
|
450 |
* @access private
|
451 |
+
*
|
452 |
+
* @param object $feed The feed object.
|
453 |
+
*
|
454 |
* @return array
|
455 |
*/
|
456 |
private function get_feed_title_filter( $feed ) {
|
457 |
return array(
|
458 |
+
'rss_url' => $feed->get_permalink(),
|
459 |
+
'rss_title_class' => 'rss_title',
|
460 |
+
'rss_title' => html_entity_decode( $feed->get_title() ),
|
461 |
'rss_description_class' => 'rss_description',
|
462 |
+
'rss_description' => $feed->get_description(),
|
463 |
);
|
464 |
}
|
465 |
|
468 |
*
|
469 |
* @since 3.0.0
|
470 |
* @access private
|
471 |
+
*
|
472 |
+
* @param array $sc The shorcode attributes array.
|
473 |
+
* @param array $sizes The sizes array.
|
474 |
+
* @param object $item The feed item object.
|
475 |
+
* @param string $feedURL The feed url.
|
476 |
+
*
|
477 |
* @return array
|
478 |
*/
|
479 |
private function get_feed_item_filter( $sc, $sizes, $item, $feedURL ) {
|
480 |
$itemLink = $item->get_permalink();
|
481 |
+
$newLink = apply_filters( 'feedzy_item_url_filter', $itemLink, $sc );
|
|
|
482 |
// Fetch image thumbnail
|
483 |
if ( $sc['thumb'] == 'yes' || $sc['thumb'] == 'auto' ) {
|
484 |
$theThumbnail = $this->feedzy_retrieve_image( $item );
|
494 |
$contentThumb .= '<span class="default" style="background-image:url(' . $sc['default'] . ');" alt="' . $item->get_title() . '"></span>';
|
495 |
}
|
496 |
}
|
497 |
+
$contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL, $sizes );
|
|
|
498 |
} else {
|
499 |
$contentThumb = '';
|
500 |
$contentThumb .= '<span class="default" style="width:' . $sizes['width'] . 'px; height:' . $sizes['height'] . 'px; background-image:url(' . $sc['default'] . ');" alt="' . $item->get_title() . '"></span>';
|
501 |
+
$contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL, $sizes );
|
502 |
}
|
|
|
503 |
$contentTitle = '';
|
504 |
if ( is_numeric( $sc['title'] ) && strlen( $item->get_title() ) > $sc['title'] ) {
|
505 |
$contentTitle .= preg_replace( '/\s+?(\S+)?$/', '', substr( $item->get_title(), 0, $sc['title'] ) ) . '...';
|
507 |
$contentTitle .= $item->get_title();
|
508 |
}
|
509 |
$contentTitle = apply_filters( 'feedzy_title_output', $contentTitle, $feedURL );
|
|
|
510 |
// Define Meta args
|
511 |
$metaArgs = array(
|
512 |
+
'author' => true,
|
513 |
+
'date' => true,
|
514 |
'date_format' => get_option( 'date_format' ),
|
515 |
'time_format' => get_option( 'time_format' ),
|
516 |
);
|
|
|
517 |
// Filter: feedzy_meta_args
|
518 |
+
$metaArgs = apply_filters( 'feedzy_meta_args', $metaArgs, $feedURL );
|
519 |
$contentMeta = '';
|
520 |
if ( $sc['meta'] == 'yes' && ( $metaArgs['author'] || $metaArgs['date'] ) ) {
|
521 |
$contentMeta = '';
|
529 |
$contentMeta .= __( 'by', 'feedzy-rss-feeds' ) . ' <a href="http://' . $domain['host'] . '" target="' . $sc['target'] . '" title="' . $domain['host'] . '" >' . $authorName . '</a> ';
|
530 |
}
|
531 |
}
|
|
|
532 |
if ( $metaArgs['date'] ) {
|
533 |
$date_time = $item->get_date( 'U' );
|
534 |
+
$date_time = apply_filters( 'feedzy_feed_timestamp', $date_time, $feedURL );
|
|
|
535 |
$contentMeta .= __( 'on', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['date_format'], $date_time );
|
536 |
$contentMeta .= ' ';
|
537 |
$contentMeta .= __( 'at', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['time_format'], $date_time );
|
538 |
}
|
539 |
}
|
540 |
+
$contentMeta = apply_filters( 'feedzy_meta_output', $contentMeta, $feedURL );
|
541 |
$contentSummary = '';
|
542 |
if ( $sc['summary'] == 'yes' ) {
|
543 |
$contentSummary = '';
|
544 |
+
$description = $item->get_description();
|
545 |
+
$description = apply_filters( 'feedzy_summary_input', $description, $item->get_content(), $feedURL );
|
|
|
546 |
if ( is_numeric( $sc['summarylength'] ) && strlen( $description ) > $sc['summarylength'] ) {
|
547 |
$contentSummary .= preg_replace( '/\s+?(\S+)?$/', '', substr( $description, 0, $sc['summarylength'] ) ) . ' […]';
|
548 |
} else {
|
549 |
$contentSummary .= $description . ' […]';
|
550 |
}
|
|
|
551 |
$contentSummary = apply_filters( 'feedzy_summary_output', $contentSummary, $newLink, $feedURL );
|
552 |
}
|
|
|
553 |
$itemArray = array(
|
554 |
+
'item_img_class' => 'rss_image',
|
555 |
+
'item_img_style' => 'width:' . $sizes['width'] . 'px; height:' . $sizes['height'] . 'px;',
|
556 |
+
'item_url' => $newLink,
|
557 |
+
'item_url_target' => $sc['target'],
|
558 |
+
'item_url_title' => $item->get_title(),
|
559 |
+
'item_img' => $contentThumb,
|
560 |
+
'item_title' => $contentTitle,
|
561 |
'item_content_class' => 'rss_content',
|
562 |
'item_content_style' => '',
|
563 |
+
'item_meta' => $contentMeta,
|
564 |
+
'item_description' => $contentSummary,
|
565 |
);
|
|
|
566 |
$itemArray = apply_filters( 'feedzy_item_filter', $itemArray, $item );
|
567 |
|
568 |
return $itemArray;
|
569 |
}
|
570 |
|
571 |
/**
|
572 |
+
* Retrive image from the item object
|
573 |
*
|
574 |
* @since 3.0.0
|
575 |
* @access public
|
576 |
+
*
|
577 |
+
* @param object $item The item object.
|
578 |
+
*
|
|
|
579 |
* @return string
|
580 |
*/
|
581 |
+
public function feedzy_retrieve_image( $item ) {
|
582 |
+
$theThumbnail = '';
|
583 |
+
if ( $enclosures = $item->get_enclosures() ) {
|
584 |
+
foreach ( (array) $enclosures as $enclosure ) {
|
585 |
+
// Item thumbnail
|
586 |
+
if ( $thumbnail = $enclosure->get_thumbnail() ) {
|
587 |
+
$theThumbnail = $thumbnail;
|
588 |
+
}
|
589 |
+
if ( isset( $enclosure->thumbnails ) ) {
|
590 |
+
foreach ( (array) $enclosure->thumbnails as $thumbnail ) {
|
591 |
+
$theThumbnail = $thumbnail;
|
592 |
+
}
|
593 |
+
}
|
594 |
+
if ( $thumbnail = $enclosure->embed() ) {
|
595 |
+
$pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/iU';
|
596 |
+
if ( preg_match( $pattern, $thumbnail, $matches ) ) {
|
597 |
+
$theThumbnail = $matches[0];
|
598 |
+
}
|
599 |
+
}
|
600 |
+
foreach ( (array) $enclosure->get_link() as $thumbnail ) {
|
601 |
+
$pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/iU';
|
602 |
+
$imgsrc = $thumbnail;
|
603 |
+
if ( preg_match( $pattern, $imgsrc, $matches ) ) {
|
604 |
+
$theThumbnail = $matches[0];
|
605 |
+
break;
|
606 |
+
}
|
607 |
+
}
|
608 |
+
// Break loop if thumbnail is found
|
609 |
+
if ( ! empty( $theThumbnail ) ) {
|
610 |
+
break;
|
611 |
+
}
|
612 |
+
}
|
613 |
}
|
614 |
+
// xmlns:itunes podcast
|
615 |
+
if ( empty( $theThumbnail ) ) {
|
616 |
+
$data = $item->get_item_tags( 'http://www.itunes.com/dtds/podcast-1.0.dtd', 'image' );
|
617 |
+
if ( isset( $data['0']['attribs']['']['href'] ) && ! empty( $data['0']['attribs']['']['href'] ) ) {
|
618 |
+
$theThumbnail = $data['0']['attribs']['']['href'];
|
619 |
+
}
|
620 |
+
}
|
621 |
+
// Content image
|
622 |
+
if ( empty( $theThumbnail ) ) {
|
623 |
+
$feedDescription = $item->get_content();
|
624 |
+
$theThumbnail = $this->feedzy_return_image( $feedDescription );
|
625 |
+
}
|
626 |
+
// Description image
|
627 |
+
if ( empty( $theThumbnail ) ) {
|
628 |
+
$feedDescription = $item->get_description();
|
629 |
+
$theThumbnail = $this->feedzy_return_image( $feedDescription );
|
630 |
}
|
631 |
|
632 |
+
return $theThumbnail;
|
633 |
+
}
|
634 |
+
|
635 |
+
/**
|
636 |
+
* Get an image from a string
|
637 |
+
*
|
638 |
+
* @since 3.0.0
|
639 |
+
* @access public
|
640 |
+
*
|
641 |
+
* @param string $string A string with an <img/> tag.
|
642 |
+
*
|
643 |
+
* @return string
|
644 |
+
*/
|
645 |
+
public function feedzy_return_image( $string ) {
|
646 |
+
$img = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
|
647 |
+
$pattern = '/<img[^>]+\>/i';
|
648 |
+
preg_match( $pattern, $img, $matches );
|
649 |
+
if ( isset( $matches[0] ) ) {
|
650 |
+
$blacklistCount = 0;
|
651 |
+
foreach ( $matches as $matche ) {
|
652 |
+
$link = $this->feedzy_scrape_image( $matche );
|
653 |
+
$blacklist = array();
|
654 |
+
$blacklist = apply_filters( 'feedzy_feed_blacklist_images', $this->feedzy_blacklist_images( $blacklist ) );
|
655 |
+
foreach ( $blacklist as $string ) {
|
656 |
+
if ( strpos( (string) $link, $string ) !== false ) {
|
657 |
+
$blacklistCount ++;
|
658 |
+
}
|
659 |
+
}
|
660 |
+
if ( $blacklistCount == 0 ) {
|
661 |
break;
|
662 |
}
|
663 |
+
}
|
664 |
+
if ( $blacklistCount == 0 ) {
|
665 |
+
return $link;
|
|
|
666 |
}
|
667 |
}
|
668 |
|
669 |
+
return '';
|
670 |
+
}
|
671 |
|
672 |
+
/**
|
673 |
+
* Scrape an image for link from a string with an <img/>
|
674 |
+
*
|
675 |
+
* @since 3.0.0
|
676 |
+
* @access public
|
677 |
+
*
|
678 |
+
* @param string $string A string with an <img/> tag.
|
679 |
+
* @param string $link The link to search for.
|
680 |
+
*
|
681 |
+
* @return string
|
682 |
+
*/
|
683 |
+
public function feedzy_scrape_image( $string, $link = '' ) {
|
684 |
+
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
|
685 |
+
preg_match( $pattern, $string, $link );
|
686 |
+
if ( isset( $link[1] ) ) {
|
687 |
+
$link = urldecode( $link[1] );
|
688 |
}
|
689 |
|
690 |
+
return $link;
|
691 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
|
693 |
+
/**
|
694 |
+
* List blacklisted images to prevent fetching emoticons
|
695 |
+
*
|
696 |
+
* @since 3.0.0
|
697 |
+
* @access public
|
698 |
+
*
|
699 |
+
* @param array $blacklist An array with blacklisted resources.
|
700 |
+
*
|
701 |
+
* @return array
|
702 |
+
*/
|
703 |
+
public function feedzy_blacklist_images( $blacklist ) {
|
704 |
+
$blacklist = array(
|
705 |
+
'frownie.png',
|
706 |
+
'icon_arrow.gif',
|
707 |
+
'icon_biggrin.gif',
|
708 |
+
'icon_confused.gif',
|
709 |
+
'icon_cool.gif',
|
710 |
+
'icon_cry.gif',
|
711 |
+
'icon_eek.gif',
|
712 |
+
'icon_evil.gif',
|
713 |
+
'icon_exclaim.gif',
|
714 |
+
'icon_idea.gif',
|
715 |
+
'icon_lol.gif',
|
716 |
+
'icon_mad.gif',
|
717 |
+
'icon_mrgreen.gif',
|
718 |
+
'icon_neutral.gif',
|
719 |
+
'icon_question.gif',
|
720 |
+
'icon_razz.gif',
|
721 |
+
'icon_redface.gif',
|
722 |
+
'icon_rolleyes.gif',
|
723 |
+
'icon_sad.gif',
|
724 |
+
'icon_smile.gif',
|
725 |
+
'icon_surprised.gif',
|
726 |
+
'icon_twisted.gif',
|
727 |
+
'icon_wink.gif',
|
728 |
+
'mrgreen.png',
|
729 |
+
'rolleyes.png',
|
730 |
+
'simple-smile.png',
|
731 |
+
);
|
732 |
|
733 |
+
return $blacklist;
|
734 |
}
|
735 |
|
736 |
/**
|
737 |
+
* Image name encoder and url retrive if in url param
|
738 |
*
|
739 |
* @since 3.0.0
|
740 |
* @access public
|
741 |
+
*
|
742 |
+
* @param string $string A string containing the image URL.
|
743 |
+
*
|
744 |
+
* @return string
|
745 |
*/
|
746 |
+
public function feedzy_image_encode( $string ) {
|
747 |
+
// Check if img url is set as an URL parameter
|
748 |
+
$url_tab = parse_url( $string );
|
749 |
+
if ( isset( $url_tab['query'] ) ) {
|
750 |
+
preg_match_all( '/(http|https):\/\/[^ ]+(\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG)/', $url_tab['query'], $imgUrl );
|
751 |
+
if ( isset( $imgUrl[0][0] ) ) {
|
752 |
+
$string = $imgUrl[0][0];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
753 |
}
|
754 |
+
}
|
755 |
+
// Encode image name only en keep extra parameters
|
756 |
+
$query = $extention = '';
|
757 |
+
$url_tab = parse_url( $string );
|
758 |
+
if ( isset( $url_tab['query'] ) ) {
|
759 |
+
$query = '?' . $url_tab['query'];
|
760 |
+
}
|
761 |
+
$path_parts = pathinfo( $string );
|
762 |
+
$path = $path_parts['dirname'];
|
763 |
+
$file = rawurldecode( $path_parts['filename'] );
|
764 |
+
$extention = pathinfo( $url_tab['path'], PATHINFO_EXTENSION );
|
765 |
+
if ( ! empty( $extention ) ) {
|
766 |
+
$extention = '.' . $extention;
|
767 |
+
} else {
|
768 |
+
if ( isset( $path_parts['extension'] ) ) {
|
769 |
+
$extention = '.' . $path_parts['extension'];
|
770 |
}
|
771 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
772 |
|
773 |
+
// Return a well encoded image url
|
774 |
+
return $path . '/' . rawurlencode( $file ) . $extention . $query;
|
|
|
|
|
|
|
775 |
}
|
776 |
|
777 |
/**
|
includes/feedzy-rss-feeds.php
CHANGED
@@ -104,7 +104,7 @@ class Feedzy_Rss_Feeds {
|
|
104 |
*/
|
105 |
public function init() {
|
106 |
self::$plugin_name = 'feedzy-rss-feeds';
|
107 |
-
self::$version = '3.0.
|
108 |
self::$instance->load_dependencies();
|
109 |
self::$instance->set_locale();
|
110 |
self::$instance->define_admin_hooks();
|
104 |
*/
|
105 |
public function init() {
|
106 |
self::$plugin_name = 'feedzy-rss-feeds';
|
107 |
+
self::$version = '3.0.8';
|
108 |
self::$instance->load_dependencies();
|
109 |
self::$instance->set_locale();
|
110 |
self::$instance->define_admin_hooks();
|
languages/feedzy-rss-feeds.pot
CHANGED
@@ -4,7 +4,7 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Feedzy RSS Feeds Lite 3.0.7\n"
|
6 |
"Report-Msgid-Bugs-To: https://github.com/Codeinwp/feedzy-rss-feeds/issues\n"
|
7 |
-
"POT-Creation-Date: 2017-02-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -28,19 +28,19 @@ msgstr ""
|
|
28 |
msgid "Premium"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:
|
32 |
msgid "Sorry, this feed is currently unavailable or does not exists anymore."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:
|
36 |
msgid "by"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:
|
40 |
msgid "on"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:
|
44 |
msgid "at"
|
45 |
msgstr ""
|
46 |
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Feedzy RSS Feeds Lite 3.0.7\n"
|
6 |
"Report-Msgid-Bugs-To: https://github.com/Codeinwp/feedzy-rss-feeds/issues\n"
|
7 |
+
"POT-Creation-Date: 2017-02-20 15:13:55+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
28 |
msgid "Premium"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:57
|
32 |
msgid "Sorry, this feed is currently unavailable or does not exists anymore."
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:529
|
36 |
msgid "by"
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:535
|
40 |
msgid "on"
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/abstract/feedzy-rss-feeds-admin-abstract.php:537
|
44 |
msgid "at"
|
45 |
msgstr ""
|
46 |
|
readme.txt
CHANGED
@@ -188,6 +188,11 @@ http://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-l
|
|
188 |
|
189 |
== Changelog ==
|
190 |
|
|
|
|
|
|
|
|
|
|
|
191 |
= 3.0.6 - 27/01/2017 =
|
192 |
* Added feedzy_feed_timestamp filter.
|
193 |
* Fixed issue with edge cases feed urls.
|
188 |
|
189 |
== Changelog ==
|
190 |
|
191 |
+
= 3.0.8 - 20/02/2017 =
|
192 |
+
* Added $sizes param to feedzy_thumb_output.
|
193 |
+
* Added check when title is empty.
|
194 |
+
* Fixed image encoding url.
|
195 |
+
|
196 |
= 3.0.6 - 27/01/2017 =
|
197 |
* Added feedzy_feed_timestamp filter.
|
198 |
* Fixed issue with edge cases feed urls.
|