block-youtube.php
80 lines
| 1 | <?php |
| 2 | |
| 3 | |
| 4 | /** |
| 5 | * Renders the `embedpress/youtube` block on server. |
| 6 | * |
| 7 | * @param array $attributes The block attributes. |
| 8 | * |
| 9 | * @return false|string |
| 10 | */ |
| 11 | |
| 12 | function isYoutube($url) { |
| 13 | $pattern = '/^(https?:\/\/)?(www\.)?(youtube\.com\/(watch\?(.*&)?v=|(embed|v)\/))|youtu.be\/([a-zA-Z0-9_-]{11})/'; |
| 14 | |
| 15 | return preg_match($pattern, $url); |
| 16 | } |
| 17 | |
| 18 | |
| 19 | function embedpress_gutenberg_render_block_youtube( $attributes ) |
| 20 | { |
| 21 | ob_start(); |
| 22 | $align = 'align' . ( isset( $attributes[ 'align' ] ) ? $attributes[ 'align' ] : 'center' ); |
| 23 | $youtube_params = apply_filters( 'embedpress_gutenberg_youtube_params', [] ); |
| 24 | $iframeUrl = $attributes[ 'iframeSrc' ]; |
| 25 | foreach ( $youtube_params as $param => $value ) { |
| 26 | $iframeUrl = add_query_arg( $param, $value, $iframeUrl ); |
| 27 | } |
| 28 | |
| 29 | if(!isYoutube($iframeUrl)) |
| 30 | { |
| 31 | return; |
| 32 | } |
| 33 | |
| 34 | ?> |
| 35 | <div class="ose-youtube wp-block-embed-youtube ose-youtube-single-video <?php echo esc_attr($align); ?>"> |
| 36 | <iframe src="<?php echo esc_url($iframeUrl); ?>" |
| 37 | allowtransparency="true" |
| 38 | allowfullscreen="true" |
| 39 | frameborder="0" |
| 40 | width="640" height="360"> |
| 41 | </iframe> |
| 42 | </div> |
| 43 | <?php |
| 44 | return ob_get_clean(); |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * Registers the `embedpress/youtube-block` block on server. |
| 49 | */ |
| 50 | function embedpress_gutenberg_register_block_youtube() |
| 51 | { |
| 52 | if ( function_exists( 'register_block_type' ) ) : |
| 53 | register_block_type( 'embedpress/youtube-block', [ |
| 54 | 'style' => 'embedpress_youtube-cgb-style-css', |
| 55 | // Enqueue blocks.build.js in the editor only. |
| 56 | 'editor_script' => 'embedpress_youtube-cgb-block-js', |
| 57 | // Enqueue blocks.editor.build.css in the editor only. |
| 58 | 'editor_style' => 'embedpress_youtube-cgb-block-editor-css', |
| 59 | |
| 60 | 'attributes' => [ |
| 61 | 'url' => [ |
| 62 | 'type' => 'string', |
| 63 | 'default' => '' |
| 64 | ], |
| 65 | 'iframeSrc' => [ |
| 66 | 'type' => 'string', |
| 67 | 'default' => '' |
| 68 | ], |
| 69 | 'mediaId' => [ |
| 70 | 'type' => 'string', |
| 71 | 'default' => '' |
| 72 | ] |
| 73 | ], |
| 74 | 'render_callback' => 'embedpress_gutenberg_render_block_youtube', |
| 75 | ] ); |
| 76 | endif; |
| 77 | } |
| 78 | |
| 79 | add_action( 'init', 'embedpress_gutenberg_register_block_youtube' ); |
| 80 |