/var/www/hkosl.com/aga/wp-content/plugins/jetpack/modules/shortcodes/medium.php


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
/**
 * 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"]
 *
 * @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;

    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 );

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

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

    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
 *
 * @param array $atts Shortcode attributes.
 */
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 wp_parse_url$urlPHP_URL_PATH );
    if ( 
preg_match'/^\/@[\.\w]+$/'$url_path ) ) {
        return 
'profile';
    } 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(
            
'url'       => '',
            
'width'     => '400',
            
'border'    => true,
            
'collapsed' => false,
        ),
        
$atts,
        
'medium'
    
);
}