【问题标题】:Display custom WooCommerce checkout fields in order details and make them editable在订单详细信息中显示自定义 WooCommerce 结帐字段并使其可编辑
【发布时间】:2019-03-01 10:51:33
【问题描述】:

我正在更新 WooCommerce 插件,并且我有一个 hooks.php 文件,我在其中处理 WooCommerce 挂钩。我在结账时添加了四个新的计费字段,我需要在订单详细信息中显示它们;我还需要使它们可编辑。

这是我成功显示字段的代码:

add_action('woocommerce_admin_order_data_after_billing_address', function($order) 
  echo p(strong(__('Codice Fiscale', 'fatt-24')).': <br />' . order_c_fis($order));
  echo p(strong(__('Partita Iva / VAT number', 'fatt-24')).': <br />' . order_p_iva($order));
  echo p(strong(__('Codice destinatario', 'fatt-24')) . ': <br />' . order_recipientcode($order));
  echo p(strong(__('Indirizzo PEC', 'fatt-24')) . ': <br />' . order_pec_address($order));
}, 10, 1);

我无法编辑和保存它。

【问题讨论】:

    标签: php wordpress woocommerce orders


    【解决方案1】:

    在管理员订单详情中显示为可编辑字段

    add_filter('woocommerce_admin_billing_fields', 'custom_admin_billing_fields', 10, 1);
    
    function custom_admin_billing_fields($fields) {
        $fields['billing_fiscalcode'] = array(
            'label' => __('billing_fiscalcode', 'woocommerce'),
            'show' => true,
        );
        $fields['billing_vatcode'] = array(
            'label' => __('billing_vatcode', 'woocommerce'),
            'show' => true,
        );
        $fields['billing_recipientcode'] = array(
            'label' => __('billing_recipientcode', 'woocommerce'),
            'show' => true,
        );
        $fields['billing_pecaddress'] = array(
            'label' => __('billing_pecaddress', 'woocommerce'),
            'show' => true,
        );
        return $fields;
    }
    
    add_action('woocommerce_admin_order_data_after_billing_address', 'display_billing_options_value_in_admin_order', 10, 1);
    
    function display_billing_options_value_in_admin_order($order) {
    
    
        if ($value = get_post_meta($order->get_id(), 'billing_fiscalcode', true))
            echo '<p><strong>' . __('Billing Fiscalcode', 'woocommerce') . ':</strong> ' . $value . '</p>';
        if ($value = get_post_meta($order->get_id(), 'billing_vatcode', true))
            echo '<p><strong>' . __('billing_vatcode', 'woocommerce') . ':</strong> ' . $value . '</p>';
        if ($value = get_post_meta($order->get_id(), 'billing_recipientcode', true))
            echo '<p><strong>' . __('billing_recipientcode', 'woocommerce') . ':</strong> ' . $value . '</p>';
        if ($value = get_post_meta($order->get_id(), 'billing_pecaddress', true))
            echo '<p><strong>' . __('billing_pecaddress', 'woocommerce') . ':</strong> ' . $value . '</p>';
    }
    

    【讨论】:

      【解决方案2】:

      我终于找到了这个解决方案:

        <div class="edit_address">
          <?php 
      /* here I make the fields editable */
      if (customer_use_cf()){
              woocommerce_wp_text_input( array( 'id' => '_billing_fiscalcode', 'label' =>__('Codice Fiscale', 'fatt-24'), 'wrapper_class' => '_billing_company_field' ) ); // here I make the fields editable
      }
      
      if (customer_use_vat()){
              woocommerce_wp_text_input( array( 'id' => '_billing_vatcode', 'label' => __('Partita Iva / VAT number', 'fatt-24'), 'wrapper_class' => '_billing_company_field' ) );
      }
      
       if(customer_use_recipientcode()) {
                  woocommerce_wp_text_input( array( 'id' => '_billing_recipientcode', 'label' => __('Codice destinatario', 'fatt-24'), 'wrapper_class' => '_billing_company_field' ) );
                  woocommerce_wp_text_input( array( 'id' => '_billing_pecaddress', 'label' => __('Indirizzo PEC', 'fatt-24'), 'wrapper_class' => '_billing_company_field' ) );
       }?>
          </div>
      
          <?php
      
      }, 10, 1);
      
      /* here I update the post */
      
       add_action( 'woocommerce_process_shop_order_meta',  function ( $post_id, $post ){
          update_post_meta( $post_id, '_billing_pecaddress', wc_clean( sanitize_text_field($_POST[ '_billing_pecaddress' ] )) ); // here I update the post
          update_post_meta( $post_id, '_billing_recipientcode ', wc_clean(sanitize_text_field( $_POST[ '_billing_recipientcode' ] )) );
          update_post_meta( $post_id, '_billing_fiscalcode', wc_clean( sanitize_text_field($_POST[ '_billing_fiscalcode' ]) ) );
          update_post_meta( $post_id, '_billing_vatcode', wc_clean( sanitize_text_field($_POST[ '_billing_vatcode' ]) ) );
          }, 45, 2 );
      

      【讨论】:

        猜你喜欢
        • 2015-12-10
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        相关资源
        最近更新 更多