【问题标题】:Woocommerce variable subscription custom field checkbox set default as uncheckedWoocommerce 变量订阅自定义字段复选框将默认设置为未选中
【发布时间】:2021-05-07 09:34:21
【问题描述】:

下面是我的代码,我在其中为我的变量订阅设置了一个名为 mindesk_analytics_opt_out 的自定义字段,并且按照我的预期运行良好。

但是,每当我创建新变体并打开面板时,我的默认复选框始终设置为 checked。我无法理解我的代码在哪里做错了。

有人可以指导我在哪里犯了一个小错误吗?这是我的工作代码。

<?php

// Showing fields for variable subscriptions 
add_action('woocommerce_product_after_variable_attributes', 'show_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 3);

// Saving fields for variable subscriptions 
add_action('woocommerce_save_product_variation', 'save_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 2);


function show_WC_Product_Variable_Subscription_Variation_Custom_Fields($loop, $variation_data, $variation) {

    $mindesk_analytics_opt_out = get_post_meta($variation->ID, 'mindesk_analytics_opt_out', true);
    echo '<strong>Mindesk e-Commerce</strong>';

    woocommerce_wp_checkbox(
        array(
            'id'            => "mindesk_analytics_opt_out{$loop}",
            'name'          => "mindesk_analytics_opt_out[{$loop}]",
            'wrapper_class' => 'show_if_simple',
            'label'         => __('&nbsp; Analytics', 'woocommerce'),
            'value'         => !empty($mindesk_analytics_opt_out) ? 'yes' : $mindesk_analytics_opt_out,
            'cbvalue'       => $mindesk_analytics_opt_out,

        )
    );
}
function save_WC_Product_Variable_Subscription_Variation_Custom_Fields($variation_id, $loop) {

    $mindesk_analytics_opt_out = isset($_POST['mindesk_analytics_opt_out'][$loop]) ? 'yes' : 'no';
    update_post_meta($variation_id, 'mindesk_analytics_opt_out', esc_attr($mindesk_analytics_opt_out));
}

任何意见或建议将不胜感激。

【问题讨论】:

    标签: php woocommerce hook-woocommerce custom-fields woocommerce-subscriptions


    【解决方案1】:

    更新:改为使用下面的函数替换(复选框将默认取消选中)

    // Add custom field checkbox for variable subscriptions 
    add_action('woocommerce_product_after_variable_attributes', 'show_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 3);
    function show_WC_Product_Variable_Subscription_Variation_Custom_Fields($loop, $variation_data, $variation) {
        echo '<strong>' . __("Mindesk e-Commerce", 'woocommerce') . '</strong>';
    
        $value = get_post_meta($variation->ID, 'mindesk_analytics_opt_out', true);
    
        woocommerce_wp_checkbox(array(
            'id'            => "mindesk_analytics_opt_out{$loop}",
            'name'          => "mindesk_analytics_opt_out[{$loop}]",
            'wrapper_class' => 'show_if_simple',
            'label'         => __('&nbsp; Analytics', 'woocommerce'),
            'value'         => $value,
        ) );
    }
    

    经过测试和工作


    这部分不需要改动:

    // Saving fields for variable subscriptions 
    add_action('woocommerce_save_product_variation', 'save_WC_Product_Variable_Subscription_Variation_Custom_Fields', 10, 2);
    function save_WC_Product_Variable_Subscription_Variation_Custom_Fields($variation_id, $loop) 
    {
        $value = isset($_POST['mindesk_analytics_opt_out'][$loop]) ? 'yes' : 'no';
        update_post_meta( $variation_id, 'mindesk_analytics_opt_out', esc_attr($value) );
    }
    

    【讨论】:

    • 感谢您的回复..但不幸的是..它不起作用..我希望默认复选框未选中..目前已选中..我已经替换了您的代码但仍然相同
    • @MittulAtTechnoBrave 更新对不起,我之前没听懂。
    • @MittulAtTechnoBrave 我也回答了你的其他问题,等待你的反馈。
    • 谢谢..它的工作..我希望这个相同的字段显示在“简单订阅”中,我在这里问你在哪里回答..但我很困惑..你能在那里回复..谢谢
    • @MittulAtTechnoBrave 我在此线程上添加了一个带有简单订阅复选框的附加项:stackoverflow.com/a/66021847/3730754
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2016-09-19
    • 2014-09-11
    相关资源
    最近更新 更多