mixcloud.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /*
  3. * Mixcloud embeds
  4. *
  5. * examples:
  6. * [mixcloud MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ /]
  7. * [mixcloud MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ width=640 height=480 /]
  8. * [mixcloud http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ /]
  9. * [mixcloud http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ width=640 height=480 /]
  10. * [mixcloud]http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/[/mixcloud]
  11. * [mixcloud]MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/[/mixcloud]
  12. * [mixcloud http://www.mixcloud.com/mat/playlists/classics/ width=660 height=208 hide_cover=1 hide_tracklist=1]
  13. */
  14. // Register oEmbed provider
  15. // Example URL: http://www.mixcloud.com/oembed/?url=http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/
  16. wp_oembed_add_provider( '#https?://(?:www\.)?mixcloud\.com/\S*#i', 'https://www.mixcloud.com/oembed', true );
  17. // Register mixcloud shortcode
  18. add_shortcode( 'mixcloud', 'mixcloud_shortcode' );
  19. function mixcloud_shortcode( $atts, $content = null ) {
  20. if ( empty( $atts[0] ) && empty( $content ) ) {
  21. return '<!-- mixcloud error: invalid mixcloud resource -->';
  22. }
  23. $regular_expression = '/((?<=mixcloud\\.com\\/)[\\w-\\/]+$)|(^[\\w-\\/]+$)/i';
  24. preg_match( $regular_expression, $content, $match );
  25. if ( ! empty( $match ) ) {
  26. $resource_id = trim( $match[0] );
  27. } else {
  28. preg_match( $regular_expression, $atts[0], $match );
  29. if ( ! empty( $match ) ) {
  30. $resource_id = trim( $match[0] );
  31. }
  32. }
  33. if ( empty( $resource_id ) ) {
  34. return '<!-- mixcloud error: invalid mixcloud resource -->';
  35. }
  36. $mixcloud_url = 'https://mixcloud.com/' . $resource_id;
  37. $atts = shortcode_atts(
  38. array(
  39. 'width' => false,
  40. 'height' => false,
  41. 'color' => false,
  42. 'light' => false,
  43. 'dark' => false,
  44. 'hide_tracklist' => false,
  45. 'hide_cover' => false,
  46. 'mini' => false,
  47. 'hide_followers' => false,
  48. 'hide_artwork' => false,
  49. ), $atts
  50. );
  51. // remove falsey values
  52. $atts = array_filter( $atts );
  53. $query_args = array( 'url' => $mixcloud_url );
  54. $query_args = array_merge( $query_args, $atts );
  55. $url = add_query_arg( urlencode_deep( $query_args ), 'https://www.mixcloud.com/oembed/' );
  56. $mixcloud_response = wp_remote_get( $url, array( 'redirection' => 0 ) );
  57. if ( is_wp_error( $mixcloud_response ) || 200 !== $mixcloud_response['response']['code'] || empty( $mixcloud_response['body'] ) ) {
  58. return '<!-- mixcloud error: invalid mixcloud resource -->';
  59. }
  60. $response_body = json_decode( $mixcloud_response['body'] );
  61. return $response_body->html;
  62. }