“官方”的答案是,您需要使用do_shortcode()
要处理短代码,您不能简单地在代码中应用短代码。这是您的原始代码和“官方”do_shortcode()
方式:
add_filter( \'woocommerce_checkout_fields\', \'set_checkout_field_input_value_default\' );
function set_checkout_field_input_value_default($fields) {
$fields[\'billing\'][\'billing_city\'][\'default\'] = do_shortcode( \'[geoip_detect2 property="city"]\' );
$fields[\'billing\'][\'billing_state\'][\'default\'] = do_shortcode( \'[geoip_detect2 property="mostSpecificSubdivision"]\' );
return $fields;
}
虽然这种方法将解析短代码,但我个人建议您
NOT 使用
do_shortcode()
因为它必须通过
a fairly extensive regex to process. 最好找到所讨论的短代码的实际回调函数并直接使用它。是的,有时候这很困难,在某些情况下也很棘手。但谢天谢地
a good article and a better solution at this link.
下面是如何使用J.D.Grimes的方法(如本文所讨论的,包括他的实用程序函数以及为使用它而修改的代码片段):
/**
* Call a shortcode function by tag name.
*
* @author J.D. Grimes
* @link https://codesymphony.co/dont-do_shortcode/
*
* @param string $tag The shortcode whose function to call.
* @param array $atts The attributes to pass to the shortcode function. Optional.
* @param array $content The shortcode\'s content. Default is null (none).
*
* @return string|bool False on failure, the result of the shortcode on success.
*/
function do_shortcode_func( $tag, array $atts = array(), $content = null ) {
global $shortcode_tags;
if ( ! isset( $shortcode_tags[ $tag ] ) )
return false;
return call_user_func( $shortcode_tags[ $tag ], $atts, $content, $tag );
}
add_filter( \'woocommerce_checkout_fields\', \'set_checkout_field_input_value_default\' );
function set_checkout_field_input_value_default($fields) {
$fields[\'billing\'][\'billing_city\'][\'default\'] = do_shortcode_func( \'geoip_detect2\', array( \'property\' => "city" ) );
$fields[\'billing\'][\'billing_state\'][\'default\'] = do_shortcode_func( \'geoip_detect2\', array( \'property\' => "mostSpecificSubdivision" ) );
return $fields;
}
任何一种方法都是“正确的”,应该能够解决问题(至少在短代码解析方面)。希望这对你有帮助。