summaryrefslogtreecommitdiff
blob: 02d02aaf21d0e8e45b2f05fd8861c30337498aea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php

// Embed support for Medium https://medium.com/p/3eaed64aed8a

/**
 * Faux-oembed support for Medium permalinks
 *
 * e.g.
 * https://medium.com/help-center
 * https://medium.com/@richroll
 */
wp_embed_register_handler( 'medium', '#^https?://medium.com/([a-zA-z0-9-_@]+)#', 'jetpack_embed_medium_oembed' );

function jetpack_embed_medium_oembed( $matches, $attr, $url ) {
	$attr        = jetpack_embed_medium_args( $attr );
	$attr['url'] = $url;

	return jetpack_embed_medium_embed_html( $attr );
}

function jetpack_embed_medium_embed_html( $args ) {
	$args = jetpack_embed_medium_args( $args );

	if ( empty( $args['url'] ) ) {
		return;
	}

	$args['type'] = jetpack_embed_medium_get_embed_type( $args['url'] );

	return sprintf( '<script async src="https://static.medium.com/embed.js"></script><a class="m-%1$s" href="%2$s" target="_blank" data-width="%3$s" data-border="%4$s" data-collapsed="%5$s">View %1$s at Medium.com</a>', esc_attr( $args['type'] ), esc_url( $args['url'] ), esc_attr( $args['width'] ), esc_attr( $args['border'] ), esc_attr( $args['collapsed'] ) );
}

/**
 * Shortcode support that allows passing in URL
 *
 * [medium url="https://medium.com/help-center" width="100%" border="false" collapsed="true"]
 */
add_shortcode( 'medium', 'jetpack_embed_medium_shortcode' );

function jetpack_embed_medium_shortcode( $atts ) {
	$atts = jetpack_embed_medium_args( $atts );

	if ( ! empty( $atts['url'] ) ) {
		global $wp_embed;
		return $wp_embed->shortcode( $atts, $atts['url'] );
	}
}

function jetpack_embed_medium_get_embed_type( $url ) {
	$url_path = parse_url( $url, PHP_URL_PATH );
	if ( preg_match( '/^\/@[\.\w]+$/', $url_path ) ) {
		return 'profile';
	} elseif ( preg_match( '/^\/[\da-zA-Z-]+$/', $url_path ) ) {
		return 'collection';
	}

	return 'story';
}

function jetpack_embed_medium_args( $atts ) {
	return shortcode_atts(
		array(
			'url'       => '',
			'width'     => '400',
			'border'    => true,
			'collapsed' => false,
		),
		$atts,
		'medium'
	);
}