kollapsminoriteten/wp-includes/blocks/archives.php

124 lines
2.8 KiB
PHP
Raw Normal View History

2019-11-02 10:38:58 +01:00
<?php
/**
* Server-side rendering of the `core/archives` block.
*
* @package WordPress
*/
/**
* Renders the `core/archives` block on server.
*
* @see WP_Widget_Archives
*
* @param array $attributes The block attributes.
*
* @return string Returns the post content with archives added.
*/
function render_block_core_archives( $attributes ) {
$show_post_count = ! empty( $attributes['showPostCounts'] );
2020-12-10 14:06:04 +01:00
$class = '';
2019-11-02 10:38:58 +01:00
if ( ! empty( $attributes['displayAsDropdown'] ) ) {
$class .= ' wp-block-archives-dropdown';
$dropdown_id = esc_attr( uniqid( 'wp-block-archives-' ) );
$title = __( 'Archives' );
/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
$dropdown_args = apply_filters(
'widget_archives_dropdown_args',
array(
'type' => 'monthly',
'format' => 'option',
'show_post_count' => $show_post_count,
)
);
$dropdown_args['echo'] = 0;
$archives = wp_get_archives( $dropdown_args );
2022-04-02 10:26:41 +02:00
$classnames = esc_attr( $class );
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classnames ) );
2019-11-02 10:38:58 +01:00
switch ( $dropdown_args['type'] ) {
case 'yearly':
$label = __( 'Select Year' );
break;
case 'monthly':
$label = __( 'Select Month' );
break;
case 'daily':
$label = __( 'Select Day' );
break;
case 'weekly':
$label = __( 'Select Week' );
break;
default:
$label = __( 'Select Post' );
break;
}
2020-12-10 14:06:04 +01:00
$label = esc_html( $label );
2019-11-02 10:38:58 +01:00
2022-04-02 10:26:41 +02:00
$block_content = '<label for="' . $dropdown_id . '">' . $title . '</label>
2019-11-02 10:38:58 +01:00
<select id="' . $dropdown_id . '" name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="">' . $label . '</option>' . $archives . '</select>';
2019-11-15 22:59:44 +01:00
return sprintf(
2022-04-02 10:26:41 +02:00
'<div %1$s>%2$s</div>',
$wrapper_attributes,
2019-11-02 10:38:58 +01:00
$block_content
);
2019-11-15 22:59:44 +01:00
}
2019-11-02 10:38:58 +01:00
2019-11-15 22:59:44 +01:00
$class .= ' wp-block-archives-list';
2019-11-02 10:38:58 +01:00
2019-11-15 22:59:44 +01:00
/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
$archives_args = apply_filters(
'widget_archives_args',
array(
'type' => 'monthly',
'show_post_count' => $show_post_count,
)
);
2019-11-02 10:38:58 +01:00
2019-11-15 22:59:44 +01:00
$archives_args['echo'] = 0;
2019-11-02 10:38:58 +01:00
2019-11-15 22:59:44 +01:00
$archives = wp_get_archives( $archives_args );
2019-11-02 10:38:58 +01:00
2019-11-15 22:59:44 +01:00
$classnames = esc_attr( $class );
2019-11-02 10:38:58 +01:00
2020-12-10 14:06:04 +01:00
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classnames ) );
2019-11-02 10:38:58 +01:00
2020-12-10 14:06:04 +01:00
if ( empty( $archives ) ) {
2019-11-15 22:59:44 +01:00
return sprintf(
2020-12-10 14:06:04 +01:00
'<div %1$s>%2$s</div>',
$wrapper_attributes,
2019-11-15 22:59:44 +01:00
__( 'No archives to show.' )
);
2019-11-02 10:38:58 +01:00
}
2019-11-15 22:59:44 +01:00
return sprintf(
2020-12-10 14:06:04 +01:00
'<ul %1$s>%2$s</ul>',
$wrapper_attributes,
2019-11-15 22:59:44 +01:00
$archives
);
2019-11-02 10:38:58 +01:00
}
/**
* Register archives block.
*/
function register_block_core_archives() {
2020-09-15 14:29:22 +02:00
register_block_type_from_metadata(
__DIR__ . '/archives',
2019-11-02 10:38:58 +01:00
array(
'render_callback' => 'render_block_core_archives',
)
);
}
add_action( 'init', 'register_block_core_archives' );