自定义快捷码在文本小部件中不起作用

时间:2016-09-30 作者:Nisarg Bhavsar

我已经创建了用于在函数中创建短代码的函数。php。此函数如下所示

function related_category_sidebar() {
    include_once(WP_PLUGIN_DIR.\'/sabai-directory/assets/templates/template_related_category.php\');
}
add_shortcode( \'related_category\', \'related_category_sidebar\' );
现在,我创建了自定义小部件侧栏,如:

add_action( \'widgets_init\', \'theme_slug_widgets_init\' );
function theme_slug_widgets_init() {
    register_sidebar( array(
         \'name\' => __( \'Related Category\', \'theme-slug\' ),
         \'id\' => \'rel_cat\',
         \'description\' => __( \'Widgets in this area will be shown on all posts and pages.\', \'theme-slug\' ),
         \'before_widget\' => \'<li id="%1$s" class="widget %2$s">\',
         \'after_widget\'  => \'</li>\',
         \'before_title\'  => \'<h2 class="widgettitle">\',
         \'after_title\'   => \'</h2>\',
     ) );
}
现在,我在这里添加了文本小部件Related category 小部件区域。然后,在我调用自定义文件中的小部件区域后,如下所示:

<?php dynamic_sidebar(\'rel_cat\'); ?>
但shorcode不起作用。这里,我用过<?php echo do_shortcode(\'[related_category]\'); ?> 直接输入文件,使其正常工作。

但是,我想使用小部件区域的短代码,那么我应该在代码中更改什么呢?

1 个回复
SO网友:TheDeadMedic

短代码需要返回数据,而不是回显数据-使用output buffering 要捕获include的输出并将其返回,请执行以下操作:

function related_category_sidebar() {
    ob_start();
    include WP_PLUGIN_DIR . \'/sabai-directory/assets/templates/template_related_category.php\';
    return ob_get_clean();
}
然后,您还需要按照Charles的建议,为文本小部件启用短代码:

add_filter( \'widget_text\', \'do_shortcode\', 11 );

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\