【问题标题】:WooCommerce show custom columnWooCommerce 显示自定义列
【发布时间】:2012-12-03 12:22:01
【问题描述】:

我想在 WooCommerce 的后端显示一个额外的列(在订单概览中)。 该列应包含我已定义的自定义字段(交货日期)。

如何做到这一点?

【问题讨论】:

    标签: wordpress woocommerce


    【解决方案1】:

    如果有人仍然需要它 - 有关如何在 Woocommerce 订单列表中添加新列的说明。无需取消设置默认列,只需将其添加到您的 functions.php 中,您的代码将可用于更新。

    1。定义列位置和名称

    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'] );
    
        //edit this for you column(s)
        //all of your columns will be added before the actions column
        $new_columns['MY_COLUMN_ID_1'] = 'MY_COLUMN_1_TITLE';
        $new_columns['MY_COLUMN_ID_2'] = 'MY_COLUMN_2_TITLE';
        //stop editing
    
        $new_columns['order_actions'] = $columns['order_actions'];
        return $new_columns;
    }
    

    2。对于每个自定义列,显示值

    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 );
    
        //start editing, I was saving my fields for the orders as custom post meta
        //if you did the same, follow this code
        if ( $column == 'MY_COLUMN_ID_1' ) {    
            echo (isset($data['MY_COLUMN_1_POST_META_ID']) ? $data['MY_COLUMN_1_POST_META_ID'] : '');
        }
        if ( $column == 'MY_COLUMN_ID_2' ) {    
            echo (isset($data['MY_COLUMN_2_POST_META_ID']) ? $data['MY_COLUMN_2_POST_META_ID'] : '');
        }
        //stop editing
    }
    

    3。 (可选)使列可排序的函数

    add_filter( "manage_edit-shop_order_sortable_columns", 'MY_COLUMNS_SORT_FUNCTION' );
    function MY_COLUMNS_SORT_FUNCTION( $columns ) {
        $custom = array(
            //start editing
    
            'MY_COLUMN_ID_1'    => 'MY_COLUMN_1_POST_META_ID',
            'MY_COLUMN_ID_2'    => 'MY_COLUMN_2_POST_META_ID'
    
            //stop editing
        );
        return wp_parse_args( $custom, $columns );
    }
    

    【讨论】:

    • 很好解释的答案。第一个示例中缺少分号
    • 你知道这在 WooCommerce 2.1.3 中是否仍然有效吗?我已经尝试过了,但它似乎不起作用;没有添加自定义列。 似乎正在应用过滤器;如果我将die() 放入函数中,则不会创建任何列,除此之外我无法获得任何更改。
    • @Dre 第一个过滤器需要比默认值 10 稍高的优先级。当我从插件运行它时,它 11 工作:add_filter( 'manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION', 11 );
    • 可能无法正常工作,因为 WooCommerce 故意更新和更改了他们的代码,试图通过为此确切结果收取 49 美元来敲诈我们所有人。 woothemes.com/products/admin-custom-order-fields
    • +2 非常好的答案。可选步骤 3 可以正常工作(运行最新的 WooCommerce)
    【解决方案2】:

    在woo-commerce订单表中添加新列优惠券并根据订单获取所有优惠券代码。你需要复制并粘贴到你的function.php中。

    add_filter('manage_edit-shop_order_columns', 'custom_shop_order_column', 11);
    
    function custom_shop_order_column($columns) {
        //add columns
        $columns['my-column1'] = __('Coupons Code', 'theme_slug');
        return $columns;
    }
    
    // adding the data for each orders by column (example)
    add_action('manage_shop_order_posts_custom_column', 'cbsp_credit_details', 10, 2);
    
    function cbsp_credit_details($column) {
        global $post, $woocommerce, $the_order;
        $order_id = $the_order->id;
    
        switch ($column) {
            case 'my-column1' :
                // $myVarOne = wc_get_order_item_meta( $order_id, 15, true );
                if ($the_order->get_used_coupons()) {
    
                    $coupons_count = count($the_order->get_used_coupons());
                    foreach ($the_order->get_used_coupons() as $coupon) {
                        echo $coupon;
    
                        $i++;
                    }
    
                    echo '</p>';
                }
               // echo $myVarOne;
                break;
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,你会得到你的解决方案,只需在 function.php 文件中编写以下代码。

      add_filter( 'manage_edit-shop_order_columns','your_function_name',10 );
      function your_function_name($columns){
              $columns['delivery_date'] = __('Delivery date','textdomain');
              return $columns;
          }
      add_action( 'manage_shop_order_posts_custom_column','your_other_function_name',20 );
      function  your_other_function_name($column)
      {
          swith($column)
          {
              case 'delivery_date':  // your custom code here and do what you want.
          }
      }
      

      【讨论】:

        【解决方案4】:

        以下适用于 WooCommerce 2.6.2。 你应该研究两个新的钩子:

        1。定义列标题

        add_filter('woocommerce_admin_order_item_headers', 'so13683162_headers');
        function so13683162_headers($order) {
            echo "<th>FIELD1</th>";
        }
        

        2。按行填充值

        add_filter('woocommerce_admin_order_item_values', 'so13683162_values');
        function so13683162_values($product) {
            if (isset($product -> id)) {
                $attrs = get_post_meta($product -> id, "_product_attributes", true);
                echo "<td>" . $attrs["FIELD1"]["value"] . "</td>";
            }
        }
        

        【讨论】:

        • 这不会将列添加到列表中,它只会将列添加到详细视图。
        【解决方案5】:

        我现在遇到了 Woocommerce。添加了一个自定义字段个人注册号 - 现在希望它显示在订单概览页面中。

        我已设法添加该列 - 但仍然无法获取每个订单的自定义字段的值。

        这是我所做的:

        // Removed Existing Order Page collumns
        remove_filter('manage_edit-shop_order_columns', 'woocommerce_edit_order_columns');
        
        // Added My own filter to Show the PRN - Personal Registration field
        add_filter('manage_edit-shop_order_columns', 'omak_edit_order_columns');
        
        // The omak_edit_order_columns definition
        /*** Taken from admin/post_types/shop_order.php ***/
        function omak_edit_order_columns($columns){
            global $woocommerce;
        
            $columns = array();
        
            $columns["cb"]              = "<input type=\"checkbox\" />";
            $columns["order_status"]        = __( 'Status', 'woocommerce' );    
            $columns["order_title"]         = __( 'Order', 'woocommerce' );
            $columns["order_prn"]           = __( 'PRN', 'woocommerce' );    // This is the line which added the column after the Title Column
            $columns["billing_address"]     = __( 'Billing', 'woocommerce' );
            $columns["shipping_address"]    = __( 'Shipping', 'woocommerce' );
            $columns["total_cost"]      = __( 'Order Total', 'woocommerce' );
            $columns["order_comments"]  = '<img alt="' . esc_attr__( 'Order Notes', 'woocommerce' ) . '" src="' . $woocommerce->plugin_url() . '/assets/images/order-notes_head.png" class="tips" data-tip="' . __( 'Order Notes', 'woocommerce' ) . '" width="12" height="12" />';
        
            $columns["note"]                = '<img src="' . $woocommerce->plugin_url() . '/assets/images/note_head.png" alt="' . __( 'Customer Notes', 'woocommerce' ) . '" class="tips" data-tip="' . __( 'Customer Notes', 'woocommerce' ) . '" width="12" height="12" />';
        
            $columns["order_date"]          = __( 'Date', 'woocommerce' );
            $columns["order_actions"]       = __( 'Actions', 'woocommerce' );
        
            return $columns;
        }
        

        如果对你有帮助,请告诉我...

        我要处理如何获取每个订单的值。

        如评论:函数定义存在于 WooCommerce 插件的 shop_order.php 中。 让我知道是否有人解决了它.. 或者知道怎么做。

        谢谢, (抱歉,正忙于某事,无法回读以检查错误)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-12
          • 2019-07-21
          • 2018-12-03
          • 2021-10-06
          • 2016-11-02
          • 2018-08-26
          • 2021-05-14
          相关资源
          最近更新 更多