1

チェックアウト完了後にカスタムフィールドを作成するために、WooCommerce Custom Order Data PlugIn をインストールしました。カスタム プラグインでは、woocomerce_thankyou-hook を使用して注文からデータを収集し、$order->custom->officer_text に文字列として保存します。

そのカスタム データを admin-new-order-mail に出力する必要がありますが、その方法がわかりません。

echo $order->custom->officer_text

admin-new-order-mail.php では機能しません。

ありがとうページのデータを print_r できるので、そこにあることがわかります。しかし、メールテンプレートではうまくいきません。

どうすれば機能しますか?

編集:

カスタム プラグインのコードを投稿するのを忘れていました。

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
  global $woocommerce;
  // Action after order is submitted
  add_action('woocommerce_thankyou', 'woocommerce_officer_data');
  // function to populate a custom field in $order
  function woocommerce_officer_data($order_id) {
    $order = new WC_Order( $order_id );
    // create custom field
    WC_CustomOrderData::extend($order);
    $order->custom->officer_text = '';
    $officer = '';
    // get date and format
    $date = DateTime::createFromFormat('Y-m-d H:i:s', $order->order_date);
    $orderdate = $date->format('d.m.Y');
    $ordertime = $date->format('H:i:s');
    $officer .= '##Officer-START##<br>Datum:' . $orderdate . '<br>Zeit:' . $ordertime . '<br>';
    $officer .= $order_id . '|' . $order_id . '|' . $order->billing_first_name . '|' . $order->billing_last_name . '|';
    $officer .= $order->billing_country . '|' . $order->billing_postcode . '|'  . $order->billing_city . '|' ;
    $officer .= $order->shipping_address_1 . '|' . $order->billing_email . '|' . $order->billing_phone . '|' ;
    $order->custom->officer_text = $officer;
    $order->custom->save();
    echo $order->custom->officer_text;
  }
}

フィールドは ul.order_details.bacs_details の直後に出力されます

しかし、thankyou.php で print_r($order) を実行すると、カスタム データが存在しません。

プラグインの print_r($order->custom) は私にこれを与えます:

WC_CustomOrderData Object
  (
    [order_id:WC_CustomOrderData:private] => 241
    [fields:WC_CustomOrderData:private] => Array
      (
       [officer_text] => ##Officer-START##
         Datum:09.10.2013
         Zeit:12:00:38
         241|241|Peter|Petersen|DE|11111|Xtown|Ystreet 53|foo@example.de||01xx 654 xxx xx|
       )

   )

私は本物のコーダーではないので、これまでのところ満足していますが、最初の小さなプラグインの出力を制御する方法がわかりません。だから、誰かが私に「ベストプラクティス」の解決策を示すことができれば、それは素晴らしいことです.

4

1 に答える 1

2

今後検索する人のために、この要旨woocommerce_email_order_metaは、フックを備えたすべての電子メール テンプレートに特定のメタ キーを出力します。

_my_field_1および_my_field_2は、表示しようとしている注文のカスタム データのメタ キーです。カスタム オーダー データ プラグインには詳しくありませんが、OP のメタキー_officer_text. 私の例では、メタ キーを使用します_some_field

/**
 * Add the field to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys['Some Field'] = '_some_field;
    return $keys;
}

バージョン 2.3 以降の WooCommerce の場合:

// WooCommerce 2.3+
function kia_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    $fields['some_field'] = array(
                'label' => __( 'Some field' ),
                'value' => get_post_meta( $order->id, '_some_field', true );
            );
    return $fields;
}
add_filter('woocommerce_email_order_meta_fields', 'kia_email_order_meta_keys', 10, 3 )

;

于 2014-10-09T10:23:54.737 に答える