wc_nav_menu_inner_blocks()WC 9.3.0

Hide menu items in navigation blocks conditionally.

Does the same thing as wc_nav_menu_items but for block themes.

No Hooks.

Return

\WP_Block_list.

Usage

wc_nav_menu_inner_blocks( $inner_blocks );
$inner_blocks(\WP_Block_list) (required)
Inner blocks.

Changelog

Since 9.3.0 Introduced.

wc_nav_menu_inner_blocks() code WC 9.6.1

function wc_nav_menu_inner_blocks( $inner_blocks ) {
	$logout_endpoint = get_option( 'woocommerce_logout_endpoint', 'customer-logout' );

	if ( ! empty( $logout_endpoint ) && $inner_blocks ) {
		foreach ( $inner_blocks as $inner_block_key => $inner_block ) {
			$url            = $inner_block->parsed_block['attrs']['url'] ?? '';
			$path           = wp_parse_url( $url, PHP_URL_PATH ) ?? '';
			$query          = wp_parse_url( $url, PHP_URL_QUERY ) ?? '';
			$is_logout_link = strstr( $path, $logout_endpoint ) || strstr( $query, $logout_endpoint );

			if ( ! $is_logout_link ) {
				continue;
			}

			if ( is_user_logged_in() ) {
				$inner_block->parsed_block['attrs']['url'] = wp_nonce_url( $inner_block->parsed_block['attrs']['url'], 'customer-logout' );
			} else {
				unset( $inner_blocks[ $inner_block_key ] );
			}
		}
	}

	return $inner_blocks;
}