--- a/wp/wp-includes/blocks/post-navigation-link.php Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/blocks/post-navigation-link.php Fri Sep 05 18:40:08 2025 +0200
@@ -8,6 +8,8 @@
/**
* Renders the `core/post-navigation-link` block on the server.
*
+ * @since 5.9.0
+ *
* @param array $attributes Block attributes.
* @param string $content Block default content.
*
@@ -28,12 +30,29 @@
if ( isset( $attributes['textAlign'] ) ) {
$classes .= " has-text-align-{$attributes['textAlign']}";
}
- $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $classes ) );
+ $wrapper_attributes = get_block_wrapper_attributes(
+ array(
+ 'class' => $classes,
+ )
+ );
// Set default values.
$format = '%link';
$link = 'next' === $navigation_type ? _x( 'Next', 'label for next post link' ) : _x( 'Previous', 'label for previous post link' );
$label = '';
+ // Only use hardcoded values here, otherwise we need to add escaping where these values are used.
+ $arrow_map = array(
+ 'none' => '',
+ 'arrow' => array(
+ 'next' => '→',
+ 'previous' => '←',
+ ),
+ 'chevron' => array(
+ 'next' => '»',
+ 'previous' => '«',
+ ),
+ );
+
// If a custom label is provided, make this a link.
// `$label` is used to prepend the provided label, if we want to show the page title as well.
if ( isset( $attributes['label'] ) && ! empty( $attributes['label'] ) ) {
@@ -71,10 +90,32 @@
}
}
- // The dynamic portion of the function name, `$navigation_type`,
- // refers to the type of adjacency, 'next' or 'previous'.
+ // Display arrows.
+ if ( isset( $attributes['arrow'] ) && 'none' !== $attributes['arrow'] && isset( $arrow_map[ $attributes['arrow'] ] ) ) {
+ $arrow = $arrow_map[ $attributes['arrow'] ][ $navigation_type ];
+
+ if ( 'next' === $navigation_type ) {
+ $format = '%link<span class="wp-block-post-navigation-link__arrow-next is-arrow-' . $attributes['arrow'] . '" aria-hidden="true">' . $arrow . '</span>';
+ } else {
+ $format = '<span class="wp-block-post-navigation-link__arrow-previous is-arrow-' . $attributes['arrow'] . '" aria-hidden="true">' . $arrow . '</span>%link';
+ }
+ }
+
+ /*
+ * The dynamic portion of the function name, `$navigation_type`,
+ * Refers to the type of adjacency, 'next' or 'previous'.
+ *
+ * @see https://developer.wordpress.org/reference/functions/get_previous_post_link/
+ * @see https://developer.wordpress.org/reference/functions/get_next_post_link/
+ */
$get_link_function = "get_{$navigation_type}_post_link";
- $content = $get_link_function( $format, $link );
+
+ if ( ! empty( $attributes['taxonomy'] ) ) {
+ $content = $get_link_function( $format, $link, true, '', $attributes['taxonomy'] );
+ } else {
+ $content = $get_link_function( $format, $link );
+ }
+
return sprintf(
'<div %1$s>%2$s</div>',
$wrapper_attributes,
@@ -84,6 +125,8 @@
/**
* Registers the `core/post-navigation-link` block on the server.
+ *
+ * @since 5.9.0
*/
function register_block_core_post_navigation_link() {
register_block_type_from_metadata(