我在functions.php文件中添加了以下过滤器:
add_filter('widget_text', 'do_shortcode');
这样可以按照预期在我的小部件中启用短代码。
但是,短代码的内容现在显示在标题上方。我做错了什么?
这就是我通过短代码回应的内容:
$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;
答案 0 :(得分:3)
问题是您在短信中调用echo()
而不是return
结果。如果您考虑调用函数的顺序,则在输出实际的小部件HTML之前运行apply_filters( 'widget_text' )
,因此作为过滤器的一部分的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;
}
答案 1 :(得分:0)
当您将过滤器添加到functions.php时,添加以下内容可能也解决了问题
add_filter( 'widget_text', 'shortcode_unautop' );