结帐后的自定义重定向基于WooCommerce

时间:2017-09-15 23:46:57

标签: php wordpress woocommerce checkout orders

我想在结帐后在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作为主要支付网关。我不知道这是否有所作为。

1 个答案:

答案 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+上进行测试并正常运行。

  

最后一件事:您肯定需要在添加自定义复选框字段(结帐时)的函数中添加条件,以便在会员产品在购物车中时隐藏它。

相关问题