Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Order properties should not be accessed directly - WooCommerce 3.0

I've just upgraded my local WooCommerce website to 3.0. Everything works perfectly as normal, but I've noticed with debugging turned on that I'm getting hundreds of the following notices:

[05-Apr-2017 12:25:00 UTC] PHP Notice: id was called <strong>incorrectly</strong>. Order properties should not be accessed directly. Please see <a href="https://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information. (This message was added in version 3.0.) in C:\xampp\htdocs\dev\wp-includes\functions.php on line 4137

So it looks like WooCommerce are pulling back being able to directly call order data. One example this code is being triggered by is this function in my functions.php file:

function eden_woocommerce_order_number($original, $order)
{
    return 'EDN-' . str_pad($order->id, 10, 0, STR_PAD_LEFT);
}

This function simply adds "EDN" to the start of the order ID and pads it by 10 characters, but WooCommerce doesn't like how I'm calling $order - what would be the best way to rewrite such a function that 3.0 is happy with?

like image 215
Liam McArthur Avatar asked Apr 05 '17 12:04

Liam McArthur


2 Answers

it says "id was called incorrectly. Order properties should not be accessed directly."

Try $order->get_id()

like image 161
mbg Avatar answered Sep 18 '22 13:09

mbg


Maybe its helpful for others too. Here's the some stuff regarding to all the functions of directly accessed values through the magic function.

This function is from Woocommerce 3.0

if ( 'completed_date' === $key ) {
        return $this->get_date_completed() ? gmdate( 'Y-m-d H:i:s', $this->get_date_completed()->getOffsetTimestamp() ) : '';
    } elseif ( 'paid_date' === $key ) {
        return $this->get_date_paid() ? gmdate( 'Y-m-d H:i:s', $this->get_date_paid()->getOffsetTimestamp() ) : '';
    } elseif ( 'modified_date' === $key ) {
        return $this->get_date_modified() ? gmdate( 'Y-m-d H:i:s', $this->get_date_modified()->getOffsetTimestamp() ) : '';
    } elseif ( 'order_date' === $key ) {
        return $this->get_date_created() ? gmdate( 'Y-m-d H:i:s', $this->get_date_created()->getOffsetTimestamp() ) : '';
    } elseif ( 'id' === $key ) {
        return $this->get_id();
    } elseif ( 'post' === $key ) {
        return get_post( $this->get_id() );
    } elseif ( 'status' === $key ) {
        return $this->get_status();
    } elseif ( 'post_status' === $key ) {
        return get_post_status( $this->get_id() );
    } elseif ( 'customer_message' === $key || 'customer_note' === $key ) {
        return $this->get_customer_note();
    } elseif ( in_array( $key, array( 'user_id', 'customer_user' ) ) ) {
        return $this->get_customer_id();
    } elseif ( 'tax_display_cart' === $key ) {
        return get_option( 'woocommerce_tax_display_cart' );
    } elseif ( 'display_totals_ex_tax' === $key ) {
        return 'excl' === get_option( 'woocommerce_tax_display_cart' );
    } elseif ( 'display_cart_ex_tax' === $key ) {
        return 'excl' === get_option( 'woocommerce_tax_display_cart' );
    } elseif ( 'cart_discount' === $key ) {
        return $this->get_total_discount();
    } elseif ( 'cart_discount_tax' === $key ) {
        return $this->get_discount_tax();
    } elseif ( 'order_tax' === $key ) {
        return $this->get_cart_tax();
    } elseif ( 'order_shipping_tax' === $key ) {
        return $this->get_shipping_tax();
    } elseif ( 'order_shipping' === $key ) {
        return $this->get_shipping_total();
    } elseif ( 'order_total' === $key ) {
        return $this->get_total();
    } elseif ( 'order_type' === $key ) {
        return $this->get_type();
    } elseif ( 'order_currency' === $key ) {
        return $this->get_currency();
    } elseif ( 'order_version' === $key ) {
        return $this->get_version();
    } elseif ( is_callable( array( $this, "get_{$key}" ) ) ) {
        return $this->{"get_{$key}"}();
    } else {
        return get_post_meta( $this->get_id(), '_' . $key, true );
    }
like image 25
Jannis Avatar answered Sep 22 '22 13:09

Jannis