WooCommerce订单完成页重定向至ACF动态URL失败,求排查
问题:WooCommerce订单完成页重定向到ACF动态URL失败的原因及解决方法
原本在functions.php中使用以下代码将WooCommerce的'order received'页面重定向到静态URL:
// Redirect WooCommerce Order Received Page to Post add_action( 'woocommerce_thankyou', 'rwl_redirectcustom'); function rwl_redirectcustom( $order_id ){ $order = wc_get_order( $order_id ); $url = 'https://my-website.com'; if ( ! $order->has_status( 'failed' ) ) { wp_safe_redirect( $url ); exit; } }现在想改为重定向到存储在某篇文章的ACF字段'paywall_post_url'中的动态URL,尝试使用代码
$url = get_permalink( get_post_meta( 'paywall_post_url' ) );但未生效,请问错误在哪里?
错误原因分析
get_post_meta参数缺失:该函数必须传入第一个参数(目标文章的ID),你只传了字段名,函数无法定位到要读取字段值的文章。- 逻辑混淆字段存储类型:
- 如果ACF字段
paywall_post_url直接存储完整URL,无需套get_permalink(),直接取值即可; - 如果字段存储的是文章ID,你需要先正确获取ID再传入
get_permalink(),但当前写法因缺少文章ID,根本拿不到有效数据。
- 如果ACF字段
正确代码实现
情况1:ACF字段存储完整URL
替换$target_post_id为你实际存储该ACF字段的文章ID:
// Redirect WooCommerce Order Received Page to ACF dynamic URL add_action( 'woocommerce_thankyou', 'rwl_redirectcustom'); function rwl_redirectcustom( $order_id ){ $order = wc_get_order( $order_id ); // 替换为存储ACF字段的文章ID $target_post_id = 123; // 使用ACF官方函数get_field()更可靠,自动处理字段返回值 $url = get_field('paywall_post_url', $target_post_id); // 增加URL有效性验证,避免空值或无效链接导致异常 if ( ! $order->has_status( 'failed' ) && !empty($url) && filter_var($url, FILTER_VALIDATE_URL) ) { wp_safe_redirect( $url ); exit; } }
情况2:ACF字段存储文章ID
如果字段存的是另一篇文章的ID,需先获取ID再转换为链接:
// Redirect WooCommerce Order Received Page to ACF dynamic URL add_action( 'woocommerce_thankyou', 'rwl_redirectcustom'); function rwl_redirectcustom( $order_id ){ $order = wc_get_order( $order_id ); $target_post_id = 123; // 获取存储的目标文章ID $linked_post_id = get_field('paywall_post_url', $target_post_id); // 转换为文章永久链接 $url = get_permalink($linked_post_id); if ( ! $order->has_status( 'failed' ) && !empty($url) ) { wp_safe_redirect( $url ); exit; } }
补充说明
- 优先使用ACF的
get_field()函数,比原生get_post_meta()更适配ACF字段的存储规则; - 务必替换
$target_post_id为实际的文章ID,否则无法读取到正确的字段值; - 增加URL验证逻辑,能避免因字段为空或无效导致的重定向失败问题。
内容的提问来源于stack exchange,提问作者Magnus Schmidt
相关产品推荐
相关产品推荐

