do_action使用T_OBJECT_OPERATOR( - >)PHP传递变量

时间:2017-01-25 13:18:14

标签: php wordpress

我有一个使用自定义结帐表单的插件。在此结帐表单中,有一个“创建帐户”复选框,与默认的Wordpress复选框相同。我正在尝试编写一些代码来添加另一个复选框,允许用户为这个新帐户选择一个角色。创建此结帐表单的插件有一个我想要挂钩的do_action。它甚至还有我需要的变量。可悲的是,我不确定如何使用它。

do_action:

do_action( 'woocommerce_after_checkout_validation', $woocommerce_checkout->posted );

如您所见,这会使用$woocommerce_checkout->posted

我的代码有以下

add_action('woocommerce_after_checkout_validation', 'validate_professional_field' 10,1);

在我的函数中,我尝试使用以下代码:

function validate_professional_field( $woocommerce_checkout->posted ) {}

这不起作用我不知道该怎么做.. 如何使用随动作发送的变量?

最后,我想使用$woocommerce_checkout->posted['createprofessional']来获取应该是我的复选框值的值。

其他详情

此复选框是使用以下代码制作的:

add_action('woocommerce_before_checkout_registration_form' , 'define_telesales_fields', 3);

<?php function define_telesales_fields() { ?>
    <p class="form-row form-row-wide create-professional">
        <div class="create-account">
        <input class="input-checkbox" id="createprofessional" type="checkbox" name="createprofessional" value="1" />
        <label for="createprofessional" class="checkbox"><?php _e( 'Create a professional', 'woocommerce' ); ?></label>
        </div>
    </p>          
<?php }?>

解决

add_action

中缺少逗号

add_action('woocommerce_after_checkout_validation', 'validate_professional_field', 10,1);

1 个答案:

答案 0 :(得分:1)

只需在函数声明中使用$woocommerce_checkout作为参数名称;如果您将整个对象传递给函数,则可以在函数本身中使用$woocommerce_checkout->posted

例如:

function validate_professional_field( $woocommerce_checkout ) {
    //$woocommerce_checkout->posted is valid here
}

//and you'd call it like this:
validate_professional_field( $woocommerce_checkout );

或者,如果你知道你只想在函数中使用posted,你可以将参数限制为只是那个,这似乎是你想要做的。在这种情况下,在函数声明中给它一个有效的变量名,如下所示:

function validate_professional_field( $posted ) {
    //$posted is valid here, and will be contain the data from $woocommerce_checkout->posted that you're passing into the function.
}

//and you'd call it like this:
validate_professional_field( $woocommerce_checkout->posted );