如何通过 Woocommerce post 在管理订单面板中自定义列的值 API?

How to post a value to custom column in admin order panel via Woocommerce API?

在 Woocommerce 中,我创建了一个自定义列来管理订单列表页面。

<?php 

add_filter( 'manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION' );
function MY_COLUMNS_FUNCTION( $columns ) {
    $new_columns = ( is_array( $columns ) ) ? $columns : array();
    unset( $new_columns[ 'order_actions' ] );

    $new_columns['MY_COLUMN_ID_1'] = 'MY_COLUMN_1_TITLE';

    $new_columns[ 'order_actions' ] = $columns[ 'order_actions' ];
    return $new_columns;
}

然后,此列的自定义字段

add_action( 'manage_shop_order_posts_custom_column', 'MY_COLUMNS_VALUES_FUNCTION', 2 );
function MY_COLUMNS_VALUES_FUNCTION( $column ) {
    global $post;
    $data = get_post_meta( $post->ID );



    if ( $column == 'MY_COLUMN_ID_1' ) {
        echo ( isset( $data[ 'MY_COLUMN_1_POST_META_ID' ] ) ? $data[ 'MY_COLUMN_1_POST_META_ID' ] : '' );
    }
}

但我不知道如何通过 WooCommerce post 将字符串 API?

以下是如何在管理订单屏幕中添加自定义列的示例。它会在 Actions 列之后添加您的列,并使用您的自定义字段数据填充它。您需要将我的 "custom_column" 值替换为您自己的字段名称。

function wc_add_custom_order_column( $columns ) {

    $new_columns = array();

    foreach ( $columns as $column_name => $column_info ) {

        $new_columns[ $column_name ] = $column_info;

        if ( 'order_actions' === $column_name ) {
            $new_columns['custom_column'] = __( 'Custom Column', 'my-textdomain' );
        }
    }

    return $new_columns;
}

add_filter( 'manage_edit-shop_order_columns', 'wc_add_custom_order_column', 20 );

function wc_add_custom_order_column_content( $column ) {
    global $post;

    if ( 'custom_column' === $column ) {
        $data = get_post_meta( $post->ID );

        if( isset( $data['custom_column'] ) )
            echo $data['custom_column'];
    }
}

add_action( 'manage_shop_order_posts_custom_column', 'wc_add_custom_order_column_content' );

我会稍微调整 Andrew 的回答以开始更多地使用订单对象并减少对 post 元数据的依赖。我很确定 WooCommerce 最终至少会将其核心元移动到自定义 table 中。

function wc_add_custom_order_column_content( $column ) {
    global $post, $the_order;

    if ( empty( $the_order ) || $the_order->get_id() !== $post->ID ) {
        $the_order = wc_get_order( $post->ID );
    }

    // Only continue if we have an order.
    if ( empty( $the_order ) ) {
        return;
    }

    if ( 'custom_column' === $column ) {
        // Use order class getters to retrieve what you need.
        echo $the_order->get_formatted_order_total();
        // Or, if it's not a core field, it may be in meta.
        // echo $the_order->get_meta('_some_meta_key');
    }
}

add_action( 'manage_shop_order_posts_custom_column', 'wc_add_custom_order_column_content' );