it-swarm.com.de

Benutzerdefinierter Shortcode funktioniert im Text-Widget nicht

Ich habe eine Funktion zum Erstellen eines Shortcodes in function.php erstellt. Diese Funktion sieht wie folgt aus

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

Jetzt habe ich eine benutzerdefinierte Seitenleiste für Widgets erstellt:

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

Jetzt habe ich ein Text-Widget in diesem Related category Widget-Bereich hinzugefügt. Dann, nachdem ich den Widget-Bereich in der benutzerdefinierten Datei aufgerufen habe, als:

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

Aber der Shorcode funktioniert nicht. Hier habe ich <?php echo do_shortcode('[related_category]'); ?> direkt in der Datei verwendet, damit es funktioniert.

Ich möchte den Shortcode über den Widget-Bereich verwenden. Was muss ich also in meinem Code ändern?

1
Nisarg Bhavsar

Shortcodes müssen return data, nicht echo it - use output buffering , um die Ausgabe des Includes zu erfassen und zurückzugeben:

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

Dann müssen Sie auch wie von Charles vorgeschlagen vorgehen und Shortcodes für Text-Widgets aktivieren:

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