根据WooCommerce中的自定义结帐字段结账后自定义重定向
问题描述:
我希望在结账后使用woocommerce中的2个重定向链接。第一个是将任何用户发送到感谢页面的标准结帐链接。另一个是如果他们在结账时选中一个表示他们对会员有兴趣的方框。如果他们是我们希望他们被重定向到会员区。根据WooCommerce中的自定义结帐字段结账后自定义重定向
我发现这个代码感谢页面重定向:
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;
}
}
我有办法添加的复选框结账页面(使用呜结帐字段编辑器专业版插件)。我只需要这种代码(我还没有测试过)的方式来检查当订单被放置并重定向到另一页时是否检查了成员资格字段。
仅供参考,我们使用贝宝作为我们的主要支付网关。我不知道这是否有所作为。
答
没有人可以给你一个关于如何获得自定义字段值的答案。你应该能够自己找到wp_postmeta数据库表(对于您使用此复选框的订单ID)。然后你将使用get_post_meta()
函数来获取它(如我在下面的答案)。
现在你不需要插件来在你的结账页面输出一个自定义的复选框字段。你可以用一些简单的自定义代码来做到这一点(你只需要告诉你想要在什么位置)。
要进行自定义重定向,woocommerce_thankyou
是不正确的钩。
下面你会发现一些代码会输出一个自定义复选框(就在订单注释后面),这将在订单提交时保存该值。如果复选框被选中,客户将被重定向到您的特殊页面“会员”。
您不需要其他重定向,因为在提交订单后默认情况下,客户被重定向到谢谢页面。
这里是代码(评论):
// 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+上测试并正常工作。
最后一件事:你一定需要在添加自定义复选框字段(结账)功能添加一个条件,以隐藏它,当一个会员产品在购物车。