钩子文档

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 );

Changelog

Version Description
6.5.0 The $attr parameter is always an array.
4.7.0 Introduced.

User Contributed Notes

  1. Skip to note 3 content

    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.

  2. Skip to note 4 content

    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;
    }