Diff: STRATO-apps/wordpress_03/app/wp-includes/blocks/archives.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
/**
3
+
* Server-side rendering of the `core/archives` block.
4
+
*
5
+
* @package WordPress
6
+
*/
7
+
8
+
/**
9
+
* Renders the `core/archives` block on server.
10
+
*
11
+
* @since 5.0.0
12
+
*
13
+
* @see WP_Widget_Archives
14
+
*
15
+
* @param array $attributes The block attributes.
16
+
*
17
+
* @return string Returns the post content with archives added.
18
+
*/
19
+
function render_block_core_archives( $attributes ) {
20
+
$show_post_count = ! empty( $attributes['showPostCounts'] );
21
+
$type = isset( $attributes['type'] ) ? $attributes['type'] : 'monthly';
22
+
23
+
$class = 'wp-block-archives-list';
24
+
25
+
if ( ! empty( $attributes['displayAsDropdown'] ) ) {
26
+
27
+
$class = 'wp-block-archives-dropdown';
28
+
29
+
$dropdown_id = wp_unique_id( 'wp-block-archives-' );
30
+
$title = __( 'Archives' );
31
+
32
+
/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
33
+
$dropdown_args = apply_filters(
34
+
'widget_archives_dropdown_args',
35
+
array(
36
+
'type' => $type,
37
+
'format' => 'option',
38
+
'show_post_count' => $show_post_count,
39
+
)
40
+
);
41
+
42
+
$dropdown_args['echo'] = 0;
43
+
44
+
$archives = wp_get_archives( $dropdown_args );
45
+
46
+
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $class ) );
47
+
48
+
switch ( $dropdown_args['type'] ) {
49
+
case 'yearly':
50
+
$label = __( 'Select Year' );
51
+
break;
52
+
case 'monthly':
53
+
$label = __( 'Select Month' );
54
+
break;
55
+
case 'daily':
56
+
$label = __( 'Select Day' );
57
+
break;
58
+
case 'weekly':
59
+
$label = __( 'Select Week' );
60
+
break;
61
+
default:
62
+
$label = __( 'Select Post' );
63
+
break;
64
+
}
65
+
66
+
$show_label = empty( $attributes['showLabel'] ) ? ' screen-reader-text' : '';
67
+
68
+
$block_content = '<label for="' . $dropdown_id . '" class="wp-block-archives__label' . $show_label . '">' . esc_html( $title ) . '</label>
69
+
<select id="' . esc_attr( $dropdown_id ) . '" name="archive-dropdown">
70
+
<option value="">' . esc_html( $label ) . '</option>' . $archives . '</select>';
71
+
72
+
// Inject the dropdown script immediately after the select dropdown.
73
+
$block_content .= block_core_archives_build_dropdown_script( $dropdown_id );
74
+
75
+
return sprintf(
76
+
'<div %1$s>%2$s</div>',
77
+
$wrapper_attributes,
78
+
$block_content
79
+
);
80
+
}
81
+
82
+
/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
83
+
$archives_args = apply_filters(
84
+
'widget_archives_args',
85
+
array(
86
+
'type' => $type,
87
+
'show_post_count' => $show_post_count,
88
+
)
89
+
);
90
+
91
+
$archives_args['echo'] = 0;
92
+
93
+
$archives = wp_get_archives( $archives_args );
94
+
95
+
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $class ) );
96
+
97
+
if ( empty( $archives ) ) {
98
+
return sprintf(
99
+
'<div %1$s>%2$s</div>',
100
+
$wrapper_attributes,
101
+
__( 'No archives to show.' )
102
+
);
103
+
}
104
+
105
+
return sprintf(
106
+
'<ul %1$s>%2$s</ul>',
107
+
$wrapper_attributes,
108
+
$archives
109
+
);
110
+
}
111
+
112
+
/**
113
+
* Generates the inline script for an archives dropdown field.
114
+
*
115
+
* @since 6.9.0
116
+
*
117
+
* @param string $dropdown_id ID of the dropdown field.
118
+
*
119
+
* @return string Returns the dropdown onChange redirection script.
120
+
*/
121
+
function block_core_archives_build_dropdown_script( $dropdown_id ) {
122
+
ob_start();
123
+
124
+
$exports = array( $dropdown_id, home_url() );
125
+
?>
126
+
<script>
127
+
( ( [ dropdownId, homeUrl ] ) => {
128
+
const dropdown = document.getElementById( dropdownId );
129
+
function onSelectChange() {
130
+
setTimeout( () => {
131
+
if ( 'escape' === dropdown.dataset.lastkey ) {
132
+
return;
133
+
}
134
+
if ( dropdown.value ) {
135
+
location.href = dropdown.value;
136
+
}
137
+
}, 250 );
138
+
}
139
+
function onKeyUp( event ) {
140
+
if ( 'Escape' === event.key ) {
141
+
dropdown.dataset.lastkey = 'escape';
142
+
} else {
143
+
delete dropdown.dataset.lastkey;
144
+
}
145
+
}
146
+
function onClick() {
147
+
delete dropdown.dataset.lastkey;
148
+
}
149
+
dropdown.addEventListener( 'keyup', onKeyUp );
150
+
dropdown.addEventListener( 'click', onClick );
151
+
dropdown.addEventListener( 'change', onSelectChange );
152
+
} )( <?php echo wp_json_encode( $exports, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?> );
153
+
</script>
154
+
<?php
155
+
return wp_get_inline_script_tag(
156
+
trim( str_replace( array( '<script>', '</script>' ), '', ob_get_clean() ) ) .
157
+
"\n//# sourceURL=" . rawurlencode( __FUNCTION__ )
158
+
);
159
+
}
160
+
161
+
/**
162
+
* Register archives block.
163
+
*
164
+
* @since 5.0.0
165
+
*/
166
+
function register_block_core_archives() {
167
+
register_block_type_from_metadata(
168
+
__DIR__ . '/archives',
169
+
array(
170
+
'render_callback' => 'render_block_core_archives',
171
+
)
172
+
);
173
+
}
174
+
add_action( 'init', 'register_block_core_archives' );
175
+