将下拉列表添加到 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 值。
我想修改 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 值。