在 woocommerce 中为客户订单页面上的自定义列添加值

Add value to custom column on customer's orders page in woocommerce

我试图将新列添加到客户最近订单的订单页面 table,新列应该显示产品的详细信息,例如产品名称和描述。

尝试了不同的解决方案,幸运的是添加了列名,但无法将值添加到列中。

这是我的代码:

add_filter( 'woocommerce_account_orders_columns', 'new_orders_columns' );
function new_orders_columns( $columns = array() ) {
// Hide the columns
if( isset($columns['order-total']) ) {
    unset( $columns['order-status'] );
    unset( $columns['order-total'] );
    unset( $columns['order-actions'] );
}
// Add new columns
//this is my custom column order details
$columns['order-detail'] = __( 'Details', 'woocommerce' );
$columns['order-status'] = __( 'Status', 'woocommerce' );
$columns['order-total'] = __( 'Total', 'woocommerce' );
$columns['order-actions'] = __( ' ');

return $columns;
}

结果截图:

尝试使用这个code

<?php
// ------------------
// 1. Register new endpoint to use for My Account page
// Note: Resave Permalinks or it will give 404 error

function bbloomer_add_premium_support_endpoint() {
  add_rewrite_endpoint( 'premium-support', EP_ROOT | EP_PAGES );
}

add_action( 'init', 'bbloomer_add_premium_support_endpoint' );


// ------------------
// 2. Add new query var

function bbloomer_premium_support_query_vars( $vars ) {
  $vars[] = 'premium-support';
  return $vars;
}

add_filter( 'query_vars', 'bbloomer_premium_support_query_vars', 0 );


// ------------------
// 3. Insert the new endpoint into the My Account menu

function bbloomer_add_premium_support_link_my_account( $items ) {
  $items['premium-support'] = 'Premium Support';
  return $items;
}

add_filter( 'woocommerce_account_menu_items', 'bbloomer_add_premium_support_link_my_account' );


// ------------------
// 4. Add content to the new endpoint

function bbloomer_premium_support_content() {
  echo '<h3>Premium WooCommerce Support</h3><p>Welcome to the WooCommerce support area. As a premium customer, you can submit a ticket should you have any WooCommerce issues with your website, snippets or customization. <i>Please contact your theme/plugin developer for theme/plugin-related support.</i></p>';
  echo do_shortcode( ' /* your shortcode here */ ' );
}

add_action( 'woocommerce_account_premium-support_endpoint', 'bbloomer_premium_support_content' );

你离…很近了

1) 在特定位置插入新列(另一种方式):

add_filter( 'woocommerce_account_orders_columns', 'add_custom_account_orders_column', 10, 1 );
function add_custom_account_orders_column( $columns ) {
    $ordered_columns = array();

    // Inserting a new column in a specific location
    $ordered_columns['order-number'] = $columns['order-number'];
    $ordered_columns['order-date'] = $columns['order-date'];
    $ordered_columns['order-details'] =  __( 'Details', 'woocommerce' ); // <== New column
    $ordered_columns['order-status'] = $columns['order-status'];
    $ordered_columns['order-total'] = $columns['order-total'];
    $ordered_columns['order-actions'] = $columns['order-actions'];

    return $ordered_columns;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。

经过测试并有效。


2) 在此新列中显示数据 (编辑 myaccount/orders.php 模板):

您将需要 override through your active child thememyaccount/orders.php WooCommerce 模板。

在第 56 行(就在 'order-number' 代码之后),您将插入以下内容,您将能够添加一些特定内容:

<?php elseif ( 'order-details' === $column_id ) : ?>
     <?php 
         // HERE GOES YOUR CUSTOM CODE (DISPLAYED CONTENT)
     ?>

您可以使用可用的 WC_Order 对象 $order


已接受的答案仅部分正确。通过过滤器添加列很好,但填充列最好通过操作挂钩完成。这是干净的,最适合通过过滤器添加的列。在通过子主题作品编辑 orders.php 页面时,这将导致未来在 woocommerce 更新后进行维护更改此页面,使子主题版本过时。

要将您的内容添加到列中,请在 functions.php 中的过滤器旁边创建一个操作挂钩。 (或者更好的是在插件中!)

add_action( 'woocommerce_my_account_my_orders_column_order-detail' , 'your_function_name2',10,1 ); 
//'woocommerce_my_account_my_orders_column_<column_id>'
function your_function_name2( $order ) {

        // do stuff, ex: get_post_meta( $post->ID, 'key', true );

}

add_filter( 'woocommerce_account_orders_columns', 'new_orders_columns',10,1 );
function new_orders_columns( $columns) {

    // Add new column. Kept simple to play nice with other filters.
    $columns['order-detail'] = __( 'Details', 'woocommerce' );   

    return $columns;
}