我想在结帐后在woocommerce中使用2个重定向链接。第一个是标准结账链接,将任何用户发送到感谢页面。另一种情况是,如果他们在结账时检查一个表示他们对会员资格感兴趣的方框。如果他们是我们希望他们被重定向到会员区。
我发现此代码感谢页面重定向:
add_action( 'woocommerce_thankyou', 'bbloomer_redirectcustom');
function bbloomer_redirectcustom( $order_id ){
$order = new WC_Order( $order_id );
$membership = WHAT FIELD HERE FROM ORDER? // Need a way to set this variable to checkbox true or not.
$url = 'http://yoursite.com/thank-you'; //Thank you page
$mem_url = 'http://yoursite.com/members'; // Membership page
if ( $order->status != 'failed' && !$membership) {
wp_redirect($url);
exit;
} else {
wp_redirect($mem_url);
exit;
}
}
我有办法将复选框添加到结帐页面(使用Woo Checkout Field Editor Pro插件)。我只需要一种方法来获取此代码(我还没有测试过),以检查在下订单时是否检查了成员资格字段并重定向到另一个页面。
仅供参考,我们使用PayPal作为主要支付网关。我不知道这是否有所作为。
答案 0 :(得分:0)
没有人可以就如何获得自定义字段的价值给出答案。您应该能够自己查看wp_postmeta数据库表(对于您使用此复选框的订单ID)。然后,您将使用 get_post_meta()
函数来获取它(如下面的答案)。
现在,您不需要插件即可在结帐页面中输出自定义复选框字段。您可以使用一些简单的自定义代码(您只需告诉您想要的位置)。
要进行自定义重定向, woocommerce_thankyou
不是正确的重复。
下面您将找到一些代码,它们将输出一个自定义复选框(在订单备注之后),这将在提交订单时保存该值。如果选中该复选框,则客户将被重定向到您的特殊页面“members”。
您不需要其他重定向,因为默认情况下,在提交订单后,客户会被重定向到感谢页面。
以下是代码(已注释):
// Add the custom checkout field
add_filter( 'woocommerce_after_order_notes', 'add_membership_checkbox_checkout_field' );
function add_membership_checkbox_checkout_field( $checkout ) {
woocommerce_form_field( 'membership_interested', array(
'type' => 'checkbox',
'class' => array('my-field-class form-row-wide'),
'label' => __('I am interested in a membership plan (optional)', 'woocommerce'),
'required' => false,
), $checkout->get_value( 'membership_interested' ));
}
// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_update_order_meta', 'save_membership_checkbox_checkout_field' );
function save_membership_checkbox_checkout_field( $order_id ) {
if ( ! empty( $_POST['membership_interested'] ) ) {
update_post_meta( $order_id, '_membership_interested', sanitize_text_field( $_POST['membership_interested'] ) );
}
}
// Custom conditional_redirect on thank you page
add_action( 'template_redirect', 'thankyou_custom_conditional_redirect');
function thankyou_custom_conditional_redirect(){
// Only in thank you page
if ( ! is_wc_endpoint_url( 'order-received' ) ) return;
global $wp;
$order_id = intval( str_replace( 'checkout/order-received/', '', $wp->request ) );
$membership = get_post_meta( $order_id, '_membership_interested', true );
if ( $membership ) {
wp_redirect(home_url( '/members/' ) );
exit;
} else return;
}
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
此代码在Woocommerce 3+上进行测试并正常运行。
最后一件事:您肯定需要在添加自定义复选框字段(结帐时)的函数中添加条件,以便在会员产品在购物车中时隐藏它。