【问题标题】:Add a dropdown based on product categories in Woocommerce admin product variation在 Woocommerce 管理产品变体中添加基于产品类别的下拉列表
【发布时间】:2018-12-26 16:33:35
【问题描述】:

我需要在管理产品变体设置中将复选框字段替换为唯一的选择字段,以显示我从子术语 ID 获得的产品类别术语名称(仅适用于我的可变产品)。

所以woocommerce_wp_checkbox()函数将被woocommerce_wp_select()代替。

这是我的复选框的工作代码:

<?php
// Woocommerce Product meta
// Add Variation Settings
add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 );
// Save Variation Settings
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );
// Add fields
function variation_settings_fields( $loop, $variation_data, $variation ) {  
    // Characteristics
    $args = array( 'type' => 'product', 'taxonomy' => 'product_cat', 'child_of' => 20 ); 
    $categories = get_categories( $args );
    foreach ($categories as $cat) {
        woocommerce_wp_checkbox( array( 
            "id"            => $cat->name .'_['. $variation->ID .']', 
            "label"         => __(" " . $cat->name, "woocommerce" ), 
            "value"         => get_post_meta( $variation->ID, $cat->name .'_', true ), 
            )
        );
    }

    ?>
<?php
}
// Save
function save_variation_settings_fields( $post_id ) {
    // Characteristics
    $args = array( 'type' => 'product', 'taxonomy' => 'product_cat', 'child_of' => 20 ); 
    $categories = get_categories( $args );
    foreach ($categories as $cat) {
        $checkbox = isset( $_POST[$cat->name . '_'][ $post_id ] ) ? 'yes' : 'no';
        update_post_meta( $post_id, $cat->name . '_', $checkbox );
    }
}
?>

如何用下拉列表替换复选框(或最终是单选按钮)

非常感谢任何帮助。

【问题讨论】:

  • 我已经发布了显示产品变体处理自定义分类法和元数据的代码,你在说什么?我很迷惑;它工作正常。这是我正在努力解决的不清楚的 woocommerce 语法; 'woocommerce_product_after_variable_attributes' 是专门为此而设计的专用 woocommerce 功能,因此您客观上可以
  • 好吧,抱歉,我不知道使用类似的术语有很大的偏差,我的意思是可变产品
  • 不抱歉,您在产品变体自定义设置中使用产品类别...我已经回答了您的问题,它有效。

标签: php wordpress woocommerce custom-taxonomy variations


【解决方案1】:

在您的实际代码中存在一些错误,例如使用 get_categories() 获取产品类别自定义分类术语。相反,只需使用get_terms()...

下面的代码将启用一个选择字段而不是多个复选框。选择值保存完好。

重新访问的代码:

// Add Variation settings custom field
add_action( 'woocommerce_product_after_variable_attributes', 'add_product_category_variation_field', 11, 3 );
function add_product_category_variation_field( $loop, $variation_data, $variation ) {
    // Get product categories that are child of term = 20
    $terms   = get_terms( array('taxonomy' => 'product_cat', 'child_of' => 20 ) );
    $options = []; // Initializing

    // Loop through each wp_term object and set term names in an array
    foreach ($terms as $term) {
        $term_name = __( $term->name, "woocommerce" );
        $options[$term_name] = $term_name;
    }

    // The select field
    woocommerce_wp_select( array(
        'id'            => '_product_category',
        'name'          => "_product_category_$loop",
        'label'         => __("product categories", "woocommerce" ),
        'options'       => $options,
        'value'         => get_post_meta( $variation->ID, '_product_category', true ),
    ) );
}

// Save Variation settings custom field
add_action( 'woocommerce_save_product_variation', 'save_product_category_variation_field', 11, 2 );
function save_product_category_variation_field( $variation_id, $loop ){
    if( isset($_POST["_product_category_$loop"]) )
        update_post_meta( $variation_id, '_product_category', esc_attr( $_POST["_product_category_$loop"] ) );
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

  • 您好,感谢您的耐心和坚持,这确实是正确的。我确实在 woocommerce 上苦苦挣扎,因为我发现他们的代码/文档经常缺失。
  • @JamesHaroldGordonCartwright 只是您正在制作一个自定义循环,因此它使事情变得有点复杂,并且多个复选框的代码与唯一选择字段的代码不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2018-08-26
  • 2019-01-20
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多