如何在WordPress中将外部含do_shortcode的变量传入函数?
问题解决思路及代码示例
你的代码无法运行的核心原因是全局作用域的do_shortcode('[abc]')执行时机过早——WordPress加载流程中,全局代码会在短码注册完成前就执行,此时[abc]对应的短码处理函数还未被加载,do_shortcode只会返回原短码文本而非预期的执行结果,后续函数里引用的$cf7自然是无效值。
以下两种方案可以满足你将$cf7相关逻辑放在函数外部的需求:
方案1:延迟初始化(仅第一次调用短码时解析)
add_shortcode('xyz', 'xyz'); // 先声明全局变量,暂不赋值 $cf7 = null; function xyz() { global $cf7; // 第一次调用短码时才执行[abc]的解析 if (is_null($cf7)) { $cf7 = do_shortcode('[abc]'); } return $cf7; }
方案2:利用WordPress钩子确保时机正确
通过wp_loaded钩子,在WordPress所有核心组件(包括短码)加载完成后再执行do_shortcode:
add_shortcode('xyz', 'xyz'); $cf7 = null; // 绑定到wp_loaded钩子,确保短码已注册 add_action('wp_loaded', function() { global $cf7; $cf7 = do_shortcode('[abc]'); }); function xyz() { global $cf7; return $cf7; }
这两种方式都能保证[abc]短码在正确的时机被解析,同时维持你想要的变量定义逻辑位置。
内容的提问来源于stack exchange,提问作者Gø Man
相关产品推荐
相关产品推荐

