不要为复杂的cookie/ajax胡说八道而烦恼,使用REST API吧!
我们将使用依赖注入和RESTful API来删除cookie并简化AJAX代码。
首先,让我们将其转换为REST API:
class Stuff {
public function __construct() {
add_action( \'rest_api_init\', function () {
register_rest_route( \'soothsayer/v1\', \'/current_rate/\', array(
\'methods\' => \'GET\',
\'callback\' => [ $this, \'get_original_price\' ]
) );
} );
}
public function get_original_price( $request ) {
$variation_id = $request[\'variation_id\'];
$original_price = get_post_meta( $variation_id, "_regular_price", true);
$currency = $request[\'currency\'];
$ratesCurrency = $this->currencyRates( $currency );
$priceAfterCurrency = $original_price*$ratesCurrency;
return $priceAfterCurrency;
}
private function currencyRates( $currency ) {
global $wpdb;
$rate = 1;
$name = \'wcumcs_exchange_rate_\'.$currency;
$selectRate = $wpdb->get_results("SELECT option_value FROM ".$wpdb->prefix."options WHERE option_name=\'".$name."\' LIMIT 1;");
foreach ($selectRate as $row) {
$rate = $row->option_value;
}
return $rate;
}
}
现在我们有了一个REST端点!注意我如何:
修正了缩进,或者更确切地说,我的编辑器不费吹灰之力就自动完成了,你的也应该如此使用依赖注入来获取货币。currencyRates
不需要知道货币值来自何处,它是作为参数传递的,现在它将适用于任何货币,无论它是如何获得的,而不仅仅是cookie中设置的货币现在是一个参数,javascript可以很好地读取cookie,现在您的请求是100%可缓存的。现在性能提高了1000%,请注意$request
对象传递到get_original_price
, 这将为您提供所有详细信息,我如何使用它
jQuery.get(
\'https://example.com/wp-json/soothsayer/v1/current_rate\',
{
\'variation_id\' => 1,
\'currency\' => \'USD\'
},
function( data ) {
// success?
}
);
甚至通过访问
https://example.com/wp-json/soothsayer/v1/current_rate?variation_id=1¤cy=USD
优化不是从选项表中获取选项的方式:
global $wpdb;
$rate = 1;
$name = \'wcumcs_exchange_rate_\'.$currency;
$selectRate = $wpdb->get_results("SELECT option_value FROM ".$wpdb->prefix."options WHERE option_name=\'".$name."\' LIMIT 1;");
以下是您的操作方式:
$rate = get_option( \'wcumcs_exchange_rate_\'.$currency, 1 );
如果需要获取多个选项,可以通过
get_option
没有参数来获取数组