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;
}
/** * 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; }