我运行的网站上有很多免费产品,会员加入后可以访问这些产品。他们必须再次通过结账才能获得它们(它们是必须为每个用户唯一生成的优惠券,因此需要再次通过结账)。
当用户将其中一个产品添加到购物车并结帐时,我想显示一个超级简单的结帐页面。我真的只是想添加一个横幅图像,然后在图像下方对齐“下订单”黄油中心。
我设法使用以下代码删除了大量的结帐字段:
function sv_free_checkout_fields() {
global $woocommerce ;
// Bail we're not at checkout, or if we're at checkout but payment is needed
if ( ! is_checkout() || ( is_checkout() && WC()->cart->needs_payment() ) ) {
return;
}
if ( $woocommerce->cart->total != 0 ) {
return;
}
if ( WC_Subscriptions_Cart::cart_contains_subscription() ) {
return;
}
// remove coupon forms since why would you want a coupon for a free cart??
remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
// remove order review section
remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 );
// Remove the "Additional Info" order notes
add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
// Unset the fields we don't want in a free checkout
function unset_unwanted_checkout_fields( $fields ) {
// add or remove billing fields you do not want
// list of fields: http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/#section-2
$billing_keys = array(
'billing_first_name',
'billing_last_name',
'billing_company',
'billing_phone',
'billing_email',
'billing_address_1',
'billing_address_2',
'billing_city',
'billing_postcode',
'billing_country',
'billing_state',
);
// unset each of those unwanted fields
foreach( $billing_keys as $key ) {
unset( $fields['billing'][$key] );
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'unset_unwanted_checkout_fields' );
// A tiny CSS tweak for the account fields; this is optional
function print_custom_css() {
echo '<style>.create-account { margin-top: 6em; }</style>';
}
add_action( 'wp_head', 'print_custom_css' );
}
add_action( 'wp', 'sv_free_checkout_fields' );
截至目前,每当其中一个免费产品被添加到购物车并且用户去结账时,它会删除除“下订单”按钮(我想保留)之外的所有内容,一些围绕该按钮的样式,左侧的“结算明细”标题,以及该标题周围的矩形边框,以及其下方的另一个矩形框。我似乎无法弄清楚如何删除这些最后几件事。
这是我需要删除的代码,它创建了按钮周围的框:
body.woocommerce-cart .cart-collaterals, form.checkout.woocommerce-checkout
#order_review {
width: 40%;
display: inline-block;
padding: 20px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
border: 1px solid #f1f1f1;
background-color: #fdfdfd;
}
这是我需要在左侧删除的div:
<div class="woocommerce-billing-fields">
<h3>Billing details</h3>
<div class="woocommerce-billing-fields__field-wrapper">
</div>
</div>
我只需要在购物车总数为零时将其移除。我还希望将地点顺序按钮居中,并在可能的情况下在其上方添加横幅。
答案 0 :(得分:0)
如何用以下内容替换上述div:
<?php
$cart_total = WC()->cart->get_cart_total();
if ( $cart_total != 0 ) {
?>
<div class="woocommerce-billing-fields">
<h3>Billing details</h3>
<div class="woocommerce-billing-fields__field-wrapper"></div>
</div>
<?php } ?>
这样,如果购物车价值 NOT 等于零,将显示。
我没有测试过,但理论就在那里。您可能需要向购物车添加零总项目并回显WC()->cart->get_cart_total();
以检查输出。它可能会返回0.00或0.00美元。在这种情况下,您需要相应地修改代码。