1 | <?php
|
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 | function wp_latest_comments_draft_or_post_title( $post = 0 ) {
|
29 | $title = get_the_title( $post );
|
30 | if ( empty( $title ) ) {
|
31 | $title = __( '(no title)' );
|
32 | }
|
33 | return esc_html( $title );
|
34 | }
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | function render_block_core_latest_comments( $attributes = array() ) {
|
44 |
|
45 | $comments = get_comments(
|
46 | apply_filters(
|
47 | 'widget_comments_args',
|
48 | array(
|
49 | 'number' => $attributes['commentsToShow'],
|
50 | 'status' => 'approve',
|
51 | 'post_status' => 'publish',
|
52 | )
|
53 | )
|
54 | );
|
55 |
|
56 | $list_items_markup = '';
|
57 | if ( ! empty( $comments ) ) {
|
58 |
|
59 | $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
|
60 | _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );
|
61 |
|
62 | foreach ( $comments as $comment ) {
|
63 | $list_items_markup .= '<li class="wp-block-latest-comments__comment">';
|
64 | if ( $attributes['displayAvatar'] ) {
|
65 | $avatar = get_avatar(
|
66 | $comment,
|
67 | 48,
|
68 | '',
|
69 | '',
|
70 | array(
|
71 | 'class' => 'wp-block-latest-comments__comment-avatar',
|
72 | )
|
73 | );
|
74 | if ( $avatar ) {
|
75 | $list_items_markup .= $avatar;
|
76 | }
|
77 | }
|
78 |
|
79 | $list_items_markup .= '<article>';
|
80 | $list_items_markup .= '<footer class="wp-block-latest-comments__comment-meta">';
|
81 | $author_url = get_comment_author_url( $comment );
|
82 | if ( empty( $author_url ) && ! empty( $comment->user_id ) ) {
|
83 | $author_url = get_author_posts_url( $comment->user_id );
|
84 | }
|
85 |
|
86 | $author_markup = '';
|
87 | if ( $author_url ) {
|
88 | $author_markup .= '<a class="wp-block-latest-comments__comment-author" href="' . esc_url( $author_url ) . '">' . get_comment_author( $comment ) . '</a>';
|
89 | } else {
|
90 | $author_markup .= '<span class="wp-block-latest-comments__comment-author">' . get_comment_author( $comment ) . '</span>';
|
91 | }
|
92 |
|
93 |
|
94 |
|
95 | $post_title = '<a class="wp-block-latest-comments__comment-link" href="' . esc_url( get_comment_link( $comment ) ) . '">' . wp_latest_comments_draft_or_post_title( $comment->comment_post_ID ) . '</a>';
|
96 |
|
97 | $list_items_markup .= sprintf(
|
98 |
|
99 | __( '%1$s on %2$s' ),
|
100 | $author_markup,
|
101 | $post_title
|
102 | );
|
103 |
|
104 | if ( $attributes['displayDate'] ) {
|
105 | $list_items_markup .= sprintf(
|
106 | '<time datetime="%1$s" class="wp-block-latest-comments__comment-date">%2$s</time>',
|
107 | esc_attr( get_comment_date( 'c', $comment ) ),
|
108 | date_i18n( get_option( 'date_format' ), get_comment_date( 'U', $comment ) )
|
109 | );
|
110 | }
|
111 | $list_items_markup .= '</footer>';
|
112 | if ( $attributes['displayExcerpt'] ) {
|
113 | $list_items_markup .= '<div class="wp-block-latest-comments__comment-excerpt">' . wpautop( get_comment_excerpt( $comment ) ) . '</div>';
|
114 | }
|
115 | $list_items_markup .= '</article></li>';
|
116 | }
|
117 | }
|
118 |
|
119 | $class = 'wp-block-latest-comments';
|
120 | if ( ! empty( $attributes['className'] ) ) {
|
121 | $class .= ' ' . $attributes['className'];
|
122 | }
|
123 | if ( isset( $attributes['align'] ) ) {
|
124 | $class .= " align{$attributes['align']}";
|
125 | }
|
126 | if ( $attributes['displayAvatar'] ) {
|
127 | $class .= ' has-avatars';
|
128 | }
|
129 | if ( $attributes['displayDate'] ) {
|
130 | $class .= ' has-dates';
|
131 | }
|
132 | if ( $attributes['displayExcerpt'] ) {
|
133 | $class .= ' has-excerpts';
|
134 | }
|
135 | if ( empty( $comments ) ) {
|
136 | $class .= ' no-comments';
|
137 | }
|
138 | $classnames = esc_attr( $class );
|
139 |
|
140 | $block_content = ! empty( $comments ) ? sprintf(
|
141 | '<ol class="%1$s">%2$s</ol>',
|
142 | $classnames,
|
143 | $list_items_markup
|
144 | ) : sprintf(
|
145 | '<div class="%1$s">%2$s</div>',
|
146 | $classnames,
|
147 | __( 'No comments to show.' )
|
148 | );
|
149 |
|
150 | return $block_content;
|
151 | }
|
152 |
|
153 | register_block_type(
|
154 | 'core/latest-comments',
|
155 | array(
|
156 | 'attributes' => array(
|
157 | 'align' => array(
|
158 | 'type' => 'string',
|
159 | 'enum' => array( 'left', 'center', 'right', 'wide', 'full' ),
|
160 | ),
|
161 | 'className' => array(
|
162 | 'type' => 'string',
|
163 | ),
|
164 | 'commentsToShow' => array(
|
165 | 'type' => 'number',
|
166 | 'default' => 5,
|
167 | 'minimum' => 1,
|
168 | 'maximum' => 100,
|
169 | ),
|
170 | 'displayAvatar' => array(
|
171 | 'type' => 'boolean',
|
172 | 'default' => true,
|
173 | ),
|
174 | 'displayDate' => array(
|
175 | 'type' => 'boolean',
|
176 | 'default' => true,
|
177 | ),
|
178 | 'displayExcerpt' => array(
|
179 | 'type' => 'boolean',
|
180 | 'default' => true,
|
181 | ),
|
182 | ),
|
183 | 'render_callback' => 'render_block_core_latest_comments',
|
184 | )
|
185 | );
|