WooCommerce 3.0アップデートは私にとって親切ではありません。ドメイン名のチェックアウトにカスタムフィールドを追加しましたが、今すぐ保存する方法を見つけるのに問題があります。このコードは、適切にまだフィールドを追加します。WooCommerceの注文にカスタムチェックアウトフィールドを追加してください
add_action('woocommerce_after_order_notes', 'add_domain_checkout_field');
function add_domain_checkout_field($checkout) {
echo '<div id="add_domain_checkout_field"><h2>' . __('Domain') . '</h2>';
woocommerce_form_field('sitelink_domain', array(
'type' => 'text',
'required' => true,
'class' => array('my-field-class form-row-wide'),
'label' => __('Domain where SiteLink will be installed'),
'placeholder' => __('Enter your URL'),
), $checkout->get_value('sitelink_domain'));
echo '</div>';
}
そして私は、このようにそれを保存しようとしています:
add_action('woocommerce_checkout_create_order', 'add_domain_to_order_meta', 10, 2);
function add_domain_to_order_meta($order, $data) {
if (! empty($_POST['sitelink_domain'])) {
$order->add_meta_data('ssla_sitelink_url', sanitize_text_field($_POST['sitelink_domain']));
}
}
メタを追加または任意の場所に保存されていないようしかし。
私は、$_POST
という変数があることを知っています。エラーが表示されています。
テストいくつかつかんでエラーログがさらに私を混乱させる:
$sitelink_domain = $subscription->get_meta_data('ssla_sitelink_url');
error_log(print_r( $sitelink_domain, true));
//出力は、次のとおりです。
[21-Apr-2017 01:26:27 UTC] Array
(
[0] => stdClass Object
(
[id] => 270086
[key] => _ssla_sitelink_url
[value] => lololol.com
)
[1] => stdClass Object
(
[id] => 270089
[key] => _download_permissions_granted
[value] => 1
)
)
はしかし、
$sitelink_domain = $subscription->get_meta('ssla_sitelink_url');
error_log('Domain: ' . $sitelink_domain);
出力がちょうどです:
[21-Apr-2017 01:27:39 UTC] Domain:
どのように '$ subscription'を初期化しますか?購読注文と注文は、多くのデータを共有していても同じではないことに注意してください。 – helgatheviking
サブスクリプションは私が使用しているフック、 'woocommerce_subscription_status_updated'で渡されています。何らかの理由で' add_meta_data() 'がアンダースコアをキーの前に付けていますか?私は '$ subscription-> get_meta( '_ssla_sitelink_url');を試して、それを正しく引っ張った。 – thatryan