Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ function () {
);

require_once __DIR__ . '/inc/Helpers/Svg.php';
require_once __DIR__ . '/inc/Helpers/Formatting/Datetime.php';
require_once __DIR__ . '/inc/Helpers/Formatting/Escape.php';
require_once __DIR__ . '/inc/Helpers/Formatting/Image.php';
require_once __DIR__ . '/inc/Helpers/Formatting/Link.php';
Expand Down
86 changes: 86 additions & 0 deletions inc/Helpers/Formatting/Datetime.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php
namespace BEA\Theme\Framework\Helpers\Formatting\Datetime;

/**
* Echo accessible <time> markup.
*
* @usage BEA\Theme\Framework\Helpers\Formatting\Datetime\the_datetime( get_the_date( 'd.m.Y' ), [ 'datetime' => get_the_date( 'Y-m-d' ), 'class' => 'crd__date' ] );
*
* @param string $display_date Formatted date string shown to users.
* @param array $settings {
* Optional. Settings for the datetime markup.
*
* @type string $before Markup before the <time> element. Default empty.
* @type string $after Markup after the <time> element. Default empty.
* @type string $class CSS class on the <time> element. Default empty.
* @type string $label Screen-reader label prepended to the date. Default "Published on".
* @type string $datetime Value for the datetime attribute. Required.
* @type bool $show_label Whether to output the screen-reader label. Default true.
* }
*
* @return void
*/
function the_datetime( string $display_date, array $settings = [] ): void {
echo get_the_datetime( $display_date, $settings ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}

/**
* Build accessible <time> markup.
*
* @usage BEA\Theme\Framework\Helpers\Formatting\Datetime\get_the_datetime( get_the_date( 'd.m.Y' ), [ 'datetime' => get_the_date( 'Y-m-d' ), 'class' => 'crd__date' ] );
*
* @param string $display_date Formatted date string shown to users.
* @param array $settings {
* Optional. Settings for the datetime markup.
*
* @type string $before Markup before the <time> element. Default empty.
* @type string $after Markup after the <time> element. Default empty.
* @type string $class CSS class on the <time> element. Default empty.
* @type string $label Screen-reader label prepended to the date. Default "Published on".
* @type string $datetime Value for the datetime attribute. Required.
* @type bool $show_label Whether to output the screen-reader label. Default true.
* }
*
* @return string
*/
function get_the_datetime( string $display_date, array $settings = [] ): string {
$settings = wp_parse_args(
$settings,
[
'before' => '',
'after' => '',
'class' => '',
'label' => __( 'Published on', 'beapi-blocks-theme' ),
'datetime' => '',
'show_label' => true,
]
);

if ( empty( $display_date ) || empty( $settings['datetime'] ) ) {
return '';
}

$settings = apply_filters( 'bea_theme_framework_datetime_settings', $settings, $display_date, $settings['datetime'] );

$class_attr = $settings['class'] ? sprintf( ' class="%s"', esc_attr( $settings['class'] ) ) : '';

$label_markup = '';
if ( $settings['show_label'] && ! empty( $settings['label'] ) ) {
$label_markup = sprintf(
'<span class="sr-only">%s </span>',
esc_html( $settings['label'] )
);
}

$datetime_markup = sprintf(
'<time%s datetime="%s">%s%s</time>',
$class_attr,
esc_attr( $settings['datetime'] ),
$label_markup,
esc_html( $display_date )
);

$datetime_markup = apply_filters( 'bea_theme_framework_datetime_markup', $datetime_markup, $settings, $display_date, $settings['datetime'] );

return $settings['before'] . $datetime_markup . $settings['after'];
}