将简码添加到导航块

问题描述 投票:0回答:1

我正在使用 FSE 主题,我需要在导航块中添加一个简短的代码。 我知道没有直接的方法可以做到这一点,但我也找到了这个钩子block_core_navigation_render_inner_blocks。 如果我尝试添加迷你购物车(WooCommerce)块,则可以使用该挂钩,但现在我需要添加短代码。代码是:

add_filter(
    'block_core_navigation_render_inner_blocks',
    function( $inner_blocks ) { 

        $menu_item = [
            'blockName'    => 'core/shortcode',         
            'attrs'        => [
                "text" => 'fk_cart_menu',               
            ],
            'innerBlocks'  => [],
            'innerHTML'    => '',
            'innerContent' => [],
        ];
        $inner_blocks->offsetSet( null, $menu_item );
        return $inner_blocks;
    }
);

我在导航块中没有看到短代码。为什么? 短代码存在,我还用

shortcode_exists()
检查了它,返回 true 我也尝试使用 [fk_car_menu] 带括号,但没有任何运气。

wordpress wordpress-gutenberg wordpress-block-theme
1个回答
0
投票

尽管有这个名字,短代码块实际上并不返回块;而是返回一个块。因此block_core_navigation_render_inner_blocks无法渲染

短代码块
,因为它只渲染块。这就是为什么在您的测试中,WooCommerce 块起作用但短代码块不起作用。

解决此限制的一种可能方法是注册您自己的动态块,在渲染回调中调用

do_shortcode(...)
,然后在您的
add_filter(...)
代码中使用它,例如:

function so78080575_render_callback() {
  // return your shortcode, not echo..
  return do_shortcode( '[fk_cart_menu]' );
}

/* Register a simple, dynamic block */
function so78080575_register_block() {
  if ( !function_exists( 'register_block_type' ) ) {
    // return if block editor unavailable
    return;
  }
  register_block_type( 'so/78080575',
    $args = array(
      'title' => 'FK Cart Menu',
      'icon' => 'smiley',
      'render_callback' => 'so78080575_render_callback' // to render shortcode
    )
  );
}
add_action( 'init', 'so78080575_register_block' );


add_filter(
    'block_core_navigation_render_inner_blocks', // accepts only valid blocks
    function( $inner_blocks ) { 

        $menu_item = new WP_Block(['blockName' => 'so/78080575']);
        $inner_blocks->offsetSet( null, $menu_item );

        return $inner_blocks;
    }
);

希望这能让您更接近您想要实现的目标...

© www.soinside.com 2019 - 2024. All rights reserved.