Edición: Referencia para Desarrolladores — Free (v2.0+) y PRO (v5.0+) | Tipo: WordPress Actions & Filters API
Puedes extender o personalizar el comportamiento de Modal COD Form sin modificar los archivos núcleo del plugin utilizando los siguientes Action Hooks (do_action) y Filter Hooks (apply_filters) desde un plugin personalizado, un mu-plugin o el plugin Code Snippets.
1. Action Hooks Emitidos por el Plugin (Puntos de Extensión)
| Action Hook | Edición | Parámetros Recibidos | Archivo Origen y Momento de Disparo |
|---|---|---|---|
cod_order_finalized |
PRO v5.0 | int $order_id, WC_Order $order |
Disparado en PRCOD_Order_Creator::finalize_order() inmediatamente después de guardar la orden COD (con sus ofertas, envíos y upsells) y antes de vaciar el carrito. |
modalcodf_order_finalized |
Free v2.0 | int $order_id, WC_Order $order |
Equivalente en la edición gratuita dentro de MODALCODF_Order_Creator::modalcodf_finalize_order(). |
cod_cart_abandoned |
PRO v5.0 | int $post_id |
Disparado por PRCOD_Abandoned_Cart_Handler::convert_pending_to_abandoned() cuando un carrito supera el tiempo de corte y pasa a estado abandoned. |
cod_cart_recovered |
PRO v5.0 | int $post_id, int $order_id |
Disparado cuando un carrito previamente abandonado se convierte en una orden completada. |
cod_cart_blocked |
PRO v5.0 | int $post_id, string $block_reason |
Disparado en PRCOD_Fraud_Prevention_Validator::save_blocked_cart() cuando una regla antifraude detiene un intento de compra. |
mcfp_fs_loaded |
Free + PRO | (ninguno) | Disparado justo después de inicializar la instancia global del SDK de Freemius (mcfp_fs()). |
Ejemplo Práctico 1: Ejecutar código propio al crearse un pedido COD (Compatible con Free y PRO)
/**
* Enviar datos o agregar un metadato personalizado al finalizar una orden en Modal COD Form
*/
function mi_tienda_procesar_orden_cod( $order_id, $order ) {
if ( ! $order instanceof WC_Order ) {
$order = wc_get_order( $order_id );
}
if ( ! $order ) {
return;
}
// Ejemplo: Guardar una marca de tiempo o enviar a un ERP externo
$order->update_meta_data( '_origen_modal_cod', 'confirmado_en_modal' );
$order->save();
}
add_action( 'cod_order_finalized', 'mi_tienda_procesar_orden_cod', 10, 2 );
add_action( 'modalcodf_order_finalized', 'mi_tienda_procesar_orden_cod', 10, 2 );
—
2. Filter Hooks para Personalizar el Botón y las Ubicaciones Geográficas
| Filter Hook | Edición | Parámetros | Descripción Técnica |
|---|---|---|---|
prcod_pre_render_payment_button |
PRO v5.0 | mixed $pre_render, WC_Product $product, array $overrides, string $sticky |
Si devuelve un valor distinto de null (por ejemplo un string HTML o string vacío ""), intercepta el renderizado del botón COD en templates/payment-button.php e imprime ese valor en su lugar. |
prcod_can_check_plugin_updates |
PRO v5.0 | bool $can_check |
Permite controlar si el verificador de actualizaciones consulta nuevas versiones remotas. |
cod_form_{country}_states |
PRO v5.0 | array $states |
Filtra el arreglo asociativo ['CODIGO' => 'Nombre Departamento'] del país activo (ej. cod_form_colombia_states, cod_form_mexico_states, cod_form_ecuador_states, cod_form_peru_states, cod_form_chile_states, cod_form_costa_rica_states). |
cod_form_{country}_places |
PRO v5.0 | array $places |
Filtra el arreglo de ciudades por código de departamento (ej. cod_form_colombia_places, cod_form_mexico_places). Nota: Como los archivos geográficos se cargan al incluirse el plugin, registra estos filtros en un mu-plugin o snippet con ejecución temprana. |
Ejemplo Práctico 2: Ocultar el botón COD en horarios nocturnos o para una categoría específica
/**
* Interceptar el renderizado del botón COD usando prcod_pre_render_payment_button
*/
add_filter( 'prcod_pre_render_payment_button', function( $pre_render, $product, $overrides, $sticky ) {
// Si ya fue interceptado (ej. por licencia inactiva), respetar el valor actual
if ( null !== $pre_render ) {
return $pre_render;
}
// Ejemplo: No mostrar el botón COD si el producto cuesta menos de $20.000
if ( $product && (float) $product->get_price() < 20000 ) {
return ''; // Devuelve cadena vacía para no mostrar el botón COD
}
return null; // Continúa con el renderizado normal del botón
}, 20, 4 );
Ejemplo Práctico 3: Agregar un municipio personalizado al listado de Colombia
/**
* Agregar una localidad o corregimiento especial al departamento de Antioquia (ANT)
* (Colocar en wp-content/mu-plugins/custom-cod-places.php)
*/
add_filter( 'cod_form_colombia_places', function( $places ) {
if ( isset( $places['ANT'] ) && is_array( $places['ANT'] ) ) {
$places['ANT'][] = 'Santa Elena (Medellín)';
}
return $places;
} );