我有一个小复杂的问题要解释,我希望有人能理解和帮助我。
我已经在WooCommerce上设置了自定义字段,用于输入每个产品的特定代码(比如SKU称为"asin"),然后我在我的后端使用Amazon API从亚马逊的产品页面获取价格(不用担心我的问题是一般性的,与API无关)。
以下是我的简单产品类型的代码示例,它的工作方式完全符合我的需要。
<?php
//This is the code i use to get the "asin" value from custom fields.
$de_asin = get_post_meta(get_post()->ID, "wccaf_de_asin", true );
$associate_id = "google-21";
$access_key = "N22EKJMDWJMDWIJWIJWDIWDW";
$secret_key = "48UJIFJIJFEIFJF89U8EKFIEJIUJWHUFUEFJFSIJF";
$amazon_domain = "amazon.de";
$asin = $de_asin;
// This is the code i use to get the product price from amazon website using it's api
include 'amazon-api/amazon_class.php';
$amazon = new AmazonAPI($associate_id , $access_key, $secret_key , $amazon_domain);
$item = $amazon->item_lookup($asin)->get_item_data();
echo $item->price;
?> 我的问题是变体产品,因为当我在变体之间切换时,我需要改变自定义价格。
这是我用来获得变化产品类型"asin code“的自定义产品值的代码,它工作得很好,但我需要添加与上面简单产品类似的价格,并使用当前选择的变体的asin,并在上面的amazon API变量上使用该asin。
我从这里的http://www.remicorson.com/woocommerce-custom-fields-for-variations/获得了变体产品的自定义字段
<?php
add_filter( 'woocommerce_available_variation', 'custom_load_variation_settings_products_fields' );
function custom_load_variation_settings_products_fields( $variations ) {
// duplicate the line for each field
$variations['wccaf_de_asin_var'] = get_post_meta( $variations[ 'variation_id' ], 'wccaf_de_asin_var', true );
$variations['wccaf_uk_asin_var'] = get_post_meta( $variations[ 'variation_id' ], 'wccaf_uk_asin_var', true );
return $variations;
}
//wccf_after_variation_description is a hook i created into variation.php
add_action( 'wccf_after_variation_description', 'wcff_variation_affiliate_button', 10);
function wcff_variation_affiliate_button() {
// IP Geolocation
$country_code = $_SERVER ["HTTP_CF_IPCOUNTRY"];
$de_asin = '{{{ data.variation.wccaf_de_asin_var }}}';
$uk_asin = '{{{ data.variation.wccaf_uk_asin_var }}}';
if ($country_code=="DE") {
$asin = $de_asin;
}
if ($country_code=="GB") {
$asin = $uk_asin;
}
echo $asin;
}
?> 我猜这里的主要问题是,在页面呈现后,此代码使用javascript获取所选变体的asin,我需要获取所选变体的asin并将其发送到php,这样我就可以通过amazon API发送它来获取价格。所以我想知道是否有任何方法可以使用第一个简单代码片段中显示的价格API代码,并在第二个变体代码片段中使用它?
提前感谢您:)
发布于 2018-09-27 05:57:26
我解决了这个问题,我缺少的是将API返回转换为字符串,这里是代码,希望它能帮助一些人。
<?php
add_filter( 'woocommerce_available_variation', 'custom_load_variation_settings_products_fields' );
function custom_load_variation_settings_products_fields( $variations ) {
// duplicate the line for each field
$variations['wccaf_de_asin_var'] = get_post_meta( $variations[ 'variation_id' ], 'wccaf_de_asin_var', true );
$variations['wccaf_uk_asin_var'] = get_post_meta( $variations[ 'variation_id' ], 'wccaf_uk_asin_var', true );
$amazon = new AmazonAPI("GOOGLE-21", "JIJIOJEFIOJEIOFEJFIO", "DJWIJDIWOJDFIJIOFJDIOWJQFOIJIOIOJWID");
$item = $amazon->item_lookup($variations['wccaf_de_asin_var'])->get_item_data();
$variations['amz_price_var_de'] = (string) $item->price;
return $variations;
}
//wccf_after_variation_description is a hook i created into variation.php
add_action( 'wccf_after_variation_description', 'wcff_variation_affiliate_button', 10);
function wcff_variation_affiliate_button() {
// IP Geolocation
$country_code = $_SERVER ["HTTP_CF_IPCOUNTRY"];
$de_asin = '{{{ data.variation.wccaf_de_asin_var }}}';
$uk_asin = '{{{ data.variation.wccaf_uk_asin_var }}}';
if ($country_code=="DE") {
$asin = $de_asin;
}
if ($country_code=="GB") {
$asin = $uk_asin;
}
echo $asin;
?>
<div class="buy_amz_btn_wrap" >
{{{data.variation.amz_price_var_de}}}
</div>
<?php
}
?> https://stackoverflow.com/questions/52524854
复制相似问题