我已经定制了一个支付网关来接受采购订单,并从插件中正确加载,然后按照ID的方式显示在结帐页面上;我认为这是一个非常好的开始。
无论如何,我有一个非标准的表单条目(购买订单号),其ID类似于人们要填写,但我不知道如何将其附加到我的自定义支付网关,以便它出现在生成的管理端页。
这一切都很好:
function payment_fields(){
if ( $description = $this->get_description() )
echo wpautop( wptexturize( $description ) );
global $woocommerce;
?>
<form class="form-horizontal" role="form" id="bv-form">
<fieldset>
<!-- Form Name -->
<legend>Purchase Order</legend>
<!-- Text input-->
<div class="form-group">
<label class="control-label" for="po_no">PO Number</label>
<div class="">
<input id="po_no" name="po_no" type="text" placeholder="" class="form-control input-md">
</div>
</div>
...
但是当我到达此处时,我不知道如何修改process_payment( $order_id )
(或添加到functions.php
的内容)以从付款字段中获取表单值。我看到有$order->billingAddress1
等,我将如何提交额外的情侣表格字段以及其次,然后,如何从新创建的{{po_no
中获取WC_Order
1}}?
感谢您的帮助!
答案 0 :(得分:3)
如果您要创建自定义付款网关,则应在其中实施process_payment()
。此代码可以访问付款表单提交的$_POST
变量,因此您可以将其称为:
$po_number = ( isset( $_POST['po_no'] ) )? $_POST['po_no'] : 0;
这说起来听起来像你的问题,你可能实际上并没有编写自定义网关,而是尝试将自定义字段附加到订单中。如果你想挂钩到另一个网关(如PayPal,Authorize.net等),你应该使用作为WC_Order.payment_complete()
的一部分调用的WooCommerce动作挂钩,这是网关收集付款后调用的。操作是woocommerce_pre_payment_complete
,它在其他任何操作之前运行,并将订单ID作为参数,并在设置stock / status / etc之后设置woocommerce_payment_complete
。
add_action( 'woocommerce_payment_complete', 'my_woocommerce_payment_complete');
function my_woocommerce_payment_complete( $order_id ){
$po_number = ( isset( $_POST['po_no'] ) )? $_POST['po_no'] : 0;
update_post_meta( $order_id, 'po_number', $po_number );
}
然后,您可以通过添加元框在“订单编辑”页面上显示此自定义字段。如果您想让它可编辑,您需要加入save_post
并将po_number
更改为输入。
add_action( 'add_meta_boxes', 'po_number_metabox' );
function add_po_number_metabox(){
global $post;
if ( $post->post_type = 'shop_order' ){
add_meta_box( 'po-number', 'Title', 'po_number_metabox', 'shop_order', 'side', 'default');
}
}
function po_number_metabox(){
global $post;
$po_number = get_post_meta( $post->ID, 'po_number', true);
echo "PO:> {$po_number}";
}