@@ -1173,7 +1173,7 @@ private function render_content( $sc, $feed, $feed_url, $content = '' ) {
1173
1173
sprintf ( $ anchor2 , esc_url ( $ item ['item_url ' ] ), esc_attr ( $ item ['item_url_target ' ] ), esc_attr ( $ item ['item_url_follow ' ] ), wp_kses_post ( $ item ['item_title ' ] ) ),
1174
1174
$ details
1175
1175
);
1176
- } else {
1176
+ } else {
1177
1177
$ content .= sprintf (
1178
1178
$ line_item ,
1179
1179
wp_kses_post ( $ item ['itemAttr ' ] ),
@@ -1616,14 +1616,38 @@ private function get_feed_item_filter( $sc, $sizes, $item, $feed_url, $index, $i
1616
1616
return $ item_array ;
1617
1617
}
1618
1618
1619
+ /**
1620
+ * Check if the URL is an image URL based on its extension.
1621
+ *
1622
+ * @param string|null $url The URL to check.
1623
+ * @return bool
1624
+ */
1625
+ public function is_image_url ( $ url ) {
1626
+ if ( empty ( $ url ) || ! is_string ( $ url ) ) {
1627
+ return false ;
1628
+ }
1629
+
1630
+ $ image_extensions = array ( 'jpg ' , 'jpeg ' , 'png ' , 'gif ' , 'webp ' , 'svg ' , 'bmp ' , 'tiff ' , 'tif ' , 'avif ' );
1631
+ $ url_parts = wp_parse_url ( $ url );
1632
+ if ( ! isset ( $ url_parts ['path ' ] ) ) {
1633
+ return false ;
1634
+ }
1635
+
1636
+ $ path_info = pathinfo ( $ url_parts ['path ' ] );
1637
+ return (
1638
+ isset ( $ path_info ['extension ' ] ) &&
1639
+ in_array ( strtolower ( $ path_info ['extension ' ] ), $ image_extensions )
1640
+ );
1641
+ }
1642
+
1619
1643
/**
1620
1644
* Retrive image from the item object
1621
1645
*
1622
1646
* @since 3.0.0
1623
1647
* @access public
1624
1648
*
1625
- * @param object $item The item object.
1626
- * @param array $sc The shorcode attributes array.
1649
+ * @param SimplePie\Item $item The item object.
1650
+ * @param array $sc The shorcode attributes array.
1627
1651
*
1628
1652
* @return string
1629
1653
*/
@@ -1640,38 +1664,40 @@ public function feedzy_retrieve_image( $item, $sc = null ) {
1640
1664
$ the_thumbnail = '' ;
1641
1665
$ enclosures = $ item ->get_enclosures ();
1642
1666
if ( $ enclosures ) {
1643
- foreach ( ( array ) $ enclosures as $ enclosure ) {
1667
+ foreach ( $ enclosures as $ enclosure ) {
1644
1668
// Item thumbnail.
1645
- $ thumbnail = $ enclosure ->get_thumbnail ();
1646
- $ medium = $ enclosure ->get_medium ();
1669
+ $ single_thumbnail = $ enclosure ->get_thumbnail ();
1670
+ $ medium = $ enclosure ->get_medium ();
1671
+
1647
1672
if ( in_array ( $ medium , array ( 'video ' ), true ) ) {
1648
1673
break ;
1649
1674
}
1650
- if ( $ thumbnail ) {
1651
- $ the_thumbnail = $ thumbnail ;
1675
+
1676
+ if ( $ single_thumbnail && $ this ->is_image_url ( $ single_thumbnail ) ) {
1677
+ $ the_thumbnail = $ single_thumbnail ;
1652
1678
}
1653
- if ( isset ( $ enclosure ->thumbnails ) ) {
1654
- foreach ( (array ) $ enclosure ->thumbnails as $ thumbnail ) {
1655
- $ the_thumbnail = $ thumbnail ;
1679
+
1680
+ $ thumbnails = $ enclosure ->get_thumbnails ();
1681
+ if ( ! empty ( $ thumbnails ) ) {
1682
+ foreach ( $ thumbnails as $ enclosure_thumbnail ) {
1683
+ if ( ! $ this ->is_image_url ( $ enclosure_thumbnail ) ) {
1684
+ continue ;
1685
+ }
1686
+ $ the_thumbnail = $ enclosure_thumbnail ;
1656
1687
}
1657
1688
}
1658
- $ thumbnail = $ enclosure ->embed ();
1659
- if ( $ thumbnail ) {
1689
+
1690
+ $ embedded_thumbnail = $ enclosure ->embed ();
1691
+ if ( $ embedded_thumbnail ) {
1660
1692
$ pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpeg|JPEG|jpe|JPE|gif|GIF|png|PNG)/i ' ;
1661
- if ( preg_match ( $ pattern , $ thumbnail , $ matches ) ) {
1693
+ if ( preg_match ( $ pattern , $ embedded_thumbnail , $ matches ) ) {
1662
1694
$ the_thumbnail = $ matches [0 ];
1663
1695
}
1664
1696
}
1665
- foreach ( (array ) $ enclosure ->get_link () as $ thumbnail ) {
1666
- $ pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpeg|JPEG|jpe|JPE|gif|GIF|png|PNG)/i ' ;
1667
- $ imgsrc = $ thumbnail ;
1668
- if ( preg_match ( $ pattern , $ imgsrc , $ matches ) ) {
1669
- $ the_thumbnail = $ thumbnail ;
1670
- break ;
1671
- } elseif ( in_array ( $ enclosure ->type , $ image_mime_types , true ) ) {
1672
- $ the_thumbnail = $ thumbnail ;
1673
- break ;
1674
- }
1697
+
1698
+ $ enclosure_link = $ enclosure ->get_link ();
1699
+ if ( $ this ->is_image_url ( $ enclosure_link ) ) {
1700
+ $ the_thumbnail = $ enclosure_link ;
1675
1701
}
1676
1702
// Break loop if thumbnail is found.
1677
1703
if ( ! empty ( $ the_thumbnail ) ) {
0 commit comments