我正尝试在WooCommerce结帐页面中默认选中一个复选框。我正在使用官方的WooCommerce Checkout字段编辑器插件来添加一个复选框,但它不能让我在默认情况下“选中”复选框。
我试过使用下面的代码,但它不起作用:
function custom_override_checkout_fields ( $fields ) {
$fields['additional']['uncheck-to-opt-out-of-our-quarterly-newsletter-neuroscience-matters_field']['default'] = 1;
return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );任何帮助都将不胜感激。谢谢
发布于 2017-08-09 23:17:13
您应该使用以下代码在结帐页面上添加复选框:
<?php
/**
* Add checkbox field to the checkout
**/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
$checked = $checkout->get_value( 'my_checkbox1' ) ? $checkout->get_value( 'my_checkbox1' ) : 1;
echo '<div id="my-new-field"><h3>'.__('My Checkbox: ').'</h3>';
woocommerce_form_field( 'my_checkbox1', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('I have read and agreed.'),
'required' => true,
), $checked);
echo '</div>';
}发布于 2020-07-29 05:58:21
要定义使用woocommerce_checkout_fields挂钩设置的自定义WooCommerce字段的默认值,最好将另一个过滤器函数挂钩到woocommerce_checkout_get_value或default_checkout_<your_field_name>挂钩。
woocommerce_checkout_get_value
这是一个短路过滤器,这意味着如果您使用它,$value将始终从null开始,如果返回的$value不是null,它将阻止任何尝试读取任何先前定义的用户首选项的用户元数据。
从某种意义上说,这是一种硬默认值:对于每次结帐,它都使用此过滤器中定义的值。
add_filter( 'woocommerce_checkout_get_value', 'custom_override_checkout_get_value', 10, 2 );
public function custom_override_checkout_get_value( $value, $field ) {
// $value is null or the result of previous filters
if ( 'uncheck-to-opt-out-of-our-quarterly-newsletter-neuroscience-matters_field' === $field ) {
$value = 1;
}
return $value;
}default_checkout_<your_field_name>
它的行为与上面的类似,但是它是在从登录用户的默认值中读取默认值之后调用的,默认值可能已经被设置为给定用户的元数据(例如,如果用户之前已经进行了购买,则在最后一次结帐期间保存)。
这可以被视为软默认值,因为使用适当的检查(如下所示:如果为null,则仅设置$value ),只有在没有现有用户首选项的情况下才会应用默认值。
此外,由于它使用由字段名定义的专用钩子名称,因此不需要检查函数被调用的是哪个字段。
add_filter( 'default_checkout_uncheck-to-opt-out-of-our-quarterly-newsletter-neuroscience-matters_field', 'custom_override_default_checkout_field' );
public function custom_override_checkout_get_value( $value ) {
// $value is read from logged in user's meta or null or the result of previous filters
if ( is_null($value) ) {
// Only use default if null, aka. if user has no previous preference saved.
$value = 1;
}
return $value;
}有关更多上下文,请查看wp-content/plugins/woocommerce/includes/class-wc-checkout.php中的WC_Checkout::get_value()方法,该方法同时调用这两个过滤器。
https://stackoverflow.com/questions/45594254
复制相似问题