显示在小部件标题上方的 WordPress 简码

Rav*_*i87 3 wordpress shortcode

我在functions.php 文件中添加了以下过滤器:

add_filter('widget_text', 'do_shortcode'); 
Run Code Online (Sandbox Code Playgroud)

这已按预期在我的小部件中启用了短代码。

但是,短代码的内容现在显示在标题上方。我究竟做错了什么?

这就是我通过短代码呼应的内容:

$events_msg = '<div>You have attended <br> <span class="big-num">'. $num_actual_events . '</span> / ' . $num_total_events . ' ' . $event_type . '</br>('. $num_required_events.' required)<br><br></div>';

echo $events_msg;
Run Code Online (Sandbox Code Playgroud)

dou*_*arp 5

问题是您正在调用echo()短代码而不是return结果。如果您考虑调用函数的顺序,则该函数apply_filters( 'widget_text' )会在输出实际小部件 HTML 之前运行,因此您echo作为过滤器的一部分会导致它打印得太快。纠正这个return而不是echo结果。

add_filter('widget_text', 'do_shortcode'); 
add_shortcode('events', 'events_shortcode' );
function events_shortcode( $atts, $content=null ){
    // set default attribute values and extract to variables
    extract( shortcode_atts( array( 'attribute' => 'default_value' ), $atts ) );

    // populate your variables

    $events_msg = '<div>You have attended <br> <span class="big-num">'. $num_actual_events . '</span> / ' . $num_total_events . ' ' . $event_type . '</br>('. $num_required_events.' required)<br><br></div>';

    // return, don't echo
    return $events_msg;
}
Run Code Online (Sandbox Code Playgroud)