WooCommerce自定义复选框默认选中

时间:2017-08-09 15:00:48

标签: php wordpress woocommerce

我正在尝试在WooCommerce结帐页面中“检查”默认复选框。 我正在使用官方的WooCommerce结帐字段编辑器插件添加一个复选框,但它不能让我能够默认选中“已选中”复选框。

我已尝试使用此代码,但它无效:

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' );

非常感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:1)

您应该使用以下代码在结帐页面上添加复选框:

<?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>';
}

答案 1 :(得分:1)

要定义使用woocommerce_checkout_fields挂钩设置的自定义WooCommerce字段的默认值,最好将另一个过滤器函数挂钩到woocommerce_checkout_get_valuedefault_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>

这与上面的行为类似,但是在从已登录用户的默认值中读取默认值后调用此方法,该默认值可能先前已设置为给定用户的元数据(例如,在上次结帐时保存,如果该用户之前已经购买过。)

这可以被认为是一个软默认值,如进行适当的检查(如下所示:如果$value,则仅设置null),默认值仅在没有现有用户首选项的情况下应用。

此外,由于它使用由字段名称定义的专用挂钩名称,因此无需检查正在为哪个函数调用函数。

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;
}

有关更多上下文,请查看WC_Checkout::get_value()中的wp-content/plugins/woocommerce/includes/class-wc-checkout.php方法,该方法将调用这两个过滤器。