这里的问题是变量作用域。您正在尝试本地访问全局变量。
// Global scope.
$api_response = null;
function get_user_info( $type ) {
// Local scope.
if ( $api_response === null ) {
// make api reqest.
// $api_response = api request data;
return $api_response[ $type ];
} else {
return $api_response[ $type ];
}
}
add_shortcode( \'user_link\', \'get_user_info\' );
添加
global $api_response
函数的顶部可以解决您的问题,但通常不赞成使用全局变量,您应该考虑另一种解决方案,如瞬态(如注释中所述)。
如何向函数中添加瞬态的示例如下:
function get_user_info( $type ) {
$user_id = get_current_user_id();
$api_response = get_transient( "prefix_api_response_$user_id" );
if ( ! $api_response ) {
// make api request.
$api_response = api_request_data();
// Save response for 1 day.
set_transient( "prefix_api_response_$user_id", $api_response, DAY_IN_SECONDS );
}
return $api_response[ $type ];
}