Woocommerce 变量订阅自定义字段复选框将默认设置为未选中

问题描述

下面是我的代码,我在其中为我的变量订阅设置了一个名为 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',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,esc_attr($mindesk_analytics_opt_out));
}

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

解决方法

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

// 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',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,esc_attr($value) );
}