do_shortcode_tag
云策文档标注
概述
do_shortcode_tag 是一个 WordPress 过滤器钩子,用于修改短码回调函数生成的输出内容。它允许开发者在短码输出被渲染前进行自定义处理,例如添加脚本或调整内容。
关键要点
- 过滤器名称:do_shortcode_tag,用于过滤短码回调的输出。
- 参数:$output(短码输出字符串)、$tag(短码名称)、$attr(短码属性数组,始终为数组)、$m(正则表达式匹配数组)。
- 应用场景:可用于在特定短码输出时添加额外内容(如内联脚本)或根据属性条件调整输出。
- 版本变化:从 WordPress 6.5.0 起,$attr 参数始终为数组;该过滤器自 4.7.0 版本引入。
代码示例
add_filter( 'do_shortcode_tag', 'enqueue_my_script', 10, 3 );
function enqueue_my_script( $output, $tag, $attr ) {
if ( 'myShortcode' != $tag ) {
return $output;
}
if ( ! isset( $attr['id'] ) ) {
return $output;
}
wp_enqueue_script( 'my-shortcode-js' );
return $output;
}注意事项
- 使用前需注册脚本,例如通过 wp_register_script,以确保短码调用时能正确加载。
- 在过滤器中应检查 $tag 和 $attr 参数,以避免影响其他短码的输出。
原文内容
Filters the output created by a shortcode callback.
Parameters
$outputstring-
Shortcode output.
$tagstring-
Shortcode name.
$attrarray-
Shortcode attributes array, can be empty if the original arguments string cannot be parsed.
$marray-
Regular expression match array.
Source
return apply_filters( 'do_shortcode_tag', $output, $tag, $attr, $m );
Skip to note 3 content
Aurovrata Venet
Another useful functionality is to enqueue shortcode-specific scripts,
add_action( 'wp_enqueue_scripts', 'register_my_script'); function register_my_script(){ wp_register_script('my-shortcode-js',$src, $dependency, $version, $inFooter); } add_filter( 'do_shortcode_tag','enqueue_my_script',10,3); function enqueue_my_script($output, $tag, $attr){ if('myShortcode' != $tag){ //make sure it is the right shortcode return $output; } if(!isset($attr['id'])){ //you can even check for specific attributes return $output; } wp_enqueue_script('my-shortcode-js'); //enqueue your script for printing return $output; }first you register your script, which doesn’t actually get printed on your page unless your enqueue it if your shortcode is called.
Skip to note 4 content
Aurovrata Venet
This filter is very useful to either add additional content at the end of a shortcode (for example an inline script),
add_filter( 'do_shortcode_tag','add_my_script',10,3); function enqueue_my_script($output, $tag, $attr){ if('aShortcode' != $tag){ //make sure it is the right shortcode return $output; } if(!isset($attr['id'])){ //you can even check for specific attributes return $output; } $output.='<script> ... </script>'; return $output; }