WC_Meta_Box_Product_Data::prepare_attributes PHP Method

prepare_attributes() public static method

Prepare attributes for save.
public static prepare_attributes ( $data = false ) : array
return array
    public static function prepare_attributes($data = false)
    {
        $attributes = array();
        if (!$data) {
            $data = $_POST;
        }
        if (isset($data['attribute_names'], $data['attribute_values'])) {
            $attribute_names = $data['attribute_names'];
            $attribute_values = $data['attribute_values'];
            $attribute_visibility = isset($data['attribute_visibility']) ? $data['attribute_visibility'] : array();
            $attribute_variation = isset($data['attribute_variation']) ? $data['attribute_variation'] : array();
            $attribute_position = $data['attribute_position'];
            $attribute_names_max_key = max(array_keys($attribute_names));
            for ($i = 0; $i <= $attribute_names_max_key; $i++) {
                if (empty($attribute_names[$i]) || !isset($attribute_values[$i])) {
                    continue;
                }
                $attribute_name = wc_clean($attribute_names[$i]);
                $attribute_id = wc_attribute_taxonomy_id_by_name($attribute_name);
                $options = isset($attribute_values[$i]) ? $attribute_values[$i] : '';
                if (is_array($options)) {
                    // Term ids sent as array.
                    $options = wp_parse_id_list($options);
                } else {
                    // Terms or text sent in textarea.
                    $options = 0 < $attribute_id ? wc_sanitize_textarea(wc_sanitize_term_text_based($options)) : wc_sanitize_textarea($options);
                    $options = wc_get_text_attributes($options);
                }
                $attribute = new WC_Product_Attribute();
                $attribute->set_id($attribute_id);
                $attribute->set_name($attribute_name);
                $attribute->set_options($options);
                $attribute->set_position($attribute_position[$i]);
                $attribute->set_visible(isset($attribute_visibility[$i]));
                $attribute->set_variation(isset($attribute_variation[$i]));
                $attributes[] = $attribute;
            }
        }
        return $attributes;
    }

Usage Example

コード例 #1
0
 /**
  * Save attributes via ajax.
  */
 public static function save_attributes()
 {
     check_ajax_referer('save-attributes', 'security');
     if (!current_user_can('edit_products')) {
         die(-1);
     }
     parse_str($_POST['data'], $data);
     $post_id = absint($_POST['post_id']);
     $product = wc_get_product($post_id);
     $attributes = WC_Meta_Box_Product_Data::prepare_attributes($data);
     $product->set_attributes($attributes);
     $product->save();
     die;
 }