2015-08-27 6 views
0

Мне нужно вставить опцию last4Days на вкладке отчетов. Я сделал это, изменив исходные файлы, но WooCommerce через некоторое время переходит к оригиналу. Итак, я попытался найти фильтр, чтобы сделать это, но я не нахожу его.Настройка времени выполнения запросов Woocommerce

ответ

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'); 
    } 

} 
Смежные вопросы