如何正确初始化Woocommerce购物车

时间:2014-06-29 15:50:54

标签: wordpress woocommerce cart

我有一个自定义模板文件,渲染一些产品及其添加到购物车按钮,我试图手动实现。按下“添加到购物车”后,将重新加载页面,并且包含某些数据的$ _POST变量会添加新产品。 ' cart_contents_count'也反映了添加的项目。但是,当我进入购物车页面时,它是空的。请参阅以下代码。

global $woocommerce;
if ( isset( $_POST['AddedToCart'] ) ) {
$woocommerce->cart->add_to_cart($_POST['event'], $_POST['qty']);
}
$cart_total = $woocommerce->cart->cart_contents_count; 

然而,当我进入正常的默认商店页面(/ shop /)并从那里添加产品时,我的购物车页面表明已添加此产品。当我现在转到我的自定义页面并添加“添加到购物车”按钮中的产品时,它可以很好地工作。

在我看来,在运行上述代码之前,我必须检查Cart Session是否已初始化,如果没有,则初始化它。有人可以向我确认我理解正确并告诉我如何初始化购物车吗?

3 个答案:

答案 0 :(得分:12)

如果您的自定义表单位于页面模板上,则可以使用此解决方案。这段代码放在你的functions.php文件中。请务必将yourtheme_template更改为更独特的内容。此外,将$session_templates数组中的项更改为您希望使用此过滤器的模板文件名。它使用template_include过滤器,这不是一个简单的过滤器来追踪,更不用说$woocommerce->session->set_customer_session_cookie(true) - 特别感谢@vrazer(在Twitter上)寻求帮助。

function yourtheme_template($template) {

//List of template file names that require WooCommerce session creation
$session_templates = array(
    'page-template-file-name.php', 'another-page-template-filename.php'
);

//Split up the template path into parts so the template file name can be retrieved
$parts = explode('/', $template);

//Check the template file name against the session_templates list and instantiate the session if the
//template is in the list and the user is not already logged in.  If the session already exists from
//having created a cart, WooCommerce will not destroy the active session
 if (in_array($parts[count($parts) - 1], $session_templates)  && !is_user_logged_in()) {
 global $woocommerce;

  $woocommerce->session->set_customer_session_cookie(true);
 }

 return $template;
}

//Filter to run the WooCommerce conditional session instantiation code
add_filter('template_include', 'yourtheme_template');

答案 1 :(得分:0)

我通过确保在发送任何标头之前定位$woocommerce->cart->add_to_cart()行来解决此问题。 I.E,在我的自定义模板上调用get_header()之前。

答案 2 :(得分:0)

在WooCommerce版本2.5中,它们改变了会话的工作方式。 https://woocommerce.wordpress.com/2015/10/07/new-session-handler-in-2-5/ 我做的是安装这个插件https://github.com/kloon/woocommerce-large-sessions然后我的购物车不再是空的猜测用户。

我希望它可以帮助别人。