首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认情况下,WooCommerce自定义复选框已选中

默认情况下,WooCommerce自定义复选框已选中
EN

Stack Overflow用户
提问于 2017-08-09 23:00:48
回答 2查看 3.8K关注 0票数 0

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

我试过使用下面的代码,但它不起作用:

代码语言:javascript
复制
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' );

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-09 23:17:13

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

代码语言:javascript
复制
<?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>';
}
票数 2
EN

Stack Overflow用户

发布于 2020-07-29 05:58:21

要定义使用woocommerce_checkout_fields挂钩设置的自定义WooCommerce字段的默认值,最好将另一个过滤器函数挂钩到woocommerce_checkout_get_valuedefault_checkout_<your_field_name>挂钩。

woocommerce_checkout_get_value

这是一个短路过滤器,这意味着如果您使用它,$value将始终从null开始,如果返回的$value不是null,它将阻止任何尝试读取任何先前定义的用户首选项的用户元数据。

从某种意义上说,这是一种硬默认值:对于每次结帐,它都使用此过滤器中定义的值。

代码语言:javascript
复制
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 ),只有在没有现有用户首选项的情况下才会应用默认值。

此外,由于它使用由字段名定义的专用钩子名称,因此不需要检查函数被调用的是哪个字段。

代码语言:javascript
复制
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()方法,该方法同时调用这两个过滤器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45594254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档