web-dev-qa-db-fra.com

Le shortcode personnalisé ne fonctionne pas dans le widget texte

J'ai créé une fonction pour créer un shortcode dans function.php. Cette fonction ressemble à celle ci-dessous

function related_category_sidebar() {
    include_once(WP_PLUGIN_DIR.'/sabai-directory/assets/templates/template_related_category.php');
}
add_shortcode( 'related_category', 'related_category_sidebar' );

Maintenant, j'ai créé un sidebar de widget personnalisé comme:

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>',
     ) );
}

Maintenant, j'ai ajouté un widget texte dans cette zone de widget Related category. Ensuite, après avoir appelé la zone de widget dans un fichier personnalisé en tant que:

<?php dynamic_sidebar('rel_cat'); ?>

Mais shorcode ne fonctionne pas. Ici, j’ai utilisé <?php echo do_shortcode('[related_category]'); ?> directement dans le fichier pour que cela fonctionne.

Mais, je veux utiliser un shortcode en utilisant la zone du widget, que dois-je changer dans mon code?

1
Nisarg Bhavsar

Les codes courts doiventreturndata, et non pas echo-it - utilisez output buffering pour capturer la sortie de l'include et la renvoyer:

function related_category_sidebar() {
    ob_start();
    include WP_PLUGIN_DIR . '/sabai-directory/assets/templates/template_related_category.php';
    return ob_get_clean();
}

Ensuite, vous devrez également faire ce que Charles a suggéré et activer les codes courts pour les widgets de texte:

add_filter( 'widget_text', 'do_shortcode', 11 );
1
TheDeadMedic