Woocommerce Elementor模板ACF自定义PHP短代码编辑器500错误修复咨询
修复Elementor编辑器中自定义短代码的500错误
错误原因
在Elementor编辑器环境中,全局$product对象不存在(值为null),代码直接调用$product->get_id()会触发致命错误。
需要修改的代码部分
- 校验$product对象有效性:在调用
$product->get_id()前,必须判断$product是否为WC_Product类的实例,避免对null调用方法。 - 增加编辑器环境判断(可选):直接检测是否处于Elementor编辑模式,是的话返回空内容,跳过后续逻辑。
- 短代码改用return输出:遵循WordPress短代码规范,将
echo改为return,避免输出顺序混乱。
修改后的完整代码
// Shortcode for Video from ACF function wpc_elementor_shortcode( $atts ) { global $product; // 检测Elementor编辑器环境,直接返回空内容 if ( isset( $_GET['action'] ) && $_GET['action'] === 'elementor' ) { return ''; } if ( ! is_user_logged_in() ) return ''; // 先确认$product是有效产品对象,再执行购买判断 if ( is_a( $product, 'WC_Product' ) && wc_customer_bought_product( '', get_current_user_id(), $product->get_id() ) ) { return get_field('video_tutorial'); } return ''; } add_shortcode( 'purchase_video_tutorial', 'wpc_elementor_shortcode');
补充说明
- 编辑器环境判断通过URL参数
action=elementor实现,这是Elementor编辑页面的典型标识。 - 用
is_a()判断$product类型,能确保在非产品页面(如首页、编辑器)也不会触发错误。 - 短代码返回内容而非直接echo,符合WordPress短代码运行机制,避免内容提前输出导致的布局问题。
内容的提问来源于stack exchange,提问作者Anzy's Art
相关产品推荐
相关产品推荐

