2015-06-09 20 views
13

Desidero modificare una parte della funzione get_order_report_data() all'interno di class-wc-admin-report.php senza toccare il core.Wordpress come eseguire l'override della funzione get_order_report_data da wc_admin_report

Vorrei cambiare il filtro stato dell'ordine, in questo momento è:

$query['where'] = " 
      WHERE posts.post_type  = 'shop_order' 
      AND  posts.post_status = 'publish' 
      AND  tax.taxonomy  = 'shop_order_status' 
      AND  term.slug   IN ('" . implode("','", apply_filters('woocommerce_reports_order_statuses', array('completed', 'processing', 'on-hold'))) . "') 
      "; 

E io voglio cambiare il term.slug-custom_status.

faccio non ora come fare questo con un plugin o qualcosa di simile

risposta

5

Questa domanda sembra un po 'confusa, ma qui è la mia migliore interpretazione.

Se si desidera aggiungere uno stato personalizzato per catturare nella query scrivere una funzione di filtro come questo:

function woocommerce_reports_order_statuses_filter($order_status){ 
    $order_status[] = 'custom_status'; 
    return $order_status; 
} 
add_filter('woocommerce_reports_order_statuses', 'woocommerce_reports_order_statuses_filter'); 

Più tardi nella funzione di tutti gli stati di tale matrice ottenere 'WC-' aggiunto alla loro valori per la stringa di query effettiva. Quindi avrai bisogno del tuo stato per avere quel prefisso. Oppure ... è possibile modificare la querystring con un filtro più tardi:

function woocommerce_reports_get_order_report_query_filter($query){ 
    $custom_status = 'custom_status'; 
    $query['where'] = substr_replace($query['where'], $custom_status , strpos($query['where'], 'wc-' . $custom_status), strlen('wc-' . $custom_status) ); 
    return $query; 
} 
add_filter('woocommerce_reports_get_order_report_query', 'woocommerce_reports_get_order_report_query_filter'); 

Tutto questo codice di filtro viene aggiunto al codice tema functions.php o plugin personalizzato.

1

filtri vengono applicati qui, che vi permetterà di modificare term.slug tuttavia vuoi.

In un plugin personalizzato (o functions.php del vostro tema), aggiungere un filtro:

function override_order_report_data_terms($slug_array) { 
    return array('custom_status'); 
} 
add_filter('woocommerce_reports_order_statuses', 'override_order_report_data_terms'); 

Per saperne di più add_filter() in the Codex.

+0

Impossibile trovare un filtro chiamato "get_order_report_data". Mi sto perdendo qualcosa? –

+0

@JamesJones ... Non ho idea di dove sia venuto. Doveva essere il filtro dalla domanda dell'OP. – rnevius

+0

Oh, certo. Ahah non mi fiderei della domanda dell'OP. Sembrano i deliri di un pazzo. –