php - 在优惠券设置中添加一个字段并在 Woocommerce 管理订单列表中显示该值
问题描述
我很难让它发挥作用。我有一个想法在我的脑海里:
能够通过一般优惠券选项卡中的额外字段将单个用户分配给优惠券代码,该字段列出未分配给优惠券代码的用户
我不想使用第三方扩展、自定义字段等。我希望我能够通过元数据来做到这一点,但我失败了。不知道如何正确完成。
在订单页面上添加两个额外的列,并显示分配给它的优惠券代码和用户。
在 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"]
我不是在要求现成的解决方案,而是向我展示如何完成它。
提前感谢您的任何帮助。
解决方案
在 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 文件中。测试和工作。
在管理员优惠券单页上:
在管理员编辑订单列表中:
推荐阅读
- javascript - 使用 discord Oauth2 时,如何在我的网站上显示用户名和头像?
- kml - 为什么这个 KmlLayer 示例不能在我的服务器上运行?
- view - .net core mvc:在区域上添加具有 crud 功能的控制器未正确生成代码和链接
- r - 为多个图像对象泛化 magick::image_apend
- javascript - 使用 e.target 时,未定义不是对象
- python - 如何使用 groupby() 函数在 Python 中制作宿舍?
- ruby - 关于在 Ruby 中实现游戏图形的新手问题
- heroku - 如何在heroku中添加Mozilla firefox
- sharepoint - 如何在没有 spfx 的 sharepoint 在线命令栏上创建自定义操作按钮?
- python - 在不分解关键短语的情况下进行标记