/** * Validate and sanitize meta array * * @since 0.4.0 * * @param array $data * * @return array|\WP_Error Prepared array or WP_Error if invalid */ protected static function prepare_meta($data) { if (!isset($data['meta']) || empty($data['meta'] || !is_array($data['meta']))) { $data['meta'] = []; return $data; } if ('click' == $data['type']) { if ('destination' == $data['sub_type']) { return destination::prepare_meta($data); } foreach (['color', 'background_color', 'color_test_text', 'link'] as $field) { if (isset($data['meta'][$field]) && !empty($data['meta'][$field]) && is_string($data['meta'][$field])) { if ('link' == $field) { if (filter_var($data['meta'][$field], FILTER_VALIDATE_URL)) { $data['meta'][$field] = esc_url_raw($data['meta'][$field]); } else { return new \WP_Error('ingot-invalid-config-click-link', __('Click groups must have a valid link.', 'ingot')); } } else { $data['meta'][$field] = strip_tags($data['meta'][$field]); } } else { $data['meta'][$field] = ''; } } } if ('price' == $data['type']) { if (!isset($data['meta']['product_ID'])) { return new \WP_Error('ingot-invalid-config-no-product-id', __('Ingot price tests must set product ID in meta.product_ID', 'ingot')); } if (isset($data['meta']['variable_prices']) && is_array($data['meta']['variable_prices'])) { $data['meta']['variable_prices'] = helpers::make_array_values_numeric($data['meta']['variable_prices']); } else { $data['meta']['variable_prices'] = []; } } return $data; }