在Woocommerce中添加产品属性列以编辑订单页面

时间:2019-11-27 12:18:27

标签: php wordpress woocommerce

任何对此表示赞赏的帮助,到目前为止都尝试了许多无济于事的方法,包括此处的建议Add product short description to Woocommerce admin order edit pages。这是我到目前为止的内容:

add_action( 'woocommerce_admin_order_item_headers', 'custom_admin_order_items_headers', 20, 1 );
function custom_admin_order_items_headers( $order ){

    echo '<th>';
    echo __('Colour', 'woocommerce') . '</th>';
}

add_action( 'woocommerce_admin_order_item_values', 'custom_admin_order_item_values', 20, 3 );
function custom_admin_order_item_values( $_product, $item, $item_id ) {

    $colour = $_product->get_attribute( 'colour' );
    echo '<td>' . $colour . '</td>';
}

每个产品都有许多属性,我想在编辑订单页面上的新列中显示这些属性之一。问题是由于某些原因,product属性为空-如果我只是回显$ _product,则该属性中没有数据,即使在数据库中肯定存在它的值也是如此。

有什么想法吗?

我已经附上了我想要实现的屏幕截图,尽管我可以使标题显示得很好,甚至将数据数组附加到产品上,但实际属性为空。如果我使用:

$_product->get_attribute( 'colour' )

就像我在网站上的其他任何地方都成功所做的一样,我得到一个错误:

Uncaught Error: Call to a member function get_attribute() on null

我尝试设置全局$ product;在功能中,nada。

enter image description here

错误日志:

致命错误:未捕获错误:在/home/customer/www/mysite/public_html/wp-content/themes/mytheme/functions.php:1237中,调用成员函数get_attribute()时为null堆栈跟踪:#0 / home / customer / www / mysite / public_html / wp-includes / class-wp-hook.php(288):custom_admin_order_item_values(NULL,Object(WC_Order_Item_Shipping),26)#1 / home / mysite / public_html / wp-includes / class -wp-hook.php(312):WP_Hook-> apply_filters('',Array)#2 /home/customer/www/mysite/public_html/wp-includes/plugin.php(478):WP_Hook-> do_action(Array )#3 /home/customer/www/mysite/public_html/wp-content/plugins/woocommerce/includes/admin/meta-boxes/views/html-order-shipping.php(53):do_action('woocommerce_adm ... ',NULL,Object(WC_Order_Item_Shipping),26)#4 /home/customer/www/mysite/public_html/wp-content/plugins/woocommerce/includes/admin/meta-boxes/views/html-order-items.php( 73):include('/ home / customer / ...')#5 / home / customer / www / mysite /home/customer/www/mysite/public_html/wp-content/themes/mytheme/functions.ph p在第1237行

functions.php的1237行是:

$colour = $_product->get_attribute( 'colour' );

如上所述。

1 个答案:

答案 0 :(得分:0)

这对我有用:

add_action('woocommerce_admin_order_item_values', 'my_woocommerce_admin_order_item_values', 10, 3);
function my_woocommerce_admin_order_item_values($_product, $item, $item_id = null) {

    $colour = get_the_terms( $_product->post->ID, 'pa_colour');
    echo '<td>' . $colour[0]->name . '</td>';
}

必须遵循分类法而不是get_attribute()。感谢这篇文章:

show product meta in order items table in Order Details