YoutubeBlockService.php
49 lines
| 1 | <?php |
| 2 | |
| 3 | namespace PrestoPlayer\Services\Blocks; |
| 4 | |
| 5 | class YoutubeBlockService |
| 6 | { |
| 7 | public function register() |
| 8 | { |
| 9 | add_action('wp_get_attachment_url', [$this, 'replaceLink'], 10, 2); |
| 10 | } |
| 11 | |
| 12 | public function replaceLink($url, $post_id) |
| 13 | { |
| 14 | $type = get_post_meta($post_id, 'presto_video_type', true); |
| 15 | $external_id = get_post_meta($post_id, 'presto_external_id', true); |
| 16 | |
| 17 | if ($type !== 'youtube') { |
| 18 | return $url; |
| 19 | } |
| 20 | |
| 21 | return "https://www.youtube.com/watch?v=" . (int) $external_id; |
| 22 | } |
| 23 | |
| 24 | /** |
| 25 | * Get video data from remote |
| 26 | * |
| 27 | * @param string $id |
| 28 | * @return array |
| 29 | */ |
| 30 | public function getRemoteVideoData($id) |
| 31 | { |
| 32 | $response = wp_remote_get(add_query_arg( |
| 33 | [ |
| 34 | 'format' => 'json', |
| 35 | 'url' => esc_url_raw('https://www.youtube.com/watch?v=' . $id) |
| 36 | ], |
| 37 | 'https://www.youtube.com/oembed' |
| 38 | )); |
| 39 | |
| 40 | // handle errors silently since it's progressive enhancement |
| 41 | if (is_wp_error($response)) { |
| 42 | return null; |
| 43 | } |
| 44 | |
| 45 | $body = wp_remote_retrieve_body($response); |
| 46 | return json_decode($body, true); |
| 47 | } |
| 48 | } |
| 49 |