将下拉列表添加到 woocommerce 购物车并在结帐时检索值?

Add dropdown list to woocommerce cart and retrieve value on checkout?

我想修改 cart.php 以包含“结帐代理”下拉列表,然后在结帐时检索该数据以重定向到正确的代理(不同的 URL)。

我已经在子主题中有 cart.php。我创建了一个 cart-custom-checkout.php 页面来处理检索购物车内容并将 (wp_redirect) 重定向到代理 URL(我通过从购物车构建 URL 来测试单个代理内容,效果很好)。

我通过修改子主题 functions.php 启用了自定义结帐,如下所示:

// enable custom checkout for woocommerce
add_shortcode( 'cart_custom_checkout', 'cart_custom_checkout_function' );
function cart_custom_checkout_function() {
        wc_get_template('cart/cart-custom-checkout.php');
}

然后在 checkout page.

上使用该简码

现在一切都按照我的想法进行,最后一步是在 cart.php 中创建下拉列表,以便可以选择多个代理之一。然后我需要从那里以某种方式在 cart-custom-checkout.php 页面中检索它。如果它是 WC() 购物车数据或类似内容的一部分,那就太好了。

有人可以帮助解释我如何做我想做的事吗?

TIA!!

更新:我更进一步,添加了我的下拉列表如下:

add_action('woocommerce_after_cart_totals', 'woocommerce_cart_add_resellers');
function woocommerce_cart_add_resellers() {
    wc_get_template('cart/cart-add-reseller.php');
}

cart-add-reseller.php的内容是:

<div style="margin-top:5px">
    <select name="agent">
    <option value="Agent1">Use Agent1</option>
    <option value="Agent2">Use Agent2</option>  
    </select>
</div>

现在只需要获取 cart-custom-checkout.php 页面中的 agent 值。我该怎么做?

Update2:单击 proceeded to checkout 按钮时我没有获得任何 $_POST 数据。

// enable custom checkout for woocommerce
add_shortcode( 'cart_custom_checkout', 'cart_custom_checkout_function' );
function cart_custom_checkout_function() {
    var_dump($_POST);
    wc_get_template('cart/cart-custom-checkout.php');
}

它是空的。

更新 3: 我检查了 $post,它只给我结帐页面本身,里面有简码,$_POST 是空的,$_SESSIONS 为空,$_GET 为空。我不确定 $_POST 数据去了哪里,也许是一些 javascript 或类似的我一无所知的东西。如果我只知道过滤器或操作或其他东西来给我 $_POST 数据,它将具有我需要的值。所以我暂时放弃了。

如有任何帮助,我们将不胜感激。

如果我完全理解你所拥有的,如果你要在 functions.php 中添加以下内容,它会将必填字段添加到购物车页面,并允许通过结帐页面上的 $_POST 访问它.此要素用包含 select 字段和 post 操作的新按钮替换了默认的继续结账按钮。

add_action( 'woocommerce_proceed_to_checkout', 'add_agent_before_proceed_to_checkout', 15 );
function add_agent_before_proceed_to_checkout() {
    remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
?>
    <form id="checkout_form" method="POST" action="<?php echo esc_url ( wc_get_checkout_url() ); ?>">
        <div style="margin-top:5px">
            <select name="agent">
                <option value selected="selected">-- Select an Agent --</option>
                <option value="Agent1">Use Agent1</option>
                <option value="Agent2">Use Agent2</option>  
            </select>
        </div>
        <button type="submit" class="checkout-button button alt wc-forward" style="width:100%;"><?php
esc_html_e( 'Proceed to checkout', 'woocommerce' ) ?></button>
    </form>
<?php
}

您添加到购物车的内容不起作用的原因是“继续结帐”按钮 (woocommerce\templates\cart\proceed-to-checkout-button.php) 默认情况下不执行 post 操作,其实就是一个link。此外,您添加输入的位置不在表单中,因此不会 posted 值。