Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472

Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472
为WooCommerce后台订单列表添加按自定义字段筛选过滤订单的功能 - 微码盒
!
也想出现在这里? 联系我们
广告位

为WooCommerce后台订单列表添加按自定义字段筛选过滤订单的功能

在 WooCommerce 后台订单列表中,我们可以按照订单状态、订单日期、订单客户来筛选订单,有些情况下,按照 WooCommerce 订单的自定义字段来筛选订单是很有必要的,本文我将带大家了解一下怎么为 WooCommerce 后台订单列表添加按自定义字段来过滤订单的功能,完成后的效果图如下:

第一步

在订单筛选表单中添加一个自定义字段下拉输入

在这一步中,我们使用 woocommerce_order_list_table_restrict_manage_orders 和 restrict_manage_posts 这两个 Hook,第一个是针对高性能存储数据类型的订单,第二个是针对自定义文章类型数据类型的订单。两个 Hook 的参数是一样的,所以我们可以把一个函数同时挂载到这两个 Hook 上面。

  1. <?php
  2. add_action( 'woocommerce_order_list_table_restrict_manage_orders', 'wprs_order_filter', 25, 2 );
  3. add_action( 'restrict_manage_posts', 'wprs_order_filter', 25, 2 );
  4. function wprs_order_filter( $post_type, $which ) {
  5. if( 'shop_order' !== $post_type ) {
  6. return;
  7. }
  8. $rudr_custom_field = isset( $_GET[ 'rudr_custom_field' ] ) ? $_GET[ 'rudr_custom_field' ] : '';
  9. ?>
  10. <select name="rudr_custom_field">
  11. <option value="">Custom field</option>
  12. <option value="value-1"<?php selected( $rudr_custom_field, 'value-1' ) ?>>Value 1</option>
  13. <option value="value-2"<?php selected( $rudr_custom_field, 'value-2' ) ?>>Value 2</option>
  14. </select>
  15. <?php
  16. }

第二步

添加订单筛选逻辑到订单查询过程中

通过前面的两个 Hook,我们把自定义字段字段筛选输入添加到了订单过滤表单中,这一步,我们需要添加订单筛选逻辑到订单查询过程中,来实现订单筛选。

这一步,我们也需要使用两个 Hook:

woocommerce_order_data_store_cpt_get_orders_query:用来筛选高性能数据类型的订单。

pre_get_posts:用来筛选文章类型数据的订单。

第一个 Hook 示例

  1. add_action( 'woocommerce_order_list_table_prepare_items_query_args', function( $query_args ) {
  2. if( isset( $_GET[ 'wprs_custom_field' ] ) && $_GET[ 'wprs_custom_field' ] ) {
  3. $query_args[ 'meta_query' ] = array(
  4. array(
  5. 'key' => 'wprs_custom_field',
  6. 'value' => $_GET[ 'wprs_custom_field' ],
  7. )
  8. );
  9. }
  10. return $query_args;
  11. } );

第二个 Hook 示例

  1. add_action( 'pre_get_posts', function( $query ) {
  2. if( ! is_admin() ) {
  3. return;
  4. }
  5. global $pagenow;
  6. // 如果不是订单列表页面,跳过后面的步骤,直接返回
  7. if( 'edit.php' !== $pagenow || 'shop_order' !== $query->get( 'post_type' ) ) {
  8. return;
  9. }
  10. if( isset( $_GET[ 'wprs_custom_field' ] ) && $_GET[ 'wprs_custom_field' ] ) {
  11. // 第一种写法
  12. // $query->set( 'meta_key', 'wprs_custom_field' );
  13. // $query->set( 'meta_value', $_GET[ 'wprs_custom_field' ] );
  14. $query->set( 'meta_query', array(
  15. array(
  16. 'key' => 'wprs_custom_field',
  17. 'value' => $_GET[ 'wprs_custom_field' ],
  18. )
  19. ) );
  20. }
  21. } );

完成了这一步,我们就实现了一个完整的按自定义筛选 WooCommerce 订单的功能,由于目前流行的 WooCommerce 版本同时支持文章类型数据的订单和高性能存储数据类型的订单,实现这个功能时,我们需要同时支持这两种数据类型,来实现此功能最大的兼容性。

完成了这一步,我们就实现了一个完整的按自定义筛选 WooCommerce 订单的功能,由于目前流行的 WooCommerce 版本同时支持文章类型数据的订单和高性能存储数据类型的订单,实现这个功能时,我们需要同时支持这两种数据类型,来实现此功能最大的兼容性。

如果需要筛选的自定义字段数据选项比较多,放到下拉选择里面用户体验可能不会太好,我们还可以考虑使用订单搜索的功能来实现,请参考本站之前的文章:允许用户在 WooCommerce 中通过搜索订单备注过滤订单。

为 WooCommerce 后台订单列表添加按自定义字段筛选过滤订单的功能

已有 1 人购买
    此资源下载价格5元立即购买(VIP 免费)立即升级
查看演示升级 VIP立刻购买

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

实现WordPress站内搜索结果URL伪静态化

2024-5-31 10:22:15

WordPress教程

WooCommerce 购物车金额为 0 时,免支付直接下单

2024-6-2 7:27:31

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索