Devify Sections
A multi-purpose kit of 12 custom Elementor section widgets with full content and style controls. Build complete, polished page sections visually — heroes, stats, pricing, testimonials, FAQs and more — with a clean shared architecture.
by Saad Sohail · github.com/saadsk-tech/devify-elementor-sections · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/saadsk-tech/devify-elementor-sections/archive/refs/heads/main.zipA multi-purpose kit of 12 custom Elementor section widgets with full content and style controls. Drop in complete, polished page sections — heroes, stats, pricing, testimonials, FAQs, team grids and more — and style each one visually, no custom CSS required.
Built on a clean shared architecture: one abstract base class provides every widget's control and render helpers, so the kit stays consistent, predictable, and easy to extend.
The 12 widgets
| Widget | What it's for |
|---|---|
| Hero | Page opener with an optional image and two CTAs (with-image or centered text-only) |
| Stats Row | Headline numbers / counters from a repeater |
| FAQ Accordion | Accessible Q&A with WYSIWYG answers |
| How It Works | Numbered step sequence |
| CTA Band | Full-width call-to-action strip |
| Testimonials | Grid of customer quotes with author and role |
| Pricing Table | Plans with feature lists and a "most popular" highlight |
| Logo / Trust Bar | Row of partner or client logos |
| Feature Cards | Icon + title + text grid (2 / 3 / 4 columns) |
| Icon List | Checklist-style benefits with icons |
| Callout Banner | Highlighted notice in info / success / warning tones |
| Team Grid | Team members with photo, name, and role |
Why it's built this way
The value of a widget kit isn't any single widget — it's the shared foundation that keeps a dozen of them consistent and maintainable.
- One abstract base class (
DVS_Base) supplies all the control helpers (add_text,add_url,add_image,add_icon) and style helpers (add_color,add_typography,add_padding,add_align) plus render helpers (render_btn,render_image,render_header). Each widget is justregister_controls()+render(). - Content and Style tabs on every widget — editors change colours, typography, padding, and alignment visually, bound to the right element via Elementor selectors.
- Repeaters with live
title_fieldpreviews for all variable-length content. - Accessibility built in — the FAQ accordion ships real
aria-expandedstate and keyboard support. - Secure output everywhere —
esc_html,esc_url,esc_attr,wp_kses_post. - Graceful — shows an admin notice if Elementor isn't active instead of a fatal error.
- Modern PHP 8 — typed signatures, return types, namespacing, translation-ready.
Architecture
devify-sections.php Bootstrap: Elementor guard, category, registration, enqueues
widgets/
class-dvs-base.php Abstract base — content + style + render helpers
class-dvs-hero.php Each widget: register_controls() + render()
class-dvs-stats.php
class-dvs-faq.php
class-dvs-steps.php
class-dvs-cta-band.php
class-dvs-testimonials.php
class-dvs-pricing.php
class-dvs-trust-bar.php
class-dvs-feature-cards.php
class-dvs-icon-list.php
class-dvs-callout-banner.php
class-dvs-team-grid.php
assets/
sections.css Token-driven, responsive, namespaced under .dvs-
sections.js Progressive-enhancement accordion
Adding a thirteenth widget is one new file plus one line in the registration array.
Install
- Install and activate Elementor.
- Copy
devify-sectionsintowp-content/plugins/and activate it. - Edit any page with Elementor; find the Devify Sections category in the widget panel.
Requires WordPress 6.0+, PHP 8.0+, and Elementor.
Extending
Each widget follows the same shape, so a new one is short:
class DVS_MyWidget extends DVS_Base {
public function get_name(): string { return 'dvs-my-widget'; }
public function get_title(): string { return esc_html__( 'My Widget', 'devify-sections' ); }
public function get_icon(): string { return 'eicon-info-box'; }
protected function register_controls(): void {
$this->start_controls_section( 'content', array( 'label' => __( 'Content', 'devify-sections' ) ) );
$this->add_text( 'heading', 'Heading', 'Default heading' );
$this->end_controls_section();
$this->begin_style( 'style', 'Style' );
$this->add_color( 'heading_color', 'Heading Color', '.my-title' );
$this->end_style();
}
protected function render(): void {
$s = $this->get_settings_for_display();
echo '<h2 class="my-title">' . esc_html( $s['heading'] ) . '</h2>';
}
}
License
GPL-2.0-or-later. Built by Saad Sohail · saad@devify.digital