diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/blocks/post-navigation-link.php --- 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'; + } else { + $format = '%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( '
%2$s
', $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(