我将WooCommerce与Themosis 2.0一起使用时,尝试将商品添加到购物篮中时,由于_token隐藏输入不在产品页面中,因此我得到CSRF令牌错误。
我试图使用woocommerce_after_add_to_cart_button钩子将Themosis的csrf_field函数钩接到表单中,就像文件[THEME_DIR] /inc/woocomerce.php
中一样<?php
// File stored in inc/woocommerce.php (for example)
Action::remove('init', ['WC_Template_Loader', 'init'], 10);
Filter::add('comments_template', ['WC_Template_Loader', 'comments_template_loader']);
Action::add('woocommerce_after_add_to_cart_button', 'csrf_field', 10, 0);
remove操作和filter add均起作用。产品页面模板如下:
@extends('layouts.main')
@section('content')
@php(do_action('woocommerce_before_main_content'))
@loop
@php(do_action('woocommerce_before_single_product'))
<div id="product-{{ Loop::id() }}" {{ wc_product_class() }}>
@php(do_action('woocommerce_before_single_product_summary'))
<div class="summary entry-summary">
@php(do_action('woocommerce_single_product_summary'))
</div>
@php(do_action('woocommerce_after_single_product_summary'))
</div>
@php(do_action('woocommerce_after_single_product'))
@endloop
@php(do_action('woocommerce_after_main_content'))
@endsection()
但是Action :: add并未将隐藏的输入字段添加到表单中。
如何将CSRF令牌添加到“添加到购物车”表单中?
谢谢
答案 0 :(得分:0)
我设法通过添加一个调用现有助手功能的自定义功能来使其工作。仍不能100%知道为什么初始版本不起作用。
<?php
// File stored in inc/woocommerce.php (for example)
Action::remove('init', ['WC_Template_Loader', 'init'], 10);
Filter::add('comments_template', ['WC_Template_Loader', 'comments_template_loader']);
Action::add('woocommerce_after_add_to_cart_button', 'myCSRF', 10, 0);
function myCSRF() {
echo csrf_field();
}