如何为 WordPress 侧边栏创建简码?

How do I create a shortcode for a WordPress sidebar?

我已经使用以下脚本向我的 WordPress 安装添加了一个自定义侧边栏,该脚本还创建了一个简码:

// Register Sidebars
function custom_sidebars() {

    $args = array(
        'id'            => 'gutenbar',
        'class'         => 'abeng',
        'name'          => __( 'Abeng sidebar', 'text_domain' ),
        'description'   => __( 'Sidebar for block', 'text_domain' ),
    );
    register_sidebar( $args );

}
add_action( 'widgets_init', 'custom_sidebars' );
add_shortcode( 'add_sidebar', 'custom_sidebars' );

当我将 [add_sidebar] 短代码添加到 Gutenberg 块时,边栏不会出现。但是,当我使用名为 Sidebar Shortcode [sidebar id="gutenbar"] 的插件时,侧边栏显示完美。我假设我的短代码与特定功能相关联,不需要选择侧边栏的名称或 ID。

我一直在想,因为侧边栏是使用插件添加的,该插件允许插入全站点可用的功能,而不是仅在使用其 functions.php 的主题中插入,这就是短代码没有的原因做它的工作。但是由于侧边栏显示在小部件区域并允许我添加小部件,现在可以使用这个插件,所以这显然不是问题。

查看简洁编写的 Sidebar Shortcode 的幕后,我看不出我可能想要添加什么来使我的代码正常运行。

我为什么要这样做?我为我的帖子使用全宽页面,禁用主题的默认右侧边栏(在响应式设计中效果不佳)但仍需要将侧边栏重新插入列中。

感谢您的帮助。

在 WordPress 支持论坛上 Prashant Singh 的帮助下,我了解到创建侧边栏的功能不能用于创建将其放置在页面上的短代码。必须通过调用 WP 本机函数 dynamic_sidebar() 来创建短代码,该函数可以访问所有侧边栏 (https://developer.wordpress.org/reference/functions/dynamic_sidebar/)。下面是包含允许在页面内正确定位的清理代码的完整脚本。

/**
* Create sidebar and shortcode
*/
// Register Sidebars
function custom_sidebars() {

    $args = array(
        'id'            => 'gutenbar',
        'class'         => '',
        'name'          => __( 'Abeng sidebar', 'text_domain' ),
        'description'   => __( 'Sidebar for block', 'text_domain' ),
    );
    register_sidebar( $args );
}
add_action( 'widgets_init', 'custom_sidebars' );
/* Add the shortcode and allow positioning in page*/     
    add_shortcode( 'add_sidebar', 'my_custom_sidebar' );
    function my_custom_sidebar(){
        ob_start(); 
        dynamic_sidebar( 'gutenbar'); 
        $sidebar_left = ob_get_clean(); 
        $html = ' <div class="sidebar-content"> ' . $sidebar_left . ' </div> '; 
        return $html;
    }