覆盖复杂过滤器挂钩中的文本

时间:2021-03-31 作者:Swastika R

我对PHP和WordPress非常陌生。我只学习了过滤器挂钩的基本知识,但这个看起来有点复杂。我想替换文本This action will let you pay a deposit offor this product 保留传递给的值%s. 我希望有人能帮助我。非常感谢。

<?php
    echo wp_kses_post( apply_filters( \'yith_wcdp_deposit_only_message\', sprintf( __( \'This action will let you pay a deposit of <span class="deposit-price">%s</span> for this product\', \'yith-woocommerce-deposits-and-down-payments\' ), wc_price( $deposit_value ) ), $deposit_value ) );
?>

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

如果你把它分解一下,就会更容易理解。您问题中的代码与此完全相同:

$message = sprintf( __( \'This action will let you pay a deposit of <span class="deposit-price">%s</span> for this product\', \'yith-woocommerce-deposits-and-down-payments\' ), wc_price( $deposit_value ) );
$message = apply_filters( \'yith_wcdp_deposit_only_message\', $message, $deposit_value );

echo wp_kses_post( $message );
如果你这样看,你会发现yith_wcdp_deposit_only_message%s 已替换为wc_price( $deposit_value ).

但是,您还可以看到过滤器接收$deposit_value 变量作为其第二个参数,这意味着您可以在过滤器中使用它:

<?php
add_filter(
    \'yith_wcdp_deposit_only_message\',
    function( $message, $deposit_value ) {
        $message = \'This is my new message, and the deposit value is \' . wc_price( $deposit_value );
         
        return $message;
    },
    10,
    2 // MUST be 2 to be able to use $deposit_value.
);

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的