更改add_filters数组内的函数

时间:2018-10-25 20:37:18

标签: php wordpress

WooCommerce Composite Products插件中,下面是add_filters数组:

        /**
     * Filter front-end params.
     *
     * @param  array  $params
     */
    $params = apply_filters( 'woocommerce_composite_front_end_params', array(
        'small_width_threshold'                 => 450,
        'full_width_threshold'                  => 450,
        'legacy_width_threshold'                => 450,
        'i18n_qty_string'                       => _x( ' × %s', 'qty string', 'woocommerce-composite-products' ),
        'i18n_price_string'                     => _x( ' – %s', 'price suffix', 'woocommerce-composite-products' ),
        'i18n_title_string'                     => sprintf( _x( '%1$s%2$s%3$s', 'title quantity price', 'woocommerce-composite-products' ), '%t', '%q', '%p' ),
        'i18n_selected_product_string'          => sprintf( _x( '%1$s%2$s', 'product title followed by details', 'woocommerce-composite-products' ), '%t', '%m' ),
        'i18n_free'                             => __( 'Free!', 'woocommerce' ),
        'i18n_total'                            => __( 'Total', 'woocommerce-composite-products' ) . ': ',
        'i18n_no_options'                       => __( 'No options available…', 'woocommerce-composite-products' ),
        'i18n_no_selection'                     => __( 'No selection', 'woocommerce-composite-products' ),
        'i18n_no_option'                        => _x( 'No %s', 'dropdown empty-value option: optional selection (%s replaced by component title)','woocommerce-composite-products' ),

等,等等...

我要做的是在两个函数(在本例中为remove_filteri18n_clear_selection)上使用i18n_strikeout_price_string,并更改{{1}的第一个变量}。

我尝试做i18n_no_option,但没有执行任何操作,并尝试使用下面的代码段(来自this StackOverflow page):

remove_filter( 'woocommerce_composite_front_end_params', 'i18n_strikeout_price_string' );

但这只是返回了白页-没有错误或其他任何内容。有没有办法隔离数组中的函数并删除/更改那些函数?

1 个答案:

答案 0 :(得分:0)

请注意,'$ arr'变量将使用传递给'change_composite_product_functions'函数的数据填充。

您的代码部分实际上是用新数组覆盖它。

您要查找阵列键/项目并进行更改/删除。下面是未经测试的简短摘要:

function change_composite_product_functions($arr) {
if (array_key_exists('i18n_stirkeout_price_string', $arr)) unset($arr['i18n_stirkeout_price_string']); // Remove
if (array_key_exists('i18n_no_option', $arr)) $arr['i18n_no_option'] = 'Blah blah this is a test'; // Change
return $arr;
}
add_filter( 'woocommerce_composite_front_end_params', 'change_composite_product_functions', 10, 1 );