WordPress cómo anular la función get_order_report_data de wc_admin_report

2 minutos de lectura

avatar de usuario
FamosoWolluf

Quiero cambiar una parte del get_order_report_data() función dentro class-wc-admin-report.php sin tocar el núcleo.

Me gustaría cambiar el filtro de estado del pedido, ahora mismo es:

$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' ) ) ) . "')
            ";

Y quiero cambiar el término.slug a custom_status.

No sé cómo hacer esto con un complemento o algo así.

Esta pregunta parece un poco confusa, pero aquí está mi mejor interpretación.

Si desea agregar un estado personalizado para capturar en la consulta, escriba una función de filtro como esta:

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

Más adelante en la función, todos los estados en esa matriz se agregan ‘wc-‘ a sus valores para la cadena de consulta real. Entonces necesitarás tu estado para tener ese prefijo. O… puede modificar la cadena de consulta con un filtro posterior:

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

Todo este código de filtro se agrega a su tema functions.php o código de complemento personalizado.

avatar de usuario
nevio

Los filtros se aplican aquí, lo que le permitirá modificar term.slug como quieras.

En un complemento personalizado (o funciones.php de su tema), agregue 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');

Leer más sobre add_filter() en el códice.

  • No pude encontrar un filtro llamado ‘get_order_report_data’. ¿Me estoy perdiendo de algo?

    –James Jones

    14 de enero de 2016 a las 15:09

  • @JamesJones… No tengo idea de dónde salió eso. Debería haber sido el filtro de la pregunta del OP.

    – rnevio

    14 de enero de 2016 a las 15:11

  • Oh por supuesto. Jaja, no confiaría en la pregunta de OP. Parecen los desvaríos de un loco.

    –James Jones

    14 de enero de 2016 a las 15:13

¿Ha sido útil esta solución?