ما میتونیم با استفاده از هوکهای elementor/element/after_section_start و elementor/element/before_section_end به ویجتهای موجود در المنتور فیلد اضافه کنیم.
به عنوان مثال:
add_action( 'elementor/element/after_section_start', function( $element, $section_id, $args ) { /** @var \Elementor\Element_Base $element */ if ( 'section' === $element->get_name() && 'section_background' === $section_id ) { $element->add_control( 'custom_control', [ 'type' => \Elementor\Controls_Manager::NUMBER, 'label' => __( 'Custom Control', 'plugin-name' ), ] ); } }, 10, 3 );
یا:
add_action('elementor/element/before_section_end', function( $section, $section_id, $args ) { if( $section->get_name() == 'image-box' && $section_id == 'section_image' ){ // we are at the end of the "section_image" area of the "image-box" $section->add_control( 'my_custom_control' , [ 'label' => 'My Label Here', 'type' => Elementor\Controls_Manager::SELECT, 'default' => 'blue', 'options' => array( 'blue' => 'Blue Style', 'green' => 'Green Style' ), 'prefix_class' => 'my-image-box-style-', 'label_block' => true, ] ); } }, 10, 3 );
این ۲ تا اکشن کار اضافه کردن ۲ فیلد رو برای ما انجام میدن. با $section->get_name() نام ویجتمون رو چک کردیم و با $section_id و بررسی مقدار اون فیلد جدید رو اضافه کردیم.
حالا اگر بخوایم به تمام ویجتها یه فیلد جدید اضافه کنیم کافیه به شکل زیر عمل کنیم:
add_action( 'elementor/element/after_section_start', function( $element, $section_id, $args ) { $element->add_control( $element->get_name().'_custom_control', [ 'type' => \Elementor\Controls_Manager::NUMBER, 'label' => __( 'Custom Control', 'plugin-name' ), ] ); }, 10, 3 );
اگر به کد بالا دقت کنید بعد از صدا زدن متد add_control ما اولین مقدار که id المنت یا فیلد هست رو به شکل زیر مقدار دادیم.
element->get_name().'_custom_control'
هر فیلدی باید آیدی منحصر به فرد داشته باشه و از اون طرف هم ما نیاز داریم که به هر ویجت یهدونه فیلد جدید اضافه کنیم. پس با concat کردن ۲ رشته، آیدی جدیدی رو ایجاد کردیم و اختصاص دادیم به ویجت.