PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / blocks / instagram-gallery / render.php
jetpack / extensions / blocks / instagram-gallery Last commit date
instagram-gallery.php 1 week ago render.php 1 week ago
render.php
139 lines
1 <?php
2 /**
3 * Instagram Gallery block render implementation.
4 *
5 * Loaded lazily from instagram-gallery.php only when the block is rendered, to
6 * keep the render body out of the eager front-end PHP/opcache footprint.
7 *
8 * @package automattic/jetpack
9 */
10
11 namespace Automattic\Jetpack\Extensions\Instagram_Gallery;
12
13 use Automattic\Jetpack\Blocks;
14 use Jetpack_Gutenberg;
15 use Jetpack_Instagram_Gallery_Helper;
16
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit( 0 );
19 }
20
21 /**
22 * Instagram Gallery block render implementation.
23 *
24 * @param array $attributes Array containing the Instagram Gallery block attributes.
25 * @param string $content The Instagram Gallery block content.
26 *
27 * @return string
28 */
29 function render_block_implementation( $attributes, $content ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
30 if ( ! array_key_exists( 'accessToken', $attributes ) ) {
31 return '';
32 }
33
34 $access_token = $attributes['accessToken'];
35 $columns = get_instagram_gallery_attribute( 'columns', $attributes );
36 $count = get_instagram_gallery_attribute( 'count', $attributes );
37 $is_stacked_on_mobile = get_instagram_gallery_attribute( 'isStackedOnMobile', $attributes );
38 $spacing = get_instagram_gallery_attribute( 'spacing', $attributes );
39
40 $grid_classes = Blocks::classes(
41 Blocks::get_block_feature( __DIR__ ),
42 $attributes,
43 array(
44 'wp-block-jetpack-instagram-gallery__grid',
45 'wp-block-jetpack-instagram-gallery__grid-columns-' . $columns,
46 ( $is_stacked_on_mobile ? 'is-stacked-on-mobile' : null ),
47 )
48 );
49
50 $grid_style = sprintf(
51 'grid-gap: %1$spx; --latest-instagram-posts-spacing: %1$spx;',
52 $spacing
53 );
54
55 if ( ! class_exists( 'Jetpack_Instagram_Gallery_Helper' ) ) {
56 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-instagram-gallery-helper.php';
57 }
58 $gallery = Jetpack_Instagram_Gallery_Helper::get_instagram_gallery( $access_token, $count );
59
60 if ( ! is_object( $gallery ) || is_wp_error( $gallery ) || ! property_exists( $gallery, 'images' ) || 'ERROR' === $gallery->images ) {
61 if ( ! current_user_can( 'edit_post', get_the_ID() ) ) {
62 return '';
63 }
64
65 $connection_unavailable = is_wp_error( $gallery ) && 'instagram_connection_unavailable' === $gallery->get_error_code();
66
67 $error_message = $connection_unavailable
68 ? $gallery->get_error_message()
69 : esc_html__( 'An error occurred in the Latest Instagram Posts block. Please try again later.', 'jetpack' );
70
71 $message = $error_message
72 . '<br />'
73 . esc_html__( '(Only administrators and the post author will see this message.)', 'jetpack' );
74 return Jetpack_Gutenberg::notice( $message, 'error', Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attributes ) );
75 }
76
77 if ( empty( $gallery->images ) ) {
78 return '';
79 }
80
81 $images = array_slice( $gallery->images, 0, $count );
82
83 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
84
85 ob_start();
86 ?>
87 <?php if ( Blocks::is_amp_request() ) : ?>
88 <style>
89 .wp-block-jetpack-instagram-gallery__grid .wp-block-jetpack-instagram-gallery__grid-post amp-img img {
90 object-fit: cover;
91 }
92 </style>
93 <?php endif; ?>
94 <div class="<?php echo esc_attr( $grid_classes ); ?>" style="<?php echo esc_attr( $grid_style ); ?>">
95 <?php foreach ( $images as $image ) : ?>
96 <a
97 class="wp-block-jetpack-instagram-gallery__grid-post"
98 href="<?php echo esc_url( $image->link ); ?>"
99 rel="noopener noreferrer"
100 target="_blank"
101 >
102 <img
103 alt="<?php echo esc_attr( $image->title ? $image->title : $image->link ); ?>"
104 src="<?php echo esc_url( $image->url ); ?>"
105 loading="lazy"
106 />
107 </a>
108 <?php endforeach; ?>
109 </div>
110
111 <?php
112 return ob_get_clean();
113 }
114
115 /**
116 * Get Instagram Gallery block attribute.
117 *
118 * @param string $attribute String containing the attribute name to get.
119 * @param array $attributes Array containing the Instagram Gallery block attributes.
120 *
121 * @return mixed
122 */
123 function get_instagram_gallery_attribute( $attribute, $attributes ) {
124 if ( array_key_exists( $attribute, $attributes ) ) {
125 return $attributes[ $attribute ];
126 }
127
128 $default_attributes = array(
129 'columns' => 3,
130 'count' => 9,
131 'isStackedOnMobile' => true,
132 'spacing' => 10,
133 );
134
135 if ( array_key_exists( $attribute, $default_attributes ) ) {
136 return $default_attributes[ $attribute ];
137 }
138 }
139