woocommerce_after_add_to_cart_button不适用于Themosis

时间:2019-08-04 17:13:08

标签: php woocommerce hook hook-woocommerce

我将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令牌添加到“添加到购物车”表单中?

谢谢

1 个答案:

答案 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();
    }