【问题标题】:Add value to custom column on customer's orders page in woocommerce为 woocommerce 中客户订单页面上的自定义列添加价值
【发布时间】:2020-01-16 03:02:55
【问题描述】:

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

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

这是我的代码:

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;
}

结果截图:

【问题讨论】:

    标签: php wordpress woocommerce account orders


    【解决方案1】:

    你已经很近了……

    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 行(就在“订单号”代码之后)您将插入以下内容,您将能够添加一些特定内容:

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

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


    How to get WooCommerce order details

    【讨论】:

      【解决方案2】:

      接受的答案只是部分正确。通过过滤器添加列很好,但填充列最好通过操作挂钩完成。这是干净的,并且与通过过滤器添加的列最匹配。在通过子主题作品编辑 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;
      }
      

      see this similar question, best answer by Misha

      【讨论】:

        【解决方案3】:

        尝试使用这个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' );
        

        【讨论】:

        • 感谢 nikita,但我希望将订单的产品详细信息添加到新创建的列(详细信息)中。 @nikita
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多