✏️ 正在编辑: datis_menu.php
路径:
/home/h359620/public_html/wp-content/themes/datis/inc/elementor/widgets/datis_menu/datis_menu.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Datis\Widgets; use Datis_Walker; if (!defined('ABSPATH')) exit; use Elementor\Widget_Base; use Elementor\Controls_Manager; use Elementor\Group_Control_Border; use Elementor\Group_Control_Box_Shadow; use Elementor\Group_Control_Typography; use Elementor\Icons_Manager; if (!class_exists('Datis_Menu')) { class Datis_Menu extends Widget_Base { public function get_name() { return 'datis_menu'; } public function get_title() { return __('Site Menu', 'datis'); } public function get_icon() { return 'eicon-menu-bar'; } public function get_categories() { return ['datis-widgets']; } /* ========================================= * CONTROLS * ====================================== */ protected function register_controls() { /* ---------- Mobile Inserts (Header/Footer داخل canvas موبایل) ---------- */ $this->start_controls_section('section_mobile_inserts', [ 'label' => __('Mobile Menu Inserts', 'datis'), ]); $this->add_control('mobile_header_tpl', [ 'label' => __('Mobile Header Template', 'datis'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_elementor_templates(), 'default' => '', ]); $this->add_control('mobile_footer_tpl', [ 'label' => __('Mobile Footer Template', 'datis'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_elementor_templates(), 'default' => '', ]); $this->end_controls_section(); /* ---------- انتخاب منوها ---------- */ $this->start_controls_section('section_content', [ 'label' => __('Menu Settings', 'datis'), ]); $options = $this->get_menus(); $firstKey = !empty($options) ? array_key_first($options) : ''; // منوی اصلی (هم برای دسکتاپ، هم تب اول موبایل) $this->add_control('menu_id', [ 'label' => __('Primary Menu', 'datis'), 'type' => Controls_Manager::SELECT, 'options' => $options, 'default' => $firstKey, ]); // تب دوم: بهجای منو، قالب المنتوری $this->add_control('secondary_tab_template', [ 'label' => __('Secondary Tab Template (Mobile Tab 2)', 'datis'), 'type' => Controls_Manager::SELECT, 'options' => $this->get_elementor_templates(), 'default' => '', ]); // لیبل تبها $this->add_control('primary_tab_label', [ 'label' => __('Primary Tab Label', 'datis'), 'type' => Controls_Manager::TEXT, 'default' => __('Main menu', 'datis'), ]); $this->add_control('secondary_tab_label', [ 'label' => __('Secondary Tab Label', 'datis'), 'type' => Controls_Manager::TEXT, 'default' => __('Projects', 'datis'), 'condition' => [ 'secondary_tab_template!' => '', ], ]); $this->end_controls_section(); /* ---------- استایل منو اصلی (دسکتاپ) ---------- */ $this->start_controls_section('section_style_main_menu', [ 'label' => __('Main Menu Style', 'datis'), 'tab' => Controls_Manager::TAB_STYLE, ]); $this->add_control( 'hover_style', [ 'label' => esc_html__('Hover Style', 'datis'), 'type' => \Elementor\Controls_Manager::SELECT, 'default' => 'hover_style_1', 'options' => [ 'hover_style_1' => esc_html__('Style 1', 'datis'), 'hover_style_2' => esc_html__('Style 2', 'datis'), ] ] ); $this->add_control( 'hover_style_2_position', [ 'label' => esc_html__('Hover position', 'datis'), 'type' => \Elementor\Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => [ 'min' => -200, 'max' => 200, 'step' => 1, ], ], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop.hover-2 .menu-list>li.current-menu-item>a::after' => 'bottom: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .datis-menu-desktop.hover-2 .menu-list>li.current-menu-item>a::before' => 'top: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'hover_style' => 'hover_style_2', ], ] ); $this->add_control('main_menu_after_color', [ 'label' => __('Line Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop.hover-1 .menu-list>li>a::after, .datis-menu-desktop.hover-1 .menu-list>li>.menu-mega-trigger::after' => 'background: {{VALUE}};', ], 'condition' => [ 'hover_style' => 'hover_style_1', ], ]); $this->start_controls_tabs('tabs_main_menu_states'); // Normal $this->start_controls_tab('tab_main_menu_normal', ['label' => __('Normal', 'datis')]); $this->add_control('main_menu_text_color_normal', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > a' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop > .menu-list > li .mega-menu-icon' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > span' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'main_menu_typography_normal', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > a', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > span ', ]); $this->add_responsive_control('main_menu_padding_normal', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('main_menu_margin_normal', [ 'label' => __('Margin (li)', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'main_menu_border_normal', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > a', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'main_menu_box_shadow_normal', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li > a', ]); $this->end_controls_tab(); // Hover $this->start_controls_tab('tab_main_menu_hover', ['label' => __('Hover', 'datis')]); $this->add_control('main_menu_text_color_hover', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > a' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover .mega-menu-icon' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > span' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'main_menu_typography_hover', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > a', ]); $this->add_responsive_control('main_menu_padding_hover', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('main_menu_margin_hover', [ 'label' => __('Margin (li:hover)', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'main_menu_border_hover', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > a', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'main_menu_box_shadow_hover', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li:hover > a', ]); $this->end_controls_tab(); // Active $this->start_controls_tab('tab_main_menu_active', ['label' => __('Active', 'datis')]); $this->add_control('main_menu_text_color_active', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item > a' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item .mega-menu-icon' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'main_menu_typography_active', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item > a', ]); $this->add_responsive_control('main_menu_padding_active', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item > a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('main_menu_margin_active', [ 'label' => __('Margin (li.active)', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'main_menu_border_active', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item > a', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'main_menu_box_shadow_active', 'selector' => '{{WRAPPER}} .datis-menu-desktop > .menu-list > li.current-menu-item > a', ]); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); /* ---------- Mega Menu Style ---------- */ $this->start_controls_section('section_style_megamenu', [ 'label' => __('Mega Menu Style', 'datis'), 'tab' => Controls_Manager::TAB_STYLE, ]); $this->add_control('mega_menu_render_selector', [ 'label' => __('Mega menu render target (CSS selector)', 'datis'), 'type' => \Elementor\Controls_Manager::TEXT, 'default' => '', 'label_block' => true, 'description' => __('Example: #mega-menu-host or .mega-menu-host. Leave empty = render near menu item (default).', 'datis'), ]); $this->add_responsive_control('mega_menu_top', [ 'label' => __('top', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 0, 'max' => 500]], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .datis-megamenu-wrapper' => 'top: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .datis-menu-desktop .datis-megamenu-wrapper::before' => 'height: calc({{SIZE}}{{UNIT}} - 10px);top: calc(-{{SIZE}}{{UNIT}} + 10px);', ], ]); $this->add_responsive_control('mega_menu_right', [ 'label' => __('right', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 0, 'max' => 1000]], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .datis-megamenu-wrapper' => 'right: {{SIZE}}{{UNIT}};', ], ]); $this->start_controls_tabs('tabs_megamenu_states'); $this->start_controls_tab('tab_megamenu_normal', ['label' => __('Normal', 'datis')]); $this->add_control('megamenu_bg_color_normal', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper' => 'background: {{VALUE}};', ], ]); $this->add_control('megamenu_text_color_normal', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper a' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'megamenu_typography_normal', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper a', ]); $this->add_responsive_control('megamenu_padding_normal', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('megamenu_border_radius_normal', [ 'label' => __('Border Radius', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'megamenu_border_normal', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'megamenu_box_shadow_normal', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper', ]); $this->end_controls_tab(); $this->start_controls_tab('tab_megamenu_hover', ['label' => __('Hover', 'datis')]); $this->add_control('megamenu_bg_color_hover', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper:hover' => 'background: {{VALUE}};', ], ]); $this->add_control('megamenu_text_color_hover', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper:hover a' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'megamenu_typography_hover', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper:hover a', ]); $this->add_responsive_control('megamenu_padding_hover', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper:hover' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('megamenu_border_radius_hover', [ 'label' => __('Border Radius', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'megamenu_border_hover', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper:hover', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'megamenu_box_shadow_hover', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper:hover', ]); $this->end_controls_tab(); $this->start_controls_tab('tab_megamenu_active', ['label' => __('Active', 'datis')]); $this->add_control('megamenu_bg_color_active', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item' => 'background: {{VALUE}};', ], ]); $this->add_control('megamenu_text_color_active', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item a' => 'color: {{VALUE}};', ], ]); $this->add_group_control(Group_Control_Typography::get_type(), [ 'name' => 'megamenu_typography_active', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item a', ]); $this->add_responsive_control('megamenu_padding_active', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('megamenu_border_radius_active', [ 'label' => __('Border Radius', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'megamenu_border_active', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'megamenu_box_shadow_active', 'selector' => '{{WRAPPER}} .datis-megamenu-wrapper.current-menu-item', ]); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); /* ---------- Submenu Style ---------- */ $this->start_controls_section('section_style_submenu', [ 'label' => __('Submenu Style', 'datis'), 'tab' => Controls_Manager::TAB_STYLE, ]); $this->start_controls_tabs('tabs_submenu_states'); // normal $this->start_controls_tab('tab_submenu_normal', ['label' => __('Normal', 'datis')]); $this->add_control('submenu_bg_color_normal', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu' => 'background-color: {{VALUE}};', ], ]); $this->add_control('submenu_text_color_normal', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu li a' => 'color: {{VALUE}};', ], ]); $this->add_responsive_control('submenu_padding_normal', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('submenu_margin_normal', [ 'label' => __('Margin', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('submenu_min_width', [ 'label' => __('Min Width', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px', '%', 'em'], 'range' => [ 'px' => ['min' => 100, 'max' => 1200], '%' => ['min' => 10, 'max' => 100], 'em' => ['min' => 5, 'max' => 80], ], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu' => 'min-width: {{SIZE}}{{UNIT}};', ], ]); $this->end_controls_tab(); // hover $this->start_controls_tab('tab_submenu_hover', ['label' => __('Hover', 'datis')]); $this->add_control('submenu_bg_color_hover', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu li:hover' => 'background-color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop .datis-megamenu-wrapper li:hover' => 'background-color: {{VALUE}};', ], ]); $this->add_control('submenu_text_color_hover', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu li:hover > a' => 'color: {{VALUE}};', ], ]); $this->add_responsive_control('submenu_padding_hover', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu li:hover' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('submenu_margin_hover', [ 'label' => __('Margin', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu li:hover' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->end_controls_tab(); // active $this->start_controls_tab('tab_submenu_active', ['label' => __('Active', 'datis')]); $this->add_control('submenu_bg_color_active', [ 'label' => __('Background Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu .current-menu-item' => 'background-color: {{VALUE}};', '{{WRAPPER}} .datis-menu-desktop .datis-megamenu-wrapper .current-menu-item' => 'background-color: {{VALUE}};', ], ]); $this->add_control('submenu_text_color_active', [ 'label' => __('Text Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu .current-menu-item > a' => 'color: {{VALUE}};', ], ]); $this->add_responsive_control('submenu_padding_active', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu .current-menu-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_responsive_control('submenu_margin_active', [ 'label' => __('Margin', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-menu-desktop .sub-menu .current-menu-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); /* ---------- Toggle Button (Burger) ---------- */ $this->start_controls_section('section_toggle_button', [ 'label' => __('Toggle Button (Burger)', 'datis'), 'tab' => Controls_Manager::TAB_STYLE, ]); $this->add_control('toggle_icon', [ 'label' => __('Icon', 'datis'), 'type' => Controls_Manager::ICONS, 'default' => [ 'value' => 'eicon-menu-bar', 'library' => 'eicons', ], ]); $this->add_responsive_control('toggle_icon_size', [ 'label' => __('Icon Size', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 10, 'max' => 48]], 'selectors' => [ '{{WRAPPER}} .datis-burger svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .datis-burger i' => 'font-size: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('toggle_width', [ 'label' => __('Button Width', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 24, 'max' => 200]], 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'width: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('toggle_height', [ 'label' => __('Button Height', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 24, 'max' => 200]], 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'height: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('toggle_padding', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_control('toggle_bg_color', [ 'label' => __('Background', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'background-color: {{VALUE}};', ], ]); $this->add_control('toggle_icon_color', [ 'label' => __('Icon Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-burger svg path' => 'stroke: {{VALUE}};', ], ]); $this->add_responsive_control('toggle_border_radius', [ 'label' => __('Border Radius', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .datis-burger' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'toggle_border', 'selector' => '{{WRAPPER}} .datis-burger', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'toggle_shadow', 'selector' => '{{WRAPPER}} .datis-burger', ]); $this->end_controls_section(); /* ---------- Close Button ---------- */ $this->start_controls_section('section_close_button', [ 'label' => __('Close Button', 'datis'), 'tab' => Controls_Manager::TAB_STYLE, ]); $this->add_control('close_icon', [ 'label' => __('Icon', 'datis'), 'type' => Controls_Manager::ICONS, 'default' => [ 'value' => 'eicon-close', 'library' => 'eicons', ], ]); $this->add_responsive_control('close_icon_size', [ 'label' => __('Icon Size', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 10, 'max' => 48]], 'selectors' => [ '{{WRAPPER}} .datis-close svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', '{{WRAPPER}} .datis-close i' => 'font-size: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('close_width', [ 'label' => __('Button Width', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 24, 'max' => 200]], 'selectors' => [ '{{WRAPPER}} .datis-close' => 'width: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('close_height', [ 'label' => __('Button Height', 'datis'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['px'], 'range' => ['px' => ['min' => 24, 'max' => 200]], 'selectors' => [ '{{WRAPPER}} .datis-close' => 'height: {{SIZE}}{{UNIT}};', ], ]); $this->add_responsive_control('close_padding', [ 'label' => __('Padding', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .datis-close' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_control('close_bg_color', [ 'label' => __('Background', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-close' => 'background-color: {{VALUE}};', ], ]); $this->add_control('close_icon_color', [ 'label' => __('Icon Color', 'datis'), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .datis-close' => 'color: {{VALUE}};', '{{WRAPPER}} .datis-close svg path' => 'stroke: {{VALUE}};', ], ]); $this->add_responsive_control('close_border_radius', [ 'label' => __('Border Radius', 'datis'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .datis-close' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ]); $this->add_group_control(Group_Control_Border::get_type(), [ 'name' => 'close_border', 'selector' => '{{WRAPPER}} .datis-close', ]); $this->add_group_control(Group_Control_Box_Shadow::get_type(), [ 'name' => 'close_shadow', 'selector' => '{{WRAPPER}} .datis-close', ]); $this->end_controls_section(); } /* ========================================= * RENDER * ====================================== */ protected function render() { $settings = $this->get_settings_for_display(); $hover = ''; if ($settings['hover_style'] === 'hover_style_1') { $hover = 'hover-1'; } elseif ($settings['hover_style'] === 'hover_style_2') { $hover = 'hover-2'; } $menu_id = !empty($settings['menu_id']) ? $settings['menu_id'] : 0; if (!$menu_id) { echo '<p>' . esc_html__('Please select a menu.', 'datis') . '</p>'; return; } // تب دوم: قالب المنتوری $secondary_tab_template_id = !empty($settings['secondary_tab_template']) ? absint($settings['secondary_tab_template']) : 0; $has_tabs = !empty($secondary_tab_template_id); $primary_tab_label = !empty($settings['primary_tab_label']) ? $settings['primary_tab_label'] : __('Main menu', 'datis'); $secondary_tab_label = !empty($settings['secondary_tab_label']) ? $settings['secondary_tab_label'] : __('Secondary', 'datis'); $mobile_header_id = !empty($settings['mobile_header_tpl']) ? absint($settings['mobile_header_tpl']) : 0; $mobile_footer_id = !empty($settings['mobile_footer_tpl']) ? absint($settings['mobile_footer_tpl']) : 0; /* ---------- Burger Button ---------- */ echo '<button class="datis-burger" type="button" aria-controls="site-main-menu-mobile" aria-expanded="false">'; if (!empty($settings['toggle_icon'])) { Icons_Manager::render_icon($settings['toggle_icon'], ['aria-hidden' => 'true']); } else { // Fallback SVG (بدون تغییر) echo '<svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M3 6h18M3 12h18M3 18h18" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" /></svg>'; } echo '</button>'; /* ---------- Desktop Menu ---------- */ $mega_target = !empty($settings['mega_menu_render_selector']) ? $settings['mega_menu_render_selector'] : ''; echo '<nav class="datis-menu-desktop ' . esc_attr($hover) . '" aria-label="Site menu" data-mega-render-target="' . esc_attr($mega_target) . '">'; wp_nav_menu([ 'menu' => $menu_id, 'container' => false, 'menu_class' => 'menu-list', 'menu_id' => 'site-main-menu-desktop', 'walker' => \Datis_Walker::get_instance(), ]); echo '</nav>'; /* ---------- Mobile Menu (Drawer + Tabs) ---------- */ echo '<nav id="site-main-menu-mobile" class="datis-menu-mobile" aria-label="Site menu (mobile)">'; // Overlay echo '<div class="datis-overlay" aria-hidden="true"></div>'; // ❗ دکمه بستن از دراور خارج شده و اینجاست echo '<button class="datis-close" type="button" aria-label="' . esc_attr__('Close menu', 'datis') . '">'; if (!empty($settings['close_icon'])) { Icons_Manager::render_icon($settings['close_icon'], ['aria-hidden' => 'true']); } else { // SVG جدیدی که دادی بهعنوان fallback echo '<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M16.9166 11.0834L11.0833 16.9167M11.0832 11.0833L16.9165 16.9167" stroke="#F7F6FE" stroke-width="1.75" stroke-linecap="round"/> <path d="M8.16659 3.89414C9.8826 2.90148 11.8749 2.33334 13.9999 2.33334C20.4432 2.33334 25.6666 7.55669 25.6666 14C25.6666 20.4433 20.4432 25.6667 13.9999 25.6667C7.5566 25.6667 2.33325 20.4433 2.33325 14C2.33325 11.875 2.90139 9.88269 3.89404 8.16668" stroke="#F7F6FE" stroke-width="1.75" stroke-linecap="round"/> </svg>'; } echo '</button>'; // Drawer echo '<div class="datis-drawer" role="dialog" aria-modal="true">'; // ❌ دیگه دکمه بستن اینجا نیست // Header template فقط در موبایل if ($mobile_header_id) { echo '<div class="datis-mobile-only datis-menu-mobile-header">'; echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display($mobile_header_id); echo '</div>'; } // Tabs header (اگر تب دوم داریم) if ($has_tabs) { echo '<div class="datis-mobile-only datis-menu-mobile-tabs" role="tablist">'; echo '<button type="button" class="datis-menu-mobile-tab is-active" data-tab="primary" role="tab" aria-selected="true">'; echo esc_html($primary_tab_label); echo '</button>'; echo '<button type="button" class="datis-menu-mobile-tab" data-tab="secondary" role="tab" aria-selected="false">'; echo esc_html($secondary_tab_label); echo '</button>'; echo '</div>'; } echo '<div class="datis-menu-mobile-panels">'; // Panel: primary (منوی وردپرس) echo '<div class="datis-menu-mobile-panel is-active" data-panel="primary">'; wp_nav_menu([ 'menu' => $menu_id, 'container' => false, 'menu_class' => 'menu-list', 'menu_id' => 'site-main-menu-mobile-primary', 'walker' => \Datis_Walker::get_instance(), ]); echo '</div>'; // Panel: secondary (قالب المنتوری) if ($has_tabs) { echo '<div class="datis-menu-mobile-panel" data-panel="secondary">'; if ($secondary_tab_template_id) { echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display($secondary_tab_template_id); } echo '</div>'; } echo '</div>'; // .datis-menu-mobile-panels if ($mobile_footer_id) { echo '<div class="datis-mobile-only datis-menu-mobile-footer">'; echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display($mobile_footer_id); echo '</div>'; } echo '</div>'; // .datis-drawer echo '</nav>'; // .datis-menu-mobile } /* ========================================= * HELPERS * ====================================== */ private function get_menus() { $menus = wp_get_nav_menus(); $options = []; foreach ($menus as $menu) { $options[$menu->term_id] = $menu->name; } return $options; } private function get_elementor_templates() { $templates = get_posts([ 'post_type' => 'elementor_library', 'numberposts' => -1, 'post_status' => 'publish', ]); $opts = ['' => __('— None —', 'datis')]; foreach ($templates as $t) { $opts[$t->ID] = $t->post_title; } return $opts; } /* ========================================= * ASSETS * ====================================== */ public function __construct($data = [], $args = null) { parent::__construct($data, $args); add_action('elementor/editor/before_enqueue_scripts', [$this, 'enqueue_assets']); add_action('elementor/editor/before_enqueue_styles', [$this, 'enqueue_assets']); add_action('elementor/frontend/before_enqueue_scripts', [$this, 'enqueue_assets']); add_action('elementor/frontend/before_enqueue_styles', [$this, 'enqueue_assets']); } public function enqueue_assets() { wp_enqueue_style( 'datis-menu', DATIS_URI . '/inc/elementor/widgets/datis_menu/css/menu.css', [], DATIS_VER, 'all' ); wp_enqueue_script( 'datis-menu', DATIS_URI . '/inc/elementor/widgets/datis_menu/js/menu.js', [], DATIS_VER, true ); } } }
💾 保存文件
← 返回文件管理器