PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.0
Jetpack – WP Security, Backup, Speed, & Growth v16.0
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / extensions / blocks / top-posts / render.php
render.php
109 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Top Posts block render implementation.
4 *
5 * Loaded lazily from top-posts.php only when the block is rendered, to keep
6 * the render body out of the eager front-end PHP/opcache footprint.
7 *
8 * @package automattic/jetpack
9 */
10
11 namespace Automattic\Jetpack\Extensions\Top_Posts;
12
13 use Automattic\Jetpack\Modules;
14 use Automattic\Jetpack\Status\Request;
15 use Jetpack_Gutenberg;
16 use Jetpack_Top_Posts_Helper;
17
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 0 );
20 }
21
22 if ( ! class_exists( 'Jetpack_Top_Posts_Helper' ) ) {
23 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-top-posts-helper.php';
24 }
25
26 /**
27 * Top Posts block registration/dependency declaration.
28 *
29 * @param array $attributes Array containing the Top Posts block attributes.
30 *
31 * @return string
32 */
33 function load_assets_implementation( $attributes ) {
34 // Do not render anything when the Stats module is not active.
35 if ( ! ( new Modules() )->is_active( 'stats' ) ) {
36 return;
37 }
38
39 // Do not render in contexts outside the front-end (eg. emails, API).
40 if ( ! Request::is_frontend() ) {
41 return;
42 }
43
44 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
45
46 /*
47 * We cannot rely on obtaining posts from the block because
48 * top posts might have changed since then. As such, we must
49 * check for updated stats.
50 */
51 $period = $attributes['period'];
52 $number = $attributes['postsToShow'];
53 $types = implode( ',', array_keys( array_filter( $attributes['postTypes'] ) ) );
54
55 $data = Jetpack_Top_Posts_Helper::get_top_posts( $period, $number, $types );
56
57 if ( ! is_array( $data ) ) {
58 return;
59 }
60
61 $wrapper_attributes = \WP_Block_Supports::get_instance()->apply_block_supports();
62
63 $output = sprintf(
64 '<div class="jetpack-top-posts%s%s%s"%sdata-item-count="%s"><div class="jetpack-top-posts-wrapper">',
65 ! empty( $attributes['className'] ) ? ' ' . esc_attr( $attributes['className'] ) : '',
66 ! empty( $wrapper_attributes['class'] ) ? ' ' . esc_attr( $wrapper_attributes['class'] ) : '',
67 ' is-' . esc_attr( $attributes['layout'] ) . '-layout',
68 ! empty( $wrapper_attributes['style'] ) ? ' style="' . esc_attr( $wrapper_attributes['style'] ) . '"' : '',
69 count( $data )
70 );
71
72 foreach ( $data as $item ) {
73 $output .= '<div class="jetpack-top-posts-item">';
74
75 if ( $attributes['displayThumbnail'] ) {
76 $output .= '<a class="jetpack-top-posts-thumbnail-link" href="' . esc_url( $item['href'] ) . '">';
77
78 if ( ! empty( $item['thumbnail'] ) ) {
79 $output .= '<img class="jetpack-top-posts-thumbnail" src="' . esc_url( $item['thumbnail'] ) . '" alt="' . esc_attr( $item['title'] ) . '">';
80 } else {
81 $output .= '<div class="jetpack-top-posts-mock-thumbnail"></div>';
82 }
83
84 $output .= '</a>';
85 }
86
87 $output .= '<span class="jetpack-top-posts-title"><a href="' . esc_url( $item['href'] ) . '">' . esc_html( $item['title'] ) . '</a></span>';
88
89 if ( $attributes['displayDate'] ) {
90 $output .= '<span class="jetpack-top-posts-date has-small-font-size">' . esc_html( $item['date'] ) . '</span>';
91 }
92
93 if ( $attributes['displayAuthor'] ) {
94 $output .= '<span class="jetpack-top-posts-author has-small-font-size">' . esc_html( $item['author'] ) . '</span>';
95 }
96
97 if ( $attributes['displayContext'] && ! empty( $item['context'] ) && is_array( $item['context'] ) ) {
98 $context = reset( $item['context'] );
99 $output .= '<span class="jetpack-top-posts-context has-small-font-size"><a href="' . esc_url( get_category_link( $context->term_id ) ) . '">' . esc_html( $context->name ) . '</a></span>';
100 }
101
102 $output .= '</div>';
103 }
104
105 $output .= '</div></div>';
106
107 return $output;
108 }
109