View Categories

Bulk Price Editor: Developer Hooks and Filters Reference

Bulk Price Editor developer reference: filters and options #

This reference lists the code hooks and stored options in the Price Update: Bulk Pricing Editor for WooCommerce. It is aimed at developers extending the plugin or reading its stored data. All names are taken directly from the source of Pro v2.0.4.

Filters #

The plugin exposes four filters. Three shape the price math and product query; one is the internal Pro gate.

Filter Arguments Purpose
alg_wc_bpc_round_price $price, $round_function, $round_coef Rounds the modified price. Pro registers the default handler; without it, the Rounding function has no effect.
alg_wc_bpc_pretty_price $price, $threshold Applies the charm-price (“pretty prices”) shaping. Runs only when the threshold is above 0.
alg_wc_bpc_product_query $args, $taxonomy, $terms Adds a tax query to the product WP_Query for tag and attribute filtering. Pro registers the default handler.
alg_wc_bpc_settings $value, $type, $args Internal Pro gate. Pro returns an empty string to enable the Pro fields; without Pro it returns the passed default (the disabled attribute or an upsell note).

How the price filters fire #

Inside Alg_WC_Bulk_Price_Converter_Core::change_price(), after the arithmetic and before the final store rounding:

// Rounding (only when a rounding function is chosen)
if ( 'none' != $this->atts['round_function'] ) {
    $modified_price = apply_filters(
        'alg_wc_bpc_round_price',
        $modified_price,
        $this->atts['round_function'],
        $this->atts['round_coef']
    );
}
// ... round to woocommerce_price_num_decimals ...
// Pretty price (only when threshold > 0)
if ( $this->atts['pretty_prices_threshold'] > 0 ) {
    $modified_price = apply_filters(
        'alg_wc_bpc_pretty_price',
        $modified_price,
        $this->atts['pretty_prices_threshold']
    );
}

The Pro handler for alg_wc_bpc_round_price is simply:

function round_price( $price, $round_function, $round_coef ) {
    return $round_function( $price / $round_coef ) * $round_coef;
}

So $round_function is one of the PHP callables round, floor, or ceil, and the price is snapped to the nearest multiple of $round_coef.

Example: custom rounding to the nearest 0.95 #

To force all corrected prices to end in .95 regardless of the coefficient set in the UI:

add_filter( 'alg_wc_bpc_round_price', function( $price, $fn, $coef ) {
    return floor( $price ) + 0.95;
}, 20, 3 );

Example: extend the product query #

The plugin passes tag and attribute filters through alg_wc_bpc_product_query. You can add your own conditions to the same WP_Query args:

add_filter( 'alg_wc_bpc_product_query', function( $args, $taxonomy, $terms ) {
    // Only touch published products, for example.
    $args['post_status'] = 'publish';
    return $args;
}, 20, 3 );

Stored options #

Settings are plain options, read with get_option(). There are no custom tables.

Option Default Meaning
alg_wc_bulk_price_converter_step 6 Number of decimals; sets the step of the tool’s number inputs (1 / pow(10, value)).
alg_wc_bulk_price_converter_block_size 1024 Products loaded per WP_Query page during a run.
alg_wc_bulk_price_converter_time_limit -1 Seconds per query via set_time_limit(). 0 = no limit, -1 = server default.
alg_wc_bulk_price_converter_version current version Tracks the installed version for the update routine.

How prices are written #

The tool writes prices directly to post meta (_price, _regular_price, _sale_price) with update_post_meta() and then calls wc_delete_product_transients(). It does not go through the WooCommerce CRUD ($product->set_price()), so if you rely on the WooCommerce data store or the product meta lookup table, plan to resync after a large run. This is the mechanism to be aware of when reading prices your own integration depends on.

Need a hand? #

For extension questions, our team answers on the Bulk Price Editor support forum.