# How do I set a custom item weight totalizer for shipping rates?

Shipping rates can define a custom item weight totalizer to control how item weights are calculated when determining whether a rate is applicable.   
  
For example, you may want certain product variants to be exempt from the shipping weight calculation.   
  
First, add a setting to the variant:

```php
\Aero\Catalog\Models\Variant::settings('shipping', function (\Aero\Common\Settings\ModelSettingGroup $group) {
    $group->boolean('is_weight_exempt')->default(false);
});
```

The `setItemWeightTotalizer` method can then exclude weight-exempt variants when calculating the total weight:

```php
\Aero\Cart\Models\ShippingRate::setItemWeightTotalizer(function ($items) {
    return $items
        ->reject(function (\Aero\Cart\Models\OrderItem $item) {
            return $item->buyable->setting('shipping.is_weight_exempt');
        })
        ->sum(function (\Aero\Cart\Models\OrderItem $item) {
            return $item->buyable->weight;
        });
});
```

The totalizer receives the order items and the shipping rate as parameters and should return the total weight of the items or `null`.

<p class="callout info">Returning `null` means the default item weight totalizer will be used.</p>

---

### Parameters

<table border="1" id="bkmrk-parameter-type-descr" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><tbody><tr><td>**Parameter**</td><td>**Type**</td><td>**Description**</td></tr><tr><td>`$items`  
</td><td>`\Aero\Common\Eloquent\JavaScriptableCollection`  
</td><td>The order items being evaluated.</td></tr><tr><td>`$rate`  
</td><td>`\Aero\Cart\Models\ShippingRate`  
</td><td>The shipping rate being evaluated.</td></tr></tbody></table>