【问题标题】:add woocommerce optgroup selected value to email order an admin order将 woocommerce optgroup 选定值添加到电子邮件订单管理员订单
【发布时间】:2020-05-30 04:33:12
【问题描述】:

我在 optgroup 上阅读了一些我需要的文章,我设法将其显示在结帐页面上,但我需要在电子邮件和我们查看订单详细信息的管理区域中显示所选选项。

代码来自:"WooCommerce Select Dropdown With Optgroup On Checkout"

我需要什么:我正在创建一个网站,我需要在结帐页面上手动添加一些区域,以便用户可以选择他的区域,这样我就可以将其用作验证和限制运输的方式,一旦选择我需要能够在电子邮件订单以及 Woocommerce 区域不适合我的情况下的订单上看到的区域:

    <?php
  add_action('woocommerce_before_order_notes', 'custom_checkout_select_field_with_optgroup', 10, 1 );
function custom_checkout_select_field_with_optgroup( $checkout ) {

$domain  = 'woocommerce';
$title   = __("zona", $domain);
$slug    = zone_limit;
$default = __("Selecione su Zona", $domain);
$value   = $checkout->get_value($slug);

// Region option data array with optgroup
$options = array(
    __("North zone", $domain) => array(
        'region1' => __("Region 1", $domain),
        'region2' => __("Region 2", $domain),
    ),
    __("South zone", $domain) => array(
        'region3' => __("Region 3", $domain),
        'region4' => __("Region 4", $domain),
    )
      __("Middle zone", $domain) => array(
        'region3' => __("Region 5", $domain),
        'region4' => __("Region 6", $domain),
    )
);

// The field
echo '<p class="form-row form-row-wide '.$slug.'-dropdown" id="'.$slug.'_field" data-priority="">
<label for="'.$slug.'" class="">'.$title.'</label>
<span class="woocommerce-input-wrapper">
<select name="'.$slug.'" id="'.$slug.'" class="select " data-placeholder="" autocomplete="'.$slug.'">
<option value="">'.$default.'</option>';

// Loop through "optgroup"
foreach( $options as $optgroup_label => $optgroup_options ) {
    echo '<optgroup label="'.$optgroup_label.'">';
    // Loop through "options" in the "optgroup"
    foreach( $optgroup_options as $key => $label ) {
        $selected = $value === $key ? ' selected="selected"': '';
        echo '<option value="'.$key.'"'.$selected.'>'.$label.'</option>';
    }
    echo '</optgroup>';
}

echo '</select></span></p>';

}

我试过了,但不走运

add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );

 function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$fields['meta_key'] = array(
    'label' => __( 'Label' ),
    'value' => get_post_meta( $order->id, 'meta_key', true ),
);
return $fields;
 }


  add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys');

     function my_custom_order_meta_keys( $keys ) {

    $keys[] = $value ; // This will look for a custom field called 'Tracking Code' and add it to emails
 return $keys;
}


add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

 function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST[$value ] ) ) {
    update_post_meta( $order_id, 'region', sanitize_text_field( $_POST[$value ] ) );
}


}

【问题讨论】:

  • 1) 您的代码包含严重错误和警告。 2) 此问题目前包含多个问题。它应该只关注一个问题。请相应地调整您的问题。
  • @7uc1f3r 我调整了问题,关于错误可能是我尝试过的,但是根据我从哪里获得源代码,到目前为止的主要代码是好的

标签: php wordpress woocommerce optgroup


【解决方案1】:

我希望我不会因此受到惩罚,我最初的问题是将所选值添加到电子邮件订单并使用 optgroup 折叠效果,但是我被告知问题范围很广,所以我删除了 jquery 标记并影响并限制我自己只是 php 并在电子邮件订单中获取它。

php 很好,我只是可以在电子邮件中得到它,而且我需要 optgroup。

我做了其他事情,我只使用了 jquery 而不是完整的 php,我创建了文本类型字段并让它向电子邮件发送答案,然后我手动创建了一个模式(不想使用引导程序),然后是一个常规的 html optgroup 并使用 jquery 获取所选值并插入到文本字段中。这是我的代码。

html是基本的,你可以找到 here

您可以使用 this 作为示例的 css,然后需要根据需要修改 bot css 和 html

php

add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

 function my_custom_checkout_field( $checkout ) {

echo '<div id="myZoneLimit"><h2>' . __('valida tu zona') . '</h2>';

 woocommerce_form_field( 'my_field_limit', array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'label'         => __('Fill in this field'),
    'placeholder'   => __('Enter something'),
    ), $checkout->get_value( 'my_field_limit' ));

echo '</div>';

  }


  add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

   function my_custom_checkout_field_process() {
  // Check if set, if its not set add an error.
   if ( ! $_POST['my_field_limit'] )


    wc_add_notice( __( 'Por favor seleccione su zona de envio.' ), 'error' );
   }

  add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys');

   function my_custom_order_meta_keys( $keys ) {
 $keys[] = 'valida tu zona'; // This will look for a custom field called 'Tracking Code' and add it to emails
 return $keys;
    }


     add_action( 'woocommerce_checkout_update_order_meta', 
   'my_custom_checkout_field_update_order_meta' );

  function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['my_field_limit'] ) ) {
    update_post_meta( $order_id, 'valida tu zona', sanitize_text_field( $_POST['my_field_limit'] ) );
}
     }

 add_action( 'woocommerce_admin_order_data_after_billing_address','my_custom_checkout_field_display_admin_order_meta', 10, 1 );

      function my_custom_checkout_field_display_admin_order_meta($order){
      echo '<p><strong>'.__('valida tu zona').':</strong> ' . get_post_meta( $order->id, 'valida tu zona', true ) . '</p>';

我的 jquery

    /// button that opens the modal that was created the html
  $("#my_field_limit").click(function(){
   $("#myModalarea").show();
    });

       //// get the value from the selected option and place in into the the text field
       $('#coveredareas').change(function(){
        var areazone = $(this).val();
        $("#my_field_limit").val(areazone);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2016-08-02
    相关资源
    最近更新 更多