在优惠券设置中添加一个字段,并在Woocommerce管理员订单列表上显示该值

时间:2020-07-30 18:10:47

标签: php wordpress woocommerce orders coupon

我要使它正常工作有些困难。 我脑子里有了一个主意:

  1. 能够通过“通用优惠券”标签中的额外字段为单个用户分配优惠券代码,该字段将未分配的用户列出为优惠券代码

    我不想使用第三方扩展名,自定义字段等。我希望可以通过元数据来做到这一点,但失败了。不确定如何正确完成它。

  2. 在订单页面上增加了两列,并显示优惠券代码和分配给它的用户。

    一段时间后,在phpstorm中阅读文档和xDebugging后,我也未能完成它。

     function order_sellers_and_coupons_columns_values($column)
     {
        global $post, $the_order;
    
        if ($column == 'order_coupon_code') {
            $coupons = $the_order->get_used_coupons(); // not sure how to get coupon object by the coupon code
            echo (count($coupons)) ? $coupons[0] : '';
        }
     }
    
     // even though I see the order objects have an items and coupon lines property, 
     // which is an object, i can't get access to it
     $the_order->items["coupon_lines"]
    

我不是在寻求现成的解决方案,而是向我展示如何完成它。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

在WooCommerce管理员单个优惠券页面中,我们为卖方(经销商) 添加了一个额外字段:

// Add a custom field to Admin coupon settings pages
add_action( 'woocommerce_coupon_options', 'add_coupon_text_field', 10 );
function add_coupon_text_field() {
    woocommerce_wp_text_input( array(
        'id'                => 'seller_id',
        'label'             => __( 'Assing a seller (dealer)', 'woocommerce' ),
        'placeholder'       => '',
        'description'       => __( 'Assign a seller / dealer to a coupon', 'woocommerce' ),
        'desc_tip'    => true,

    ) );
}

// Save the custom field value from Admin coupon settings pages
add_action( 'woocommerce_coupon_options_save', 'save_coupon_text_field', 10, 2 );
function save_coupon_text_field( $post_id, $coupon ) {
    if( isset( $_POST['seller_id'] ) ) {
        $coupon->update_meta_data( 'seller_id', sanitize_text_field( $_POST['seller_id'] ) );
        $coupon->save();
    }
}

然后使用以下内容将添加到管理订单中的优惠券代码(在订单中使用时)以及卖方/经销商名称:

// Adding a new column to admin orders list
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column' );
function custom_shop_order_column($columns)
{
    $reordered_columns = array();

    // Inserting columns to a specific location
    foreach( $columns as $key => $column){
        $reordered_columns[$key] = $column;
        if( $key ==  'order_status' ){
            // Inserting after "Status" column
            $reordered_columns['coupons'] = __( 'Coupon','theme_domain');
        }
    }
    return $reordered_columns;
}

// Adding used coupon codes
add_action( 'manage_shop_order_posts_custom_column' , 'custom_orders_list_column_content', 10, 2 );
function custom_orders_list_column_content( $column, $post_id )
{
    global $the_order;

    if ( $column == 'coupons' ) {
        $coupons = (array) $the_order->get_used_coupons();
        $dealers = [];

        foreach( $coupons as $coupon_code ) {
            $coupon    = new WC_Coupon( $coupon_code );
            $dealers[] = $coupon->get_meta('seller_id');
        }

        if( count($coupons) > 0 )
            echo implode( ', ', $coupons );

        if( count($dealers) > 0 )
            echo '<br><small>(' . implode( ', ', $dealers ) . ')</small>';
    }
}

所有代码都放在活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。


在管理员优惠券单页上:

enter image description here

在管理员编辑订单列表上:

enter image description here