This topic has 13 replies, 3 voices, and was last updated 9 years, 8 months ago ago by Stan Russell
Hi,
I have tried every way possible to get this done but I just cannot get the answer to it anywhere.
There seems to be an ongoing issue with Woocommerce and page caching. Basically, there are two main issues – pages like cart/checkout etc being cached and the cart widget in header.php being cached. This is not a fault of Woocommerce, themes or anything else. It’s just a fact of life. The caching of certain pages can be turned off on request by the likes of W3TC, but the cart widget being cached seems to remain an ongoing issue.
For reference, here is the PHP cart widget code from the header.php file…
<a class="mobile-link" href="<?php echo $woocommerce->cart->get_cart_url(); ?>"></a>
<div id="top-cart" class="shopping-cart-wrapper widget_shopping_cart">
<?php $cart_widget = new Etheme_WooCommerce_Widget_Cart(); $cart_widget->widget(); ?>
</div>
There are noted ways around it, such as late_init etc but all these KILL page caching benefits as it takes so much longer to load the page.
So, I am thinking that the best way around this would be to use AJAX onLoad() to update the cart accordingly, allowing (I assume) the page to load from the static page cache.
Can the 8Theme developers point my in the right direction in terms of how I get this done? I’ve looked through the add-to-cart.js to see how the widget it updated but I can’t see exactly how I can do this. Any advice on how I can do this? Providing I can get the required HTML from the code above via AJAX, writing it to the DOM shoudn’t be an issue.
BTW can the developers tell me where the Etheme_WooCommerce_Widget_Cart() class resides in the file structure? I would assume I can simply create a new PHP file with that class include in it, create a new instance of the class, invoke Etheme_WooCommerce_Widget_Cart::widget to get the HTML, and then use this as the response to the AJAX call to rewrite the code in the #top-cart div.
Any help GREATLY appreciated. I love the Blanco template and the site I have been working on is only being held back now by inability to cache pages without losing the cart widget functionality!
Please help! :o|
Thanks,
JN
Hello,
You can find this function in \themes\blanco\code\woo.php file on line 21
Regards,
Robert Hall.
Thanks for your response.
Do you have any suggestions for how I could go about tackling this problem such as how I could go about triggering a refresh of the cart and place it in jQuery(window).load(function() {}); ?
When a product is added to the cart, where is the cart update triggered? Or is there a way of conditionally invalidating a page cache when the cart is updated?
Anyone? I would desperately like to have this resolved as it would unquestionably improve the value of the template to those who have purchased it.
Is thee already a JS mechanism built into to the template to directly update the cart widget? If someone can just give me some advice I can look to trying to code this myself.
PLEASE help.
On a technical level, is it possible to have an AJAX function in the header.php file that calls a PHP file, passing along the $woocommerce global as a parameter, with that PHP script including and instantiating the Etheme_WooCommerce_Widget_Cart class, calling Etheme_WooCommerce_Widget_Cart::widget() and using the output from this as the return value for the AJAX call then in turn using a function to take this returned HTML and update the cart widget div accordingly?
If you could let me know if I am on the right path, I will have a crack at coding this myself ASAP.
Hello,
Please wait a little. We will contact with our developers tomorrow and then answer you.
Sorry for a long delay.
Regards,
Robert Hall.
Thank you for your input, it’s much appreciated. The lack of dynamic cart widgets on themes using Woocommerce has been a thorn in the side of developers for years it seems with everyone trying different workarounds but none of them seem to work. Simply put, if you cache pages, it ruins the functionality of the cart widget. Don’t cache pages, and it badly affected the site performace (my SEO has dropped off since I took page caching off). If 8Theme could create an AJAX workaround for this – especially one that could be used universally across your WordPress/Woocommerce templates – I think it would be a great selling point.
Thanks again and I will wait to hear back!
Hello,
In general you are on the right way. You need create Ajax call to make widget updated after page load and you need remake widget accordingly. We also took into account your recommendations and we will try to implement it in future updates.
Regards,
Robert Hall.
Thanks, that’s great news.
Out of interest, do you have any idea when the next version of Blanco is due for release? In the meantime, I will attempt to develop the fix myself.
Hello,
Unfortunately we can’t say the exact release date for the new theme update. But you can monitor here
http://themeforest.net/item/blanco-responsive-wordpress-wooecommerce-theme/2755246
Regards,
Robert Hall.
Thanks again Robert. Excellent service from you guys.
Hello,
you are welcome!
Regards,
Stan Russell.
The issue related to '‘Dynamically updating the cart widget via AJAX’' has been successfully resolved, and the topic is now closed for further responses