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

Siguientes Documentos Técnicos