=== HRTSoftX - Conditional Elements ===
Contributors: hrtsoftx, sermanjeet
Tags: conditional content, content visibility, display conditions, hooks, user roles
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Add Gutenberg content to WordPress hooks and control its visibility with conditions, user roles, devices, and shortcodes.

== Description ==

Conditional Elements lets you create content with the WordPress block editor, add it to WordPress hooks, and control when it is displayed.

Create Gutenberg content, choose where it should appear, and configure conditions to control its visibility. You can include or exclude content based on configured conditions, control visibility by user role or device, and use custom WordPress action hooks when you need more flexibility.

Key Features

* Gutenberg Content - Create and manage content using the WordPress block editor.
* Flexible Placement - Add Gutenberg content before or after supported locations.
* Theme-Aware Placement - Automatically provides available placement options based on the active theme.
* Block Theme Support - Provides placement options for WordPress block themes.
* Custom Hooks - Add content to your own WordPress action hooks.
* Include Conditions - Display content when selected conditions are met.
* Exclude Conditions - Prevent content from being displayed when selected conditions are met.
* User Role Conditions - Control content visibility based on the current user's role.
* Device Visibility - Show or hide content for desktop, tablet, or mobile devices.
* Shortcodes - Render Conditional Elements content directly inside posts, pages, templates, widgets, or other shortcode-compatible areas.

Placement

Conditional Elements provides theme-aware placement options based on the active theme.

For supported classic themes, additional theme-specific placement options may be available.

For other classic themes, common WordPress hook locations are available, including:

* Before Site Wrapper
* After Site Wrapper
* Before Header
* Before Inner Content
* After Inner Content
* Before Footer
* After Footer

For WordPress block themes, supported placement locations include:

* Before Site Wrapper
* After Site Wrapper
* Before Header
* After Header
* Before Title
* After Title
* Before Content
* After Content
* Before Inner Content
* After Inner Content
* Before Footer
* After Footer

Available placement options depend on the active theme and its supported hooks.

You can also use Custom Hook to add content to any WordPress action hook.

Conditions

Conditional Elements provides several ways to control when content is displayed.

Include

Display content when the configured conditions match.

Exclude

Prevent content from being displayed when the configured conditions match.

User Role

Control content visibility based on the current user's WordPress role.

Device Visibility

Control visibility based on the visitor's device:

* Desktop
* Tablet
* Mobile

Shortcode

Each Conditional Element has a shortcode that can be copied directly from the Shortcode column in the Conditional Elements list table.

Example:

[hrtcel_element id=32]

Use the shortcode anywhere WordPress supports shortcodes.

The shortcode respects the Conditional Element's configured conditions by default.

Bypass Conditions

You can optionally bypass the configured conditions by passing bypass_conditions="true".

Example:

[hrtcel_element id=32 bypass_conditions="true"]

This renders the element's content without applying its configured conditional rules.

== Installation ==

1. Install Conditional Elements through the WordPress plugin directory or upload the plugin files to the /wp-content/plugins/hrtsoftx-conditional-elements/ directory.
2. Activate the plugin through the Plugins screen in WordPress.
3. Go to Conditional Elements in the WordPress admin area.
4. Create your content using the WordPress block editor.
5. Select a placement and configure your conditions.
6. Publish your Conditional Element.
7. Copy the shortcode from the Shortcode column when you want to render the element directly.

== Frequently Asked Questions ==

= Which themes are supported? =

Conditional Elements supports WordPress block themes and includes integrations for popular classic themes such as Astra, Kadence, GeneratePress, Neve, and OceanWP.

For other classic themes, common WordPress hook locations are available where supported by the theme.

You can also use Custom Hook to add content to any WordPress action hook.

= Can I use my own WordPress hook? =

Yes. Use the Custom Hook placement and enter one or more WordPress action hooks separated by commas.

= Does Conditional Elements work with Gutenberg? =

Yes. Conditional Elements uses the WordPress block editor to create and manage content.

= Can I control content visibility based on conditions? =

Yes. You can configure include and exclude conditions to control when your content is displayed.

= Can I control content visibility based on user roles? =

Yes. You can configure user role conditions to control who can see your content.

= Can I control content visibility by device? =

Yes. Device visibility conditions let you show or hide content for desktop, tablet, or mobile devices.

= Can I use Conditional Elements with a shortcode? =

Yes. Every Conditional Element has a shortcode available from the Shortcode column in the Conditional Elements list table.

For example:

[hrtcel_element id=32]

= Can I bypass conditions when using a shortcode? =

Yes. Add bypass_conditions="true" to the shortcode.

For example:

[hrtcel_element id=32 bypass_conditions="true"]

This renders the element without applying its configured conditional rules.

== Screenshots ==

1. Conditional Elements list table with placement, display rules, user roles and shortcode.
2. Build your content with the familiar Gutenberg block editor.
3. Element Settings sidebar: choose placement, set priority and open display rules.
4. Display Rules modal: include and exclude locations and target user roles.
5. Frontend example: a Black Friday top bar rendered before the header.

== Source Code ==

The JavaScript and CSS files in the `build/` directory are compiled from human-readable source code. The full, uncompiled source is included in this plugin in the `src/` directory.

Compiled files and their sources:

* `build/hrtcel-admin-list.js` and `build/hrtcel-admin-list.css` are built from `src/admin-list/`
* `build/hrtcel-sidebar.js` and `build/hrtcel-sidebar.css` are built from `src/sidebar/`

The source is written in TypeScript/React and SCSS. The build is configured in `package.json`, `tsconfig.json` and `webpack.config.js`, and uses the `@wordpress/scripts` toolchain (webpack). Dependency versions are locked in `package-lock.json`.

= Building from source =

Requirements: Node.js 20.17 or later and npm.

1. Open the plugin directory in a terminal.
2. Run `npm install` to install the build tools.
3. Run `npm run build` to regenerate the files in `build/`.
4. Run `npm run dev` during development to rebuild automatically when files change.

= Third-party libraries =

The following libraries are bundled into the compiled JavaScript:

* react-select (MIT) - https://github.com/JedWatson/react-select
* Emotion packages used by react-select (MIT) - https://github.com/emotion-js/emotion
* @wordpress/icons (GPL-2.0-or-later) - https://github.com/WordPress/gutenberg/tree/trunk/packages/icons

All other `@wordpress/*` packages are loaded from WordPress core as script dependencies and are not bundled.

== Changelog ==

= 1.0.0 =

* Initial release.
