0

My intention is to show a preview of the custom field data in the Edit Billing and Shipping Address section on the my woocommerce account page. I made an adjustment to the code of the my-address.php template, in which I can correctly show the preview of 2 texts, one for billing and one for shipping, (but when I add the code that I use to display meta data from custom fields it generates a debugging error distorting the page layout). here is the code of template:

<?php
/**
 * My Addresses
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/myaccount/my-address.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see     https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 2.6.0
 */

defined( 'ABSPATH' ) || exit;


// My Billing Addresses

$customer_id = get_current_user_id();

if ( ! wc_ship_to_billing_address_only()  ) {
    $get_addresses = apply_filters(
        'woocommerce_my_account_get_addresses',
        array(
            'billing'  => __( 'Billing address', 'woocommerce' ),
        ),
        $customer_id
    );
} else {
    $get_addresses = apply_filters(
        'woocommerce_my_account_get_addresses',
        array(
            'billing' => __( 'Billing address', 'woocommerce' ),
        ),
        $customer_id
    );
}

$oldcol = 1;
$col    = 1;
?>

<p>
    <?php echo apply_filters( 'woocommerce_my_account_my_address_description', esc_html__( 'The following addresses will be used on the checkout page by default.', 'woocommerce' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</p>

<?php if ( ! wc_ship_to_billing_address_only() && wc_shipping_enabled() ) : ?>
    <div class="u-columns woocommerce-Addresses col2-set addresses">
<?php endif; ?>

<?php foreach ( $get_addresses as $name => $address_title ) : ?>
    <?php
        $address = wc_get_account_formatted_address( $name );
        $col     = $col * -1;
        $oldcol  = $oldcol * -1;
    ?>

    <div class="u-column<?php echo $col < 0 ? 1 : 2; ?> col-<?php echo $oldcol < 0 ? 1 : 2; ?> woocommerce-Address">
        <header class="woocommerce-Address-title title">
            <h3><?php echo esc_html( $address_title ); ?></h3>
            <a href="<?php echo esc_url( wc_get_endpoint_url( 'edit-address', $name ) ); ?>" class="edit"><?php echo $address ? esc_html__( 'Edit', 'woocommerce' ) : esc_html__( 'Add', 'woocommerce' ); ?></a>
        </header>
        
        <address>
Display preview of custom field order meta data BILLING.
        </address>
        
    </div>

<?php endforeach; ?>

<?php if ( ! wc_ship_to_billing_address_only() ) : ?>

    <?php
endif;


// My Shipping Addresses

$customer_id = get_current_user_id();

if ( ! wc_ship_to_billing_address_only() && wc_shipping_enabled() ) {
    $get_addresses = apply_filters(
        'woocommerce_my_account_get_addresses',
        array(
            'shipping' => __( 'Shipping address', 'woocommerce' ),
        ),
        $customer_id
    );
} else {
    $get_addresses = apply_filters(
        'woocommerce_my_account_get_addresses',
        array(
            'billing' => __( 'Billing address', 'woocommerce' ),
        ),
        $customer_id
    );
}

$oldcol = 1;
$col    = 1;
?>



<?php if ( ! wc_shipping_enabled() ) : ?>
    <div class="u-columns woocommerce-Addresses col2-set addresses">
<?php endif; ?>

<?php foreach ( $get_addresses as $name => $address_title ) : ?>
    <?php
        $address = wc_get_account_formatted_address( $name );
        $col     = $col * -1;
        $oldcol  = $oldcol * -1;
    ?>

    <div class="u-column<?php echo $col < 0 ? 1 : 2; ?> col-<?php echo $oldcol < 0 ? 1 : 2; ?> woocommerce-Address">
        <header class="woocommerce-Address-title title">
            <h3><?php echo esc_html( $address_title ); ?></h3>
            <a href="<?php echo esc_url( wc_get_endpoint_url( 'edit-address', $name ) ); ?>" class="edit"><?php echo $address ? esc_html__( 'Edit', 'woocommerce' ) : esc_html__( 'Add', 'woocommerce' ); ?></a>
        </header>
        
        <address>
Display preview of custom field order meta data SHIPPING.
        </address>
    
    </div>

<?php endforeach; ?>

<?php if ( ! wc_shipping_enabled() ) : ?>
    </div>
    <?php
endif;

this is the code i use to display custom field meta data in some php files:

<span><?php
    $custom_order_meta = get_post_meta($order->get_order_number(), 'meta_data_order_field_key', true);

    if( ! empty($custom_order_meta) )
    { ?>
<p> <?php
printf( '<strong>Title Field:</strong> ' . esc_html( '%s', 'woocommerce' ), esc_html($custom_order_meta)  );?> 
</p> <?php 
    }
    ?></span>

Attached image for better understanding. Image.

I appreciate any help, I don't know if there is a filter or hook to do it.

Joundill
  • 6,828
  • 12
  • 36
  • 50
Williams
  • 421
  • 4
  • 18
  • ___it generates a debugging error___ Can you share the error message with us, preferably adding it to the question rather than a comment – RiggsFolly Aug 12 '20 at 16:00
  • You can't get any order id or order number on this template as the variable `$order` can't be defined… So it's not possible to use order meta data. You can use instead user meta data with `$custom_user_meta = get_user_meta(get_current_user_id(), 'meta_data_user_field_key', true);` – LoicTheAztec Aug 12 '20 at 16:34
  • I understand, what happens is that I am using the plugin Checkout Manager [https://wordpress.org/plugins/woocommerce-checkout-manager/] with which I add custom fields for the billing and shipping address, my intention is to show the preview of the data of those fields, instead of the preview that shows woocommerce by default. Each field generates a meta key id. How could I do it? – Williams Aug 12 '20 at 16:55

1 Answers1

0

I was able to solve it by removing "woocommerce" and with the help of the comment of the friend @LoicTheAztec thank you very much. Below the code:

    <?php
    $custom_user_meta = get_user_meta(get_current_user_id(), 'custom_field_key_meta', true);

    if( ! empty($custom_user_meta) )
    { ?>
<p> <?php
printf( '<strong>Title Custom Field:</strong> ' . esc_html( '%s' ), esc_html($custom_user_meta)  );?> 
</p> <?php 
    }
    ?>
Williams
  • 421
  • 4
  • 18