如何通过 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' );
在 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' );