render_block_core_navigation_link() – Renders the `core/navigation-link` block.

You appear to be a bot. Output may be restricted

Description

Renders the core/navigation-link block.

Usage

$string = render_block_core_navigation_link( $attributes, $content, $block );

Parameters

$attributes
( array ) required – The block attributes.
$content
( string ) required – The saved content.
$block
( WP_Block ) required – The parsed block.

Returns

string Returns the post content with the legacy widget added.

Source

File name: wordpress/wp-includes/blocks/navigation-link.php


Lines:

1 to 100 of 108
function render_block_core_navigation_link( $attributes, $content, $block ) {
  $navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
  $is_post_type           = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
  $is_post_type           = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );

  // Don't render the block's subtree if it is a draft or if the ID does not exist.
  if ( $is_post_type && $navigation_link_has_id ) {
    $post = get_post( $attributes['id'] );
    if ( ! $post || 'publish' !== $post->post_status ) {
      return '';
    }
  }

  // Don't render the block's subtree if it has no label.
  if ( empty( $attributes['label'] ) ) {
    return '';
  }

  $colors          = block_core_navigation_link_build_css_colors( $block->context, $attributes );
  $font_sizes      = block_core_navigation_link_build_css_font_sizes( $block->context );
  $classes         = array_merge(
    $colors['css_classes'],
    $font_sizes['css_classes']
  );
  $style_attribute = ( $colors['inline_styles'] . $font_sizes['inline_styles'] );

  $css_classes = trim( implode( ' ', $classes ) );
  $has_submenu = count( $block->inner_blocks ) > 0;
  $is_active   = ! empty( $attributes['id'] ) && ( get_the_ID() === $attributes['id'] );

  $wrapper_attributes = get_block_wrapper_attributes(
    array(
      'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
        ( $is_active ? ' current-menu-item' : '' ),
      'style' => $style_attribute,
    )
  );
  $html               = '<li ' . $wrapper_attributes . '>' .
    '<a class="wp-block-navigation-item__content" ';

  // Start appending HTML attributes to anchor tag.
  if ( isset( $attributes['url'] ) ) {
    $html .= ' href="' . esc_url( $attributes['url'] ) . '"';
  }

  if ( $is_active ) {
    $html .= ' aria-current="page"';
  }

  if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
    $html .= ' target="_blank"  ';
  }

  if ( isset( $attributes['rel'] ) ) {
    $html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
  } elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
    $html .= ' rel="nofollow"';
  }

  if ( isset( $attributes['title'] ) ) {
    $html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
  }

  // End appending HTML attributes to anchor tag.

  // Start anchor tag content.
  $html .= '>' .
    // Wrap title with span to isolate it from submenu icon.
    '<span class="wp-block-navigation-item__label">';

  if ( isset( $attributes['label'] ) ) {
    $html .= wp_kses_post( $attributes['label'] );
  }

  $html .= '</span>';

  // Add description if available.
  if ( ! empty( $attributes['description'] ) ) {
    $html .= '<span class="wp-block-navigation-item__description">';
    $html .= wp_kses_post( $attributes['description'] );
    $html .= '</span>';
  }

  $html .= '</a>';
  // End anchor tag content.

  if ( isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'] && $has_submenu ) {
    // The submenu icon can be hidden by a CSS rule on the Navigation Block.
    $html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_link_render_submenu_icon() . '</span>';
  }

  if ( $has_submenu ) {
    $inner_blocks_html = '';
    foreach ( $block->inner_blocks as $inner_block ) {
      $inner_blocks_html .= $inner_block->render();
    }

    $html .= sprintf(
      '<ul class="wp-block-navigation__submenu-container">%s</ul>',
      $inner_blocks_html

 View on GitHub View on Trac