[英]Show product meta in order items table on WooCommerce admin order details page
我正在使用以下代碼在 WooCommerce 管理訂單詳細信息頁面上的訂單項目表中顯示自定義產品元數據:
add_action('woocommerce_admin_order_item_values', 'tempiconsegna_admin_order_item_values', 10, 3);
function tempiconsegna_admin_order_item_values($_product, $item, $item_id = null) {
$value = get_post_meta($_product->post->ID, 'prefix-tempiconsegna', 1);
// display the value
echo '<td>' . $value . '</td>';
}
它顯示“prefix-tempiconsegna”,它們是自定義元數據,例如:
我的問題是,如果我更改產品的可用性,它也會在以前的訂單中更改。
當我更新產品的可用性時,如何使它在訂單時顯示價值而不改變?
那是因為您正在使用get_post_meta()
和 productID,所以如果您調整產品的數據,它也會更改顯示它的數據,在您的情況下是當前和以前的訂單。
為了防止這種情況,您必須添加每個訂單行項目的數據,這可以通過以下方式完成:
function action_woocommerce_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
// The WC_Product instance Object
$product = $item->get_product();
// Get value
$value = $product->get_meta( 'prefix-tempiconsegna' );
// NOT empty
if ( ! empty ( $value ) ) {
$item->update_meta_data( 'prefix-tempiconsegna', $value );
}
}
add_action( 'woocommerce_checkout_create_order_line_item', 'action_woocommerce_checkout_create_order_line_item', 10, 4 );
然后在 WooCommerce 管理訂單詳細信息頁面中顯示此內容,請使用:
// Add header
function action_woocommerce_admin_order_item_headers( $order ) {
// Set the column name
$column_name = __( 'My column', 'woocommerce' );
// Display the column name
echo '<th class="my-class">' . $column_name . '</th>';
}
add_action( 'woocommerce_admin_order_item_headers', 'action_woocommerce_admin_order_item_headers', 10, 1 );
//Add content
function action_woocommerce_admin_order_item_values( $product, $item, $item_id ) {
// Only for "line_item" items type, to avoid errors
if ( ! $item->is_type('line_item') ) return;
// Get value
$value = $item->get_meta( 'prefix-tempiconsegna' );
// NOT empty
if ( ! empty ( $value ) ) {
echo '<td>' . $value . '</td>';
}
}
add_action( 'woocommerce_admin_order_item_values', 'action_woocommerce_admin_order_item_values', 10, 3 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.