summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/shortcodes/medium.php')
-rw-r--r--plugins/jetpack/modules/shortcodes/medium.php80
1 files changed, 67 insertions, 13 deletions
diff --git a/plugins/jetpack/modules/shortcodes/medium.php b/plugins/jetpack/modules/shortcodes/medium.php
index 02d02aaf..6285759e 100644
--- a/plugins/jetpack/modules/shortcodes/medium.php
+++ b/plugins/jetpack/modules/shortcodes/medium.php
@@ -1,16 +1,26 @@
<?php
-
-// Embed support for Medium https://medium.com/p/3eaed64aed8a
-
/**
- * Faux-oembed support for Medium permalinks
+ * Embed support for Medium
+ *
+ * Supported formats:
+ * - Profiles: https://medium.com/@jeherve
+ * - Stories: https://medium.com/@jeherve/this-is-a-story-19f582daaf5b
+ * - And all the above in shortcode formats:
+ * [medium url="https://medium.com/@jeherve/this-is-a-story-19f582daaf5b" width="100%" border="false" collapsed="true"]
*
- * e.g.
- * https://medium.com/help-center
- * https://medium.com/@richroll
+ * @package Jetpack
*/
+
+// Faux-oembed support for Medium permalinks.
wp_embed_register_handler( 'medium', '#^https?://medium.com/([a-zA-z0-9-_@]+)#', 'jetpack_embed_medium_oembed' );
+/**
+ * Callback to modify output of embedded Medium posts.
+ *
+ * @param array $matches Regex partial matches against the URL passed.
+ * @param array $attr Attributes received in embed response.
+ * @param array $url Requested URL to be embedded.
+ */
function jetpack_embed_medium_oembed( $matches, $attr, $url ) {
$attr = jetpack_embed_medium_args( $attr );
$attr['url'] = $url;
@@ -18,6 +28,11 @@ function jetpack_embed_medium_oembed( $matches, $attr, $url ) {
return jetpack_embed_medium_embed_html( $attr );
}
+/**
+ * Return custom markup to display a Medium profile, collection, or story.
+ *
+ * @param array $args Attributes received in embed response.
+ */
function jetpack_embed_medium_embed_html( $args ) {
$args = jetpack_embed_medium_args( $args );
@@ -27,36 +42,75 @@ function jetpack_embed_medium_embed_html( $args ) {
$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'] ) );
+ if ( 'collection' === $args['type'] ) {
+ return sprintf(
+ '<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>',
+ esc_url( $args['url'] ),
+ esc_html__( 'View this collection on Medium.com', 'jetpack' )
+ );
+ }
+
+ wp_enqueue_script(
+ 'medium-embed',
+ 'https://static.medium.com/embed.js',
+ array(),
+ JETPACK__VERSION,
+ true
+ );
+
+ return sprintf(
+ '<a class="m-%1$s" href="%2$s" target="_blank" data-width="%3$s" data-border="%4$s" data-collapsed="%5$s">%6$s</a>',
+ esc_attr( $args['type'] ),
+ esc_url( $args['url'] ),
+ esc_attr( $args['width'] ),
+ esc_attr( $args['border'] ),
+ esc_attr( $args['collapsed'] ),
+ esc_html__( 'View at Medium.com', 'jetpack' )
+ );
}
/**
* Shortcode support that allows passing in URL
*
- * [medium url="https://medium.com/help-center" width="100%" border="false" collapsed="true"]
+ * @param array $atts Shortcode attributes.
*/
-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'] );
+ } else {
+ if ( current_user_can( 'edit_posts' ) ) {
+ return esc_html__( 'You did not provide a valid Medium URL.', 'jetpack' );
+ } else {
+ return '<!-- Missing Medium URL -->';
+ }
}
}
+add_shortcode( 'medium', 'jetpack_embed_medium_shortcode' );
+/**
+ * Get embed type (profile, collection, or story) based on Medium URL.
+ *
+ * @param string $url Medium URL.
+ */
function jetpack_embed_medium_get_embed_type( $url ) {
- $url_path = parse_url( $url, PHP_URL_PATH );
+ $url_path = wp_parse_url( $url, PHP_URL_PATH );
if ( preg_match( '/^\/@[\.\w]+$/', $url_path ) ) {
return 'profile';
- } elseif ( preg_match( '/^\/[\da-zA-Z-]+$/', $url_path ) ) {
+ } elseif ( preg_match( '/^\/(?:s)\/(.+)$/', $url_path ) ) {
return 'collection';
}
return 'story';
}
+/**
+ * Process Medium shortcode attributes.
+ *
+ * @param array $atts Shortcode attributes.
+ */
function jetpack_embed_medium_args( $atts ) {
return shortcode_atts(
array(