View source
<?php
function gutenberg_render_block_core_archives($attributes) {
$show_post_count = !empty($attributes['showPostCounts']);
$class = 'wp-block-archives';
if (isset($attributes['align'])) {
$class .= " align{$attributes['align']}";
}
if (isset($attributes['className'])) {
$class .= " {$attributes['className']}";
}
if (!empty($attributes['displayAsDropdown'])) {
$class .= ' wp-block-archives-dropdown';
$dropdown_id = esc_attr(uniqid('wp-block-archives-'));
$title = __('Archives');
$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);
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;
}
$label = esc_attr($label);
$block_content = '<label class="screen-reader-text" for="' . $dropdown_id . '">' . $title . '</label>
<select id="' . $dropdown_id . '" name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="">' . $label . '</option>' . $archives . '</select>';
return sprintf('<div class="%1$s">%2$s</div>', esc_attr($class), $block_content);
}
$class .= ' wp-block-archives-list';
$archives_args = apply_filters('widget_archives_args', array(
'type' => 'monthly',
'show_post_count' => $show_post_count,
));
$archives_args['echo'] = 0;
$archives = wp_get_archives($archives_args);
$classnames = esc_attr($class);
if (empty($archives)) {
return sprintf('<div class="%1$s">%2$s</div>', $classnames, __('No archives to show.'));
}
return sprintf('<ul class="%1$s">%2$s</ul>', $classnames, $archives);
}
function gutenberg_register_block_core_archives() {
register_block_type('core/archives', array(
'attributes' => array(
'align' => array(
'type' => 'string',
'enum' => array(
'left',
'center',
'right',
'wide',
'full',
),
),
'className' => array(
'type' => 'string',
),
'displayAsDropdown' => array(
'type' => 'boolean',
'default' => false,
),
'showPostCounts' => array(
'type' => 'boolean',
'default' => false,
),
),
'render_callback' => 'gutenberg_render_block_core_archives',
));
}
add_action('init', 'gutenberg_register_block_core_archives', 20);