Skip to content

Instantly share code, notes, and snippets.

@dexit
Forked from harisenbon/functions.php
Created June 12, 2025 12:37
Show Gist options
  • Save dexit/30332a01804bd84e21acf932bdffcfbc to your computer and use it in GitHub Desktop.
Save dexit/30332a01804bd84e21acf932bdffcfbc to your computer and use it in GitHub Desktop.
Elementor Empty Dynamic Field Condition
/**
* Load our override of dynamic-tags-condition
*/
add_action( 'elementor/display_conditions/register', function( $conditions_manager ) {
require_once(get_template_directory() . '/inc/elementor/seg-dynamic-tags-condition.php' );
$conditions_manager->register_condition_instance( new \Seg_Dynamic_Tags_Condition() );
} );
<?php
use Elementor\Controls_Manager;
use ElementorPro\Modules\DisplayConditions\Classes\Comparator_Provider;
use ElementorPro\Modules\DisplayConditions\Classes\Comparators_Checker;
use ElementorPro\Modules\DisplayConditions\Classes\DynamicTags\Custom_Fields_Data_Provider;
use ElementorPro\Modules\DisplayConditions\Classes\DynamicTags\Dynamic_Tags_Data_Provider;
use ElementorPro\Modules\DisplayConditions\Conditions\Dynamic_Tags_Condition;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
class Seg_Dynamic_Tags_Condition extends Dynamic_Tags_Condition {
/**
* @var Dynamic_Tags_Data_Provider
*/
private $dynamic_tags_data_provider;
/**
* @var Custom_Fields_Data_Provider
*/
private $custom_fields_data_provider;
public function __construct() {
parent::__construct();
$this->dynamic_tags_data_provider = new Dynamic_Tags_Data_Provider();
$this->custom_fields_data_provider = new Custom_Fields_Data_Provider();
}
public function get_name(): string {
return 'seg_dynamic_tags';
}
public function get_label(): string {
return esc_html__( 'Dynamic Tag Empty', 'elementor-pro' );
}
public function get_group() {
return 'other';
}
public function check( $args ): bool {
$value = $this->get_condition_value( $args );
if ( false === $value ) {
return false;
}
if(is_string( $value )) {
return Comparators_Checker::check_string_contains_and_empty( $args['comparator'], $args['dynamic_tag_value'] ?? '', $value );
} else {
switch ( $args['comparator'] ) {
case Comparator_Provider::COMPARATOR_IS_EMPTY:
return empty( $actual_value );
case Comparator_Provider::COMPARATOR_IS_NOT_EMPTY:
return ! empty( $actual_value );
default:
return false;
}
}
}
public function get_options() {
$this->add_control(
'dynamic_tag',
[
'type' => Controls_Manager::SELECT,
'options' => $this->dynamic_tags_data_provider->get_control_options() + $this->custom_fields_data_provider->get_control_options(),
'default' => $this->dynamic_tags_data_provider->get_default_control_option(),
'disabled_options' => ! current_user_can( 'manage_options' ) ? [ 'author_info_email' ] : [],
'disabled_type' => 'hidden',
]
);
$this->add_control(
'comparator',
[
'type' => Controls_Manager::SELECT,
'options' => Comparator_Provider::get_comparators(
[
Comparator_Provider::COMPARATOR_IS_EMPTY,
Comparator_Provider::COMPARATOR_IS_NOT_EMPTY,
]
),
'default' => Comparator_Provider::COMPARATOR_IS_NOT_EMPTY,
]
);
}
/**
* Conditionally retrieve the value of a dynamic tag or custom field.
*
* @return string | bool
*/
private function get_condition_value( array $args ) {
$dt_value = $this->dynamic_tags_data_provider->get_value( $args );
if ( $dt_value ) {
return $dt_value;
}
return $this->custom_fields_data_provider->get_value( $args );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment