php WooCommerce自定义复选框默认选中

2wnc66cl  于 2023-02-07  发布在  PHP
关注(0)|答案(2)|浏览(147)

我尝试在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' );

任何帮助都将不胜感激。谢谢

unftdfkk

unftdfkk1#

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

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

0yg35tkg2#

要定义使用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>

它的行为与上面的行为类似,但是它是在从登录用户的默认值读取默认值之后调用的,默认值可能已经在之前设置为给定用户的元数据(例如,如果用户之前已经购买,则在最后一次结帐时保存)。
这可以被视为软默认,因为需要进行适当的检查(如下所示:如果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()方法。

相关问题