render_block_core_navigation_submenu

函数


render_block_core_navigation_submenu ( $attributes, $content, $block )
参数
  • (array)
    $attributes
    The block attributes.
    Required:
  • (string)
    $content
    The saved content.
    Required:
  • (WP_Block)
    $block
    The parsed block.
    Required:
返回值
  • (string) Returns the post content with the legacy widget added.
定义位置
  • wp-includes/blocks/navigation-submenu.php
    , line 132
引入
弃用

渲染`core/navigation-submenu`区块。

function render_block_core_navigation_submenu( $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.
	if ( $is_post_type && $navigation_link_has_id && 'publish' !== get_post_status( $attributes['id'] ) ) {
		return '';
	}

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

	$colors          = block_core_navigation_submenu_build_css_colors( $block->context, $attributes );
	$font_sizes      = block_core_navigation_submenu_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() === (int) $attributes['id'] );

	$show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'];
	$open_on_click           = isset( $block->context['openSubmenusOnClick'] ) && $block->context['openSubmenusOnClick'];
	$open_on_hover_and_click = isset( $block->context['openSubmenusOnClick'] ) && ! $block->context['openSubmenusOnClick'] &&
		$show_submenu_indicators;

	$wrapper_attributes = get_block_wrapper_attributes(
		array(
			'class' => $css_classes . ' wp-block-navigation-item' . ( $has_submenu ? ' has-child' : '' ) .
			( $open_on_click ? ' open-on-click' : '' ) . ( $open_on_hover_and_click ? ' open-on-hover-click' : '' ) .
			( $is_active ? ' current-menu-item' : '' ),
			'style' => $style_attribute,
		)
	);

	$label = '';

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

	$aria_label = sprintf(
		/* translators: Accessibility text. %s: Parent page title. */
		__( '%s submenu' ),
		wp_strip_all_tags( $label )
	);

	$html = '
  • ‘;

    // If Submenus open on hover, we render an anchor tag with attributes.
    // If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click.
    if ( ! $open_on_click ) {
    $item_url = isset( $attributes[‘url’] ) ? $attributes[‘url’] : ”;
    // Start appending HTML attributes to anchor tag.
    $html .= ” . block_core_navigation_submenu_render_submenu_icon() . ”;
    }
    } else {
    // If menus open on click, we render the parent as a button.
    $html .= ‘

    // Wrap title with span to isolate it from submenu icon.
    $html .= ‘‘;

    $html .= $label;

    $html .= ‘‘;

    $html .= ‘‘;

    $html .= ‘‘ . block_core_navigation_submenu_render_submenu_icon() . ‘‘;

    }

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

    $html .= sprintf(

      %s

    ‘,
    $inner_blocks_html
    );
    }

    $html .= ‘

  • ‘;

    return $html;
    }