如何防止这些PHP变量被缓存?

时间:2018-09-21 11:17:10

标签: javascript php ajax wordpress woocommerce

我正在WordPress上的functions.php中使用此代码来基于访问者的位置生成一个会员链接,它工作正常,但问题是如果打开页面缓存(W3 Total Cache),变量将被缓存因此,如果来自英国的人是第一个打开该页面的人,那么来自德国的第二个打开了页面,他将获得与第一个访问者相同的链接。

请再做一件事,我对PHP和javascript还是很陌生,所以如果答案足够简单,我将不胜感激。

 <?php

add_action( 'woocommerce_before_add_to_cart_button', 'affiliate_link', 10);

function affiliate_link() { 
$not_avilable_country = '<div id="amz_not_avilable" class="amz_not_avilable">This product is not avilable in your country yet</div>';


// IP Geolocation   
$country_code = $_SERVER ["HTTP_CF_IPCOUNTRY"];
// Get Custom Fields
$de_asin = get_post_meta(get_post()->ID, "wccaf_de_asin", true );
$uk_asin = get_post_meta(get_post()->ID, "wccaf_uk_asin", true );



//////////////////////////////////////////////


if ($country_code=="DE" or $country_code=="DE") {
    $amazon_domain = 'https://www.amazon.de';
 // $associate_id = 'bonstato-21';
    $asin = $de_asin;
}

else if ($country_code=="GB" && $uk_asin!=="") {
    $amazon_domain = 'https://www.amazon.co.uk';
 // $associate_id = 'bonmedico-21';
    $asin = $uk_asin;
}


///////////////////////////////////////////////

        if( wp_is_mobile() ) {

// Amazon Link For Mobile       
?>
<script>
    function amzGo(){
                window.location='<?php echo $amazon_domain ?>/dp/<?php echo $asin ?>/?tag=<?php echo $associate_id ?>';
  }
</script>
<?php
        }

else {

// Amazon Link For PC
    ?>
<script>
    function amzGo(){
        window.location='<?php echo $amazon_domain ?>/gp/aws/cart/add.html?AssociateTag=<?php echo $associate_id ?>&ASIN.1=<?php echo $asin ?>&Quantity.1=1';
  }
</script>
<?php
}


?>
     <div class="buy_amz_btn_wrap" >  
<button type="button" id="buy_amz_btn" class="buy_amz_btn" onclick="amzGo();"><i class="fa fa-amazon fa-amz"></i><?php echo $amz_btn_title ?></button>                           
</div>
    <?php

}

?>

3 个答案:

答案 0 :(得分:0)

停用/禁用特定页面上的W3总缓存的一种方法是使用另一个名为Jeff Sterup的插件:“ Plugin Organizer”。

安装并启用它后,转到(插件的)设置,然后按照说明以正确的方式进行设置。

启用插件并正确保存设置后,当您使用编辑器编辑/创建新页面时,您会看到一个复选框,其中显示了为该特定页面启用哪个插件和禁用哪个插件。

通过这种方式,您可以在使用functions.php上的函数的页面上禁用W3 Total Cache。

希望有帮助。

答案 1 :(得分:0)

绕过缓存的最常见方法是通过WordPress json api提供此数据,并使用Java脚本将始终新鲜的数据放置到位。

答案 2 :(得分:0)

问题不在于代码内的变量正在被缓存;发生的情况是W3 Total Cache抓取了您的PHP代码生成的第一页并将其存储在服务器的硬盘中。从此以后,浏览器的请求得到响应,并提供了存储在服务器硬盘中的HTML静态文件(PHP将不再产生相同的页面)。

要解决此问题,您必须将负责创建页面版本稍有不同的PHP代码内部的“智能”转移到Javascript代码。巴斯蒂安·豪斯坦(Bastian Haustein)提出了一种使用WordPress REST API的方法。但是,我会先尝试以一种更简单的方式进行操作:页面加载后,捕获缓存页面的链接,并根据访问者的位置对其进行修改。自然,您还必须使用JS捕获访问者的地理位置-请参阅cjmling建议的链接:How to get visitor's location (i.e. country) using geolocation?