我需要在报告标签中插入last4Days选项。 我已经通过更改原始文件完成了这一点,但WooCommerce在一段时间后不断更改为原始文件。 所以我试图找到一个过滤器来做到这一点,但我找不到它。
答案 0 :(得分:1)
不幸的是,Woo团队没有做用户友好的事情,并在报告长度参数上包含一个过滤器。缺少一些元编程魔法(比如在加载之前动态覆盖.php文件的文本中的参数,非常危险)我能看到的唯一方法是将实例化阶梯上升到生成报告的点,并且然后根据您使用的那个调用自定义类。幸运的是,WooCommerce确实为报告文件的路径提供了一个过滤器,它位于wc-class-admin-reports.php
,钩子被称为wc_admin_reports_path
。如果我们扩展优惠券使用情况报告,它看起来有点像:
add_filter('wc_admin_reports_path', 'redirect_coupon_report_class_path', 10, 2);
function redirect_coupon_report_class_path($path, $report_name, $class) {
if($report_name == 'coupon-usage') {
$path = 'path/to/my/custom/class.php';
}
return $path;
}
您需要做的是复制您尝试更改的报告的类,并将其粘贴到主题或插件中的某个位置。然后,添加一个调用函数的过滤器,该函数将检查传入的报表是否是您要修改的报表,并将其重定向到您的自定义类。在您的自定义类中,您可以执行任何您想要的操作,但与任何覆盖一样,您将希望在每次更新时看到它们在该文件中更改的内容。您可以像这样扩展类:
class WC_Report_Coupon_Usage_Custom extends WC_Report_Coupon_Usage {
// Call the parent constructor
function __construct() {
parent::__construct();
}
// Add a method that you would have previously overwritten directly in the plugin file
public function output_report() {
$ranges = array(
'year' => __( 'Year', 'woocommerce' ),
'last_month' => __( 'Last Month', 'woocommerce' ),
'month' => __( 'This Month', 'woocommerce' ),
'7day' => __( 'Last 7 Days', 'woocommerce' ),
'4day' => __( 'Last 4 Days', 'woocommerce' )
);
$this->chart_colours = array(
'discount_amount' => '#3498db',
'coupon_count' => '#d4d9dc',
);
$current_range = ! empty( $_GET['range'] ) ? sanitize_text_field( $_GET['range'] ) : '7day';
if ( ! in_array( $current_range, array( 'custom', 'year', 'last_month', 'month', '7day' ) ) ) {
$current_range = '7day';
}
$this->calculate_current_range( $current_range );
include( WC()->plugin_path() . '/includes/admin/views/html-report-by-date.php');
}
}