Как создать шорткод для боковой панели WordPress?

Я добавил настраиваемую боковую панель в свою установку 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] в блок Гутенберга, боковая панель не появляется. Однако, когда я использую плагин под названием Sidebar Shortcode [sidebar id = gutenbar], боковая панель отображается идеально. Я предполагаю, что мой шорткод связан с определенной функцией и не требует имени или идентификатора для выбора боковой панели.

Я думал, что из-за того, что боковая панель была добавлена ​​с помощью плагина, который позволяет вставлять функции, доступные для всего сайта, а не только в тему, использующую functions.php, именно поэтому шорткод не выполнял свою работу. Но поскольку боковая панель отображается в области виджетов и позволяет мне добавлять виджеты, а теперь работает с этим плагином, проблема явно не в этом.

Заглянув под лаконично написанный шорткод боковой панели, я не вижу, что я мог бы добавить, чтобы мой код работал.

Зачем я это делаю? Я использую полноразмерные страницы для своих сообщений, отключив правую боковую панель темы по умолчанию (что не очень хорошо работает в адаптивном дизайне), но мне все равно нужно снова вставить боковую панель в столбец.

Спасибо за любую помощь.


person Mark Lee    schedule 17.07.2020    source источник
comment
вы добавляете его в functions.php? основной или дочерней темы?   -  person Nabeel Khan    schedule 17.07.2020
comment
Ни в теме, ни в functions.php. См. Сообщение: ... боковая панель была добавлена ​​с помощью плагина (Мои пользовательские функции), который позволяет вставлять функции, доступные для всего сайта, а не только в тему, используя ее functions.php ...   -  person Mark Lee    schedule 17.07.2020


Ответы (1)


С помощью Прашанта Сингха на форуме поддержки WordPress я узнал, что функцию, которая создает боковую панель, нельзя использовать для создания шорткода для его размещения на странице. Шорткод должен быть создан с помощью собственной функции 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;
    }
person Mark Lee    schedule 17.07.2020