__( 'None', 'uicore-elements' ), 'author' => __( 'Author', 'uicore-elements' ), 'date' => __( 'Posted Date', 'uicore-elements' ), 'updated date' => __( 'Updated Date', 'uicore-elements' ), 'comment' => __( 'Comments Count', 'uicore-elements' ), 'reading time' => __( 'Reading Time', 'uicore-elements' ), 'category' => __( 'Category', 'uicore-elements' ), 'custom meta' => __( 'Custom Meta', 'uicore-elements' ), 'custom taxonomy' => __( 'Custom Taxonomy', 'uicore-elements' ), ]; //add woocomerce meta to options if woocommerce is instaled $options['product price'] = __( 'Product Price', 'uicore-elements' ); $options['product rating'] = __( 'Product Rating', 'uicore-elements' ); // $options['product stock'] = __( 'Product Stock', 'uicore-elements' ); $options['product category'] = __( 'Product Category', 'uicore-elements' ); $options['product tag'] = __( 'Product Tag', 'uicore-elements' ); $options['product attribute'] = __( 'Product Attribute', 'uicore-elements' ); $options['portfolio category'] = __( 'Portfolio Category', 'uicore-elements' ); $repeater = new \Elementor\Repeater(); $repeater->add_control('type',[ 'label' => __( 'Meta', 'uicore-elements' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => $options ] ); $repeater->add_control('type_custom',[ 'label' => __( 'Custom Field Name', 'uicore-elements' ), 'type' => Controls_Manager::TEXT, 'condition' => [ 'type' => ['custom meta','custom taxonomy'] ] ] ); $repeater->add_control('date_format',[ 'label' => esc_html__( 'Date Format', 'uicore-elements' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => esc_html__( 'Default', 'uicore-elements' ), '' => esc_html__( 'None', 'uicore-elements' ), 'F j, Y' => gmdate( 'F j, Y' ), 'Y-m-d' => gmdate( 'Y-m-d' ), 'm/d/Y' => gmdate( 'm/d/Y' ), 'd/m/Y' => gmdate( 'd/m/Y' ), 'custom' => esc_html__( 'Custom', 'uicore-elements' ), ], 'condition' => [ 'type' => ['date','updated date'] ] ] ); $repeater->add_control('custom_format',[ 'label' => esc_html__( 'Custom Format', 'uicore-elements' ), 'default' => get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), 'description' => sprintf( '%s', esc_html__( 'Documentation on date and time formatting', 'uicore-elements' ) ), 'condition' => [ 'date_format' => 'custom', 'type' => ['date','updated date'] ], ] ); $repeater->add_control('before',[ 'label' => __( 'Text Before', 'uicore-elements' ), 'type' => Controls_Manager::TEXT, 'condition' => [ 'type!' => 'none', ] ] ); $repeater->add_control('after',[ 'label' => __( 'Text After', 'uicore-elements' ), 'type' => Controls_Manager::TEXT, 'condition' => [ 'type!' => 'none', ] ] ); $repeater->add_control('autor_display',[ 'label' => __( 'Display Type', 'uicore-elements' ), 'type' => Controls_Manager::SELECT, 'default' => 'name', 'options' => [ 'name' => __( 'Name', 'uicore-elements' ), 'full' => __( 'Avatar & Name', 'uicore-elements' ), 'avatar' => __( 'Avatar', 'uicore-elements' ), ], 'condition' => [ 'type' => 'author', ], ] ); $repeater->add_control('icon',[ 'label' => __( 'Icon', 'uicore-elements' ), 'type' => Controls_Manager::ICONS, 'condition' => [ 'autor_display' => 'name', 'type!' => 'none', ], ] ); return $repeater->get_controls(); } function get_meta_style_controls($position = 'tb-meta') { $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => $position.'_meta_typography', 'selector' => '{{WRAPPER}} .ui-e-'.$position, 'separator' => 'before', ] ); $this->add_control( $position.'_meta_color', [ 'label' => __( 'Text Color', 'uicore-elements' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position => 'color: {{VALUE}}', ], ] ); $this->add_control( $position.'_link_color', [ 'label' => __( 'Link Color', 'uicore-elements' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item a' => 'color: {{VALUE}}', ], ] ); $this->add_control( $position.'_linkh_color', [ 'label' => __( 'Link Hover Color', 'uicore-elements' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item a:hover' => 'color: {{VALUE}}', ], ] ); $this->add_control( $position.'_meta_background', [ 'label' => __( 'Background Color', 'uicore-elements' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item' => 'background-color: {{VALUE}}', ], ] ); $this->add_control( $position.'_meta_radius', [ 'label' => esc_html__('Border Radius', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;' ], ] ); $this->add_group_control( \Elementor\Group_Control_Box_Shadow::get_type(), [ 'name' => $position.'_meta_shadow', 'label' => esc_html__( 'Box Shadow', 'uicore-elements' ), 'selector' => '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item', ] ); $this->add_responsive_control( $position.'_meta_padding', [ 'label' => esc_html__('Padding', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em', '%' ], 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' .ui-e-meta-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};' ] ] ); if($position === 'top'){ $this->add_responsive_control( $position.'_meta_margin', [ 'label' => esc_html__('Margin', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em', '%' ], 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};' ] ] ); }else{ $this->add_control($position.'_meta_margin',[ 'label' => __( 'Meta Top Space', 'uicore-elements' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'em' ], 'separator' => 'after', 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'default' => [ 'unit' => 'em', 'size' => 1.2, ], 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position => 'margin-top: {{SIZE}}em;', ], ] ); } $this->add_responsive_control($position.'_meta_gap',[ 'label' => __( 'Items Gap', 'uicore-elements' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 30, ], ], 'default' => [ 'unit' => 'px', 'size' => 8, ], 'selectors' => [ '{{WRAPPER}} .ui-e-'.$position.' ' => 'gap: {{SIZE}}px;', ], ] ); $this->add_control($position.'_meta_separator',[ 'label' => __( 'Separator', 'uicore-elements' ), 'type' => Controls_Manager::TEXT, ] ); if($position === 'top'){ $this->add_control($position.'_meta_placement',[ 'label' => __( 'Items placement', 'uicore-elements' ), 'type' => Controls_Manager::SELECT, 'default' => '', 'options' => [ 'start left' => __( 'Top Left', 'uicore-elements' ), 'start right' => __( 'Top Right', 'uicore-elements' ), 'end left' => __( 'Bottom Left', 'uicore-elements' ), 'end right' => __( 'Bottom Right', 'uicore-elements' ), ], 'selectors' => [ '{{WRAPPER}} .ui-e-post-top-meta' => 'place-content: {{VALUE}};', ], ] ); } } function get_meta_the_author($mode){ global $post; $author_id = $post->post_author; // name, full, avatar if($mode === 'avatar'){ $display = ''; }elseif($mode === 'full'){ $display = ' '.get_the_author_meta('display_name', $author_id); }else{ $display = esc_html(\get_the_author_meta('display_name', $author_id)); } $link = sprintf( '', esc_url( get_author_posts_url( $author_id) ), /* translators: %s: Author's display name. */ esc_attr( sprintf( __( 'View %s’s posts', 'uicore-elements' ), esc_html($display) ) ), $display ); return $link; } function get_woo_meta($type) { global $product; if (empty($product)) { return 'No product found.'; } switch ($type) { case 'product price': return $product->get_price_html(); case 'product rating': return $product->get_rating_html(); case 'product category': return get_the_term_list($product->get_id(), 'product_cat', '', ', ', ''); case 'product tag': return get_the_term_list($product->get_id(), 'product_tag', '', ', ', ''); case 'product attribute': return wc_display_product_attributes($product); default: return 'Invalid meta type.'; } } function display_meta($meta){ if($meta['type'] === 'none') return; \Elementor\Icons_Manager::render_icon( $meta['icon'], [ 'aria-hidden' => 'true', 'class'=>'ui-e-meta-icon' ],'span' ); if($meta['before']) echo ''.esc_html($meta['before']).''; $type = $meta['type']; if($type === 'author'){ echo $this->get_meta_the_author($meta['autor_display']); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped }elseif($type === 'date'){ echo Helper::format_date(get_the_date(), $meta['date_format'], $meta['custom_format']); }elseif($type === 'updated date'){ echo Helper::format_date(get_the_modified_date(), $meta['date_format'], $meta['custom_format']); }elseif($type === 'category'){ echo Helper::get_taxonomy('category'); }elseif($type === 'portfolio category'){ echo Helper::get_taxonomy('portfolio_category'); }elseif($type === 'comment'){ echo esc_html(get_comments_number()); }elseif($type === 'custom meta'){ echo esc_html(get_post_meta( get_the_ID(), $meta['type_custom'], true )); }elseif($type === 'custom taxonomy'){ echo Helper::get_taxonomy($meta['type_custom']); }elseif($type === 'reading time'){ echo esc_html(Helper::get_reading_time()); }else if(strpos($type, 'product') === 0){ echo wp_kses_post($this->get_woo_meta($type)); }else{ echo \esc_html($type); } if($meta['after']) echo ''.esc_html($meta['after']).''; } }