orbit-elementor-skinslisted
Install: claude install-skill adityaarsharma/orbit
# 🪐 orbit-elementor-skins — Widget skins
Skins are Elementor's variation system. One widget, multiple visual treatments, shared data + controls. Most plugins ship 5 separate widgets when 1 widget + 5 skins would be cleaner.
---
## Quick start
```bash
claude "/orbit-elementor-skins Audit ~/plugins/my-plugin for over-widgeting — places where multiple widgets should be skins of one."
```
---
## What it checks
### 1. Skin_Base subclass
```php
class Skin_Card extends \Elementor\Skin_Base {
public function get_id() { return 'card'; }
public function get_title() { return __( 'Card', 'my-plugin' ); }
protected function _register_controls_actions() {
add_action( "elementor/element/{$this->parent->get_name()}/section_card/before_section_end",
[ $this, 'register_controls' ] );
}
public function render() {
// Custom render for "card" treatment
}
}
```
### 2. Skin registered on the widget
```php
class Widget_Posts extends \Elementor\Widget_Base {
protected function _register_skins() {
$this->add_skin( new Skin_Card( $this ) );
$this->add_skin( new Skin_List( $this ) );
$this->add_skin( new Skin_Grid( $this ) );
}
}
```
### 3. Default skin
```php
$this->add_control( '_skin', [
'type' => Controls_Manager::SELECT,
'default' => 'card',
// populated automatically from registered skins
] );
```
### 4. Use cases for skins vs separate widgets
| Use skin when | Use separate widget when |
|---|---|
| Same data shape (posts list, gallery