BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
public_html
/
CTR
/
wp-content
/
plugins
/
porto-functionality
/
builders
/
elements
/
single
📤 Upload
📝 New File
📁 New Folder
Close
Editing: init.php
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Single Builder * * @since 2.3.0 */ use Elementor\Controls_Manager; if ( ! class_exists( 'PortoBuildersSingle' ) ) : class PortoBuildersSingle { /** * The Shortcodes * * @access private * @var array $shortcodes * @since 2.3.0 */ private $shortcodes = array( 'image', 'author-box', 'meta', 'comments', 'related', 'navigation', 'share', 'post-format', ); /** * Edit Post * * @access public * @var object $edit_post * @since 2.3.0 */ public $edit_post = null; /** * Edit Post Type * * @access public * @var object $edit_post_type * @since 2.3.0 */ public $edit_post_type = null; /** * Global Instance Objects * * @var array $instances * @since 2.3.0 * @access private */ private static $instance = null; /** * Is Single Builder Page * * @access protected * @var object $is_single * @since 2.3.0 */ protected $is_single = false; /** * WPB Post Elements Flag * * @access private * @var object $wpb_display_post_page_elements * @since 2.3.0 */ private $wpb_display_post_page_elements = null; public static function get_instance() { if ( ! self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { $this->init(); } /** * Init Single Builder * * @since 2.3.0 * @access public */ public function init() { $this->shortcodes = apply_filters( 'porto_builder_single_shortcodes', $this->shortcodes ); if ( defined( 'WPB_VC_VERSION' ) ) { add_action( 'template_redirect', function () { $should_add_shortcodes = false; if ( ( is_singular( PortoBuilders::BUILDER_SLUG ) && 'single' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) || ! empty( $_GET['vcv-ajax'] ) || ( function_exists( 'porto_is_ajax' ) && porto_is_ajax() && ! empty( $_GET[ PortoBuilders::BUILDER_SLUG ] ) ) ) { $should_add_shortcodes = true; } elseif ( function_exists( 'porto_check_builder_condition' ) && porto_check_builder_condition( 'single' ) ) { $should_add_shortcodes = true; } if ( $should_add_shortcodes ) { foreach ( $this->shortcodes as $shortcode ) { add_shortcode( 'porto_single_' . str_replace( '-', '_', $shortcode ), array( $this, 'shortcode_single_' . str_replace( '-', '_', $shortcode ) ) ); } } } ); add_action( 'admin_init', function () { $should_add_shortcodes = false; if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'vc_save' == $_REQUEST['action'] ) { $should_add_shortcodes = true; } elseif ( isset( $_POST['action'] ) && 'editpost' == $_POST['action'] && isset( $_POST['post_type'] ) && PortoBuilders::BUILDER_SLUG == $_POST['post_type'] ) { $should_add_shortcodes = true; } if ( $should_add_shortcodes ) { foreach ( $this->shortcodes as $shortcode ) { add_shortcode( 'porto_single_' . str_replace( '-', '_', $shortcode ), array( $this, 'shortcode_single_' . str_replace( '-', '_', $shortcode ) ) ); } } } ); if ( is_admin() || ( function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { add_action( 'vc_after_init', array( $this, 'wpb_custom_single_shortcodes' ) ); } add_filter( 'vc_autocomplete_porto_single_related_builder_id_callback', 'builder_id_callback' ); add_filter( 'vc_autocomplete_porto_single_related_builder_id_render', 'builder_id_render' ); //apply changed post add_action( 'wp_ajax_porto_single_builder_preview_wpb_apply', array( $this, 'apply_preview_wpb_post' ) ); } if ( defined( 'ELEMENTOR_VERSION' ) ) { if ( is_admin() && isset( $_GET['action'] ) && 'elementor' === $_GET['action'] ) { add_action( 'elementor/elements/categories_registered', function( $self ) { $self->add_category( 'porto-single', array( 'title' => __( 'Porto Single Builder', 'porto-functionality' ), 'active' => true, ) ); } ); } add_action( 'elementor/widgets/register', array( $this, 'elementor_custom_single_shortcodes' ), 10, 1 ); //apply changed post add_action( 'wp_ajax_porto_single_builder_preview_apply', array( $this, 'apply_preview_post' ) ); add_action( 'elementor/documents/register_controls', array( $this, 'register_elementor_preview_controls' ) ); } } /** * Sigle Post Feature Image Widget * * @since 2.3.0 * @access public */ public function shortcode_single_image( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } $el_class = ! empty( $atts['el_class'] ) ? $atts['el_class'] : '' ; $video_code = get_post_meta( get_the_ID(), 'video_code', true ); if ( $video_code ) { ob_start(); if ( ! empty( $el_class ) ) { ?> <div class="<?php echo esc_attr( $el_class ); ?>"> <?php } porto_get_template_part( 'views/posts/post-media/video' ); if ( ! empty( $el_class ) ) { ?> </div> <?php } $this->reset_global_single_variable(); return ob_get_clean(); } global $porto_settings; $share_position = ! empty( $porto_settings['post-share-position'] ) ? $porto_settings['post-share-position'] : ''; $args = array(); $internal_css = ''; $args['carousel_class'] = ''; $args['navigation'] = false; if ( isset( $atts['navigation'] ) && ( true == $atts['navigation'] || 'yes' == $atts['navigation'] ) ) { $args['navigation'] = true; if ( ! empty( $atts['nav_pos'] ) ) { $args['carousel_class'] .= esc_attr( $atts['nav_pos'] ) . ' '; } if ( ! empty( $atts['nav_pos2'] ) ) { $args['carousel_class'] .= esc_attr( $atts['nav_pos2'] ) . ' '; } if ( ! empty( $atts['nav_type'] ) ) { $args['carousel_class'] .= esc_attr( $atts['nav_type'] ) . ' '; } if ( ! empty( $atts['show_nav_hover'] ) ) { $args['carousel_class'] .= ' show-nav-hover '; } } $args['pagination'] = false; if ( isset( $atts['pagination'] ) && ( true == $atts['pagination'] || 'yes' == $atts['pagination'] ) ) { $args['pagination'] = true; if ( ! empty( $atts['dots_style'] ) ) { $args['carousel_class'] .= esc_attr( $atts['dots_style'] ) . ' '; } if ( ! empty( $atts['dots_pos'] ) ) { $args['carousel_class'] .= esc_attr( $atts['dots_pos'] ); } } if ( ! empty( $atts['hover_effect'] ) ) { // hover effect $args['hover_effect'] = $atts['hover_effect']; } if ( ! empty( $atts['show_thumbnail'] ) ) { // add thumnail image $args['show_thumbnail'] = $atts['show_thumbnail']; if ( isset( $atts['thumbnail_space'] ) ) { $args['thumbnail_space'] = $atts['thumbnail_space']; } if ( ! empty( $atts['image_thumbnail_size'] ) ) { $args['image_thumbnail_size'] = $atts['image_thumbnail_size']; } } $args['grid_column'] = ! empty( $atts['grid_column'] ) ? $atts['grid_column'] : '3'; $args['grid_thumbnail_size'] = ! empty( $atts['grid_thumbnail_size'] ) ? $atts['grid_thumbnail_size'] : ''; if ( ! empty( $atts['share_position'] ) && ( true == $atts['share_position'] || 'yes' == $atts['share_position'] ) ) { $porto_settings['post-share-position'] = 'advance'; } else { $porto_settings['post-share-position'] = ''; } if ( ! empty( $atts['follow_meta'] ) && ( 'yes' == $atts['follow_meta'] || $atts['follow_meta'] ) ) { $slideshow_type = get_post_meta( get_the_ID(), 'slideshow_type', true ); if ( ! $slideshow_type ) { $slideshow_type = 'images'; } $porto_settings['post-zoom'] = true; } else { $slideshow_type = ! empty( $atts['show_type'] ) ? $atts['show_type'] : 'images'; if ( 'masonry' == $slideshow_type ) { $slideshow_type = 'grid'; $args['masonry'] = true; } $args['image_size'] = ! empty( $atts['thumbnail_size'] ) ? $atts['thumbnail_size'] : 'medium'; $image_zoom = ! empty( $porto_settings['post-zoom'] ) ? $porto_settings['post-zoom'] : ''; $porto_settings['post-zoom'] = ! empty( $atts['popup'] ) ? ( 'yes' == $atts['popup'] || true == $atts['popup'] ) : false; } if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_image', array( array( 'param_name' => 'border_radius', 'selectors' => true, ), array( 'param_name' => 'overlay_bgc', 'selectors' => true, ), array( 'param_name' => 'icon_bgc', 'selectors' => true, ), array( 'param_name' => 'icon_clr', 'selectors' => true, ), array( 'param_name' => 'icon_width', 'selectors' => true, ), array( 'param_name' => 'icon_size', 'selectors' => true, ), array( 'param_name' => 'image_height', 'selectors' => true, ), array( 'param_name' => 'image_padding', 'selectors' => true, ), array( 'param_name' => 'dots_pos_top', 'selectors' => true, ), array( 'param_name' => 'dots_pos_bottom', 'selectors' => true, ), array( 'param_name' => 'dots_pos_left', 'selectors' => true, ), array( 'param_name' => 'dots_pos_right', 'selectors' => true, ), array( 'param_name' => 'dots_br_color', 'selectors' => true, ), array( 'param_name' => 'dots_abr_color', 'selectors' => true, ), array( 'param_name' => 'dots_bg_color', 'selectors' => true, ), array( 'param_name' => 'dots_abg_color', 'selectors' => true, ), array( 'param_name' => 'dots_original', 'selectors' => true, ), array( 'param_name' => 'dots_visible', 'selectors' => true, ), array( 'param_name' => 'nav_visible', 'selectors' => true, ), array( 'param_name' => 'nav_fs', 'selectors' => true, ), array( 'param_name' => 'nav_width', 'selectors' => true, ), array( 'param_name' => 'nav_height', 'selectors' => true, ), array( 'param_name' => 'nav_br', 'selectors' => true, ), array( 'param_name' => 'navs_h_origin', 'selectors' => true, ), array( 'param_name' => 'nav_h_pos', 'selectors' => true, ), array( 'param_name' => 'nav_v_pos', 'selectors' => true, ), array( 'param_name' => 'nav_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_color', 'selectors' => true, ), array( 'param_name' => 'nav_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_br_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_br_color', 'selectors' => true, ), array( 'param_name' => 'icon_pos', 'selectors' => true, ), array( 'param_name' => 'thumbnail_space', 'selectors' => true, ), array( 'param_name' => 'flick_opacity', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_image', $atts ); if ( ! empty( $shortcode_class ) ) { $el_class .= ' wpb-image' . $shortcode_class; } if ( ! empty( $atts['icon_type'] ) ) { switch ( $atts['icon_type'] ) { case 'simpleline': if ( ! empty( $atts['icon_simpleline'] ) ) { $args['icon_cl'] = $atts['icon_simpleline']; } break; case 'porto': if ( ! empty( $atts['icon_porto'] ) ) { $args['icon_cl'] = $atts['icon_porto']; } break; } } elseif ( ! empty( $atts['icon_cl'] ) ) { $args['icon_cl'] = $atts['icon_cl']; } } elseif ( defined( 'ELEMENTOR_VERSION' ) && ! empty( $atts['page_builder'] ) ) { if ( isset( $atts['icon_cl'] ) && ! empty( $atts['icon_cl']['value'] ) ) { if ( isset( $atts['icon_cl']['library'] ) && ! empty( $atts['icon_cl']['value']['id'] ) ) { $args['icon_cl'] = $atts['icon_cl']['value']['id']; } else { $args['icon_cl'] = $atts['icon_cl']['value']; } } } ob_start(); if ( ! empty( $el_class ) ) { ?> <div class="<?php echo esc_attr( $el_class ); ?>"> <?php } porto_get_template_part( 'views/posts/post-media/' . sanitize_file_name( $slideshow_type ), null, $args ); if ( ! empty( $el_class ) ) { ?> </div> <?php } $this->reset_global_single_variable(); $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); //retreive Porto Settings if ( ! empty( $image_zoom ) ) { $porto_settings['post-zoom'] = $image_zoom; } if ( ! empty( $share_position ) ) { $porto_settings['post-share-position'] = $share_position; } return $result; } /** * Sigle Post Author Box Widget * * @since 2.3.0 * @access public */ public function shortcode_single_author_box( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } global $porto_settings; $internal_css = ''; $custom_css = ''; ob_start(); if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_author_box', array( array( 'param_name' => 'author_icon_space', 'selectors' => true, ), array( 'param_name' => 'author_space', 'selectors' => true, ), array( 'param_name' => 'author_image_size', 'selectors' => true, ), array( 'param_name' => 'author_image_radius', 'selectors' => true, ), array( 'param_name' => 'heading_title_style', 'selectors' => true, ), array( 'param_name' => 'author_title_color', 'selectors' => true, ), array( 'param_name' => 'heading_name_style', 'selectors' => true, ), array( 'param_name' => 'author_name_color', 'selectors' => true, ), array( 'param_name' => 'heading_desc_style', 'selectors' => true, ), array( 'param_name' => 'author_desc_color', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_author_box', $atts ); if ( ! empty( $shortcode_class ) ) { $custom_css .= ' wpb-post-author' . $shortcode_class; } if ( ! empty( $atts['el_class'] ) ) { $custom_css .= ' ' . $atts['el_class']; } } if ( ! empty( $custom_css ) ) { ?> <div class="<?php echo esc_attr( $custom_css ); ?>"> <?php } $author_icon = ! empty( $porto_settings['post-title-style'] ) ? $porto_settings['post-title-style'] : ''; $post_author = ! empty( $porto_settings['post-author'] ) ? $porto_settings['post-author'] : ''; $porto_settings['post-author'] = true; if ( ! empty( $atts['author_icon'] ) && ( ( 'yes' == $atts['author_icon'] ) || ( true == $atts['author_icon'] ) ) ) { $porto_settings['post-title-style'] = 'without-icon'; } else { $porto_settings['post-title-style'] = ''; } porto_get_template_part( 'views/posts/single/author' ); if ( ! empty( $custom_css ) ) { ?> </div> <?php } $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); //retreive Porto Settings if ( ! empty( $author_icon ) ) { $porto_settings['post-title-style'] = $author_icon; } if ( ! empty( $post_author ) ) { $porto_settings['post-author'] = $post_author; } return $result; } /** * Sigle Post Navigation Widget * * @since 2.3.0 * @access public */ public function shortcode_single_navigation( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } $internal_css = ''; $shortcode_class = ''; if ( ( function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { $post_type = $this->edit_post_type; } else { $post_type = get_post_type(); } if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_navigation', array( array( 'param_name' => 'nav_space', 'selectors' => true, ), array( 'param_name' => 'nav_typography', 'selectors' => true, ), array( 'param_name' => 'nav_color', 'selectors' => true, ), array( 'param_name' => 'nav_hover_color', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_navigation', $atts ); if ( ! empty( $atts['nav_align'] ) ) { $internal_css .= ' .' . trim( $shortcode_class ) . '{ justify-content: ' . $atts['nav_align'] . '; }'; } $prev_icon = ! empty( $atts['nav_icon_prev'] ) ? $atts['nav_icon_prev'] : 'porto-icon-chevron-left'; $next_icon = ! empty( $atts['nav_icon_next'] ) ? $atts['nav_icon_next'] : 'porto-icon-chevron-right'; if ( ! empty( $atts['el_class'] ) ) { $shortcode_class .= ' ' . $atts['el_class']; } } elseif ( defined( 'ELEMENTOR_VERSION' ) ) { $prev_icon = ! empty( $atts['nav_icon_prev']['value'] ) ? $atts['nav_icon_prev']['value'] : 'porto-icon-chevron-left'; $next_icon = ! empty( $atts['nav_icon_next']['value'] ) ? $atts['nav_icon_next']['value'] : 'porto-icon-chevron-right'; } ob_start(); ?> <div class="single-navigation d-flex<?php echo esc_attr( ! empty( $shortcode_class ) ? $shortcode_class : '' ); ?>"> <style><?php porto_filter_inline_css( wp_strip_all_tags( $internal_css ) ); ?></style> <?php previous_post_link( '%link', '<div data-bs-tooltip title="' . esc_attr__( 'Previous', 'porto-functionality' ) . '" class="' . $post_type . '-nav-prev"><i class="' . $prev_icon . '"></i></div>' ); ?> <?php next_post_link( '%link', '<div data-bs-tooltip title="' . esc_attr__( 'Next', 'porto-functionality' ) . '" class="' . $post_type . '-nav-next"><i class="' . $next_icon . '"></i></div>' ); ?> </div> <?php $this->reset_global_single_variable(); $result = ob_get_clean(); return $result; } /** * Sigle Post Meta Widget * * @since 2.3.0 * @access public */ public function shortcode_single_meta( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } global $porto_settings; $internal_css = ''; $el_class = ''; $shortcode_class = ''; $args = array(); if ( isset( $porto_settings['post-metas'] ) ) { $post_metas = $porto_settings['post-metas']; } if ( ! empty( $atts['post-metas'] ) ) { $porto_settings['post-metas'] = 'string' === gettype( $atts['post-metas'] ) ? explode( ',', $atts['post-metas'] ) : $atts['post-metas']; } else { $porto_settings['post-metas'] = array(); } if ( ! empty( $atts['show_divider'] ) && ( 'yes' == $atts['show_divider'] || true == $atts['show_divider'] ) ) { $el_class = 'post-meta-divider'; } if ( ! empty( $atts['elementor_id'] ) ) { $shortcode_class = "elementor-element-{$atts['elementor_id']}"; } if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_meta', array( array( 'param_name' => 'meta_space', 'selectors' => true, ), array( 'param_name' => 'icon_space', 'selectors' => true, ), array( 'param_name' => 'meta_style', 'selectors' => true, ), array( 'param_name' => 'meta_color', 'selectors' => true, ), array( 'param_name' => 'meta_hover_color', 'selectors' => true, ), array( 'param_name' => 'divider_color', 'selectors' => true, ), array( 'param_name' => 'divider_space', 'selectors' => true, ), ) ); $el_class .= $shortcode_class; if ( ! empty( $atts['meta_align'] ) ) { $internal_css .= ' .' . trim( $shortcode_class ) . " { text-align:{$atts['meta_align']}; }"; } $internal_css .= PortoShortcodesClass::generate_wpb_css( 'porto_single_meta', $atts ); if ( ! empty( $atts['el_class'] ) ) { $el_class .= ' ' . $atts['el_class']; } } $args['el_class'] = $el_class; $args['hide_icon'] = isset( $atts['hide_icon'] ) ? ( 'yes' == $atts['hide_icon'] || true == $atts['hide_icon'] ) : false; if ( $args['hide_icon'] ) { $internal_css .= ' .' . trim( $shortcode_class ) . ' .meta-date > i { display: none; }'; } else { $internal_css .= ' .' . trim( $shortcode_class ) . ' .meta-like span > i { display: inline-block; }'; } if ( ! empty( $porto_settings['post-metas'] ) && is_array( $porto_settings['post-metas'] ) && in_array( 'date', $porto_settings['post-metas'] ) ) { $args['show_date'] = true; } $args['hide_by'] = isset( $atts['hide_by'] ) ? ( 'yes' == $atts['hide_by'] || true == $atts['hide_by'] ) : false; ob_start(); porto_get_template_part( 'views/posts/single/meta', null, $args ); //retreive Porto Settings if ( isset( $post_metas ) ) { $porto_settings['post-metas'] = $post_metas; } else { unset( $porto_settings['post-metas'] ); } $this->reset_global_single_variable(); $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); return $result; } /** * Sigle Post Comments Widget * * @since 2.3.0 * @access public */ public function shortcode_single_comments( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } ob_start(); $internal_css = ''; $el_class = ''; if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_comments', array( array( 'param_name' => 'comments_spacing', 'selectors' => true, ), array( 'param_name' => 'comments_reply', 'selectors' => true, ), array( 'param_name' => 'comments_form', 'selectors' => true, ), array( 'param_name' => 'comment_image_between', 'selectors' => true, ), array( 'param_name' => 'comment_image_width', 'selectors' => true, ), array( 'param_name' => 'comment_image_radius', 'selectors' => true, ), array( 'param_name' => 'comment_title', 'selectors' => true, ), array( 'param_name' => 'comment_title_color', 'selectors' => true, ), array( 'param_name' => 'comment_name_color', 'selectors' => true, ), array( 'param_name' => 'comment_name', 'selectors' => true, ), array( 'param_name' => 'comment_setting', 'selectors' => true, ), array( 'param_name' => 'comment_setting_color', 'selectors' => true, ), array( 'param_name' => 'comment_setting_h_color', 'selectors' => true, ), array( 'param_name' => 'comment_date', 'selectors' => true, ), array( 'param_name' => 'comment_date_color', 'selectors' => true, ), array( 'param_name' => 'comment_text', 'selectors' => true, ), array( 'param_name' => 'comment_text_color', 'selectors' => true, ), array( 'param_name' => 'form_heading', 'selectors' => true, ), array( 'param_name' => 'comment_form_heading_color', 'selectors' => true, ), array( 'param_name' => 'comment_reply', 'selectors' => true, ), array( 'param_name' => 'comment_form_reply_color', 'selectors' => true, ), array( 'param_name' => 'comment_form_reply_color_hover', 'selectors' => true, ), array( 'param_name' => 'comment_form_reply_space', 'selectors' => true, ), array( 'param_name' => 'comment_label', 'selectors' => true, ), array( 'param_name' => 'comment_form_label_color', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_comments', $atts ); if ( ! empty( $shortcode_class ) ) { $el_class .= ' wpb-post-comments' . $shortcode_class; } if ( ! empty( $atts['el_class'] ) ) { $el_class .= ' ' . $atts['el_class']; } } if ( ! empty( $el_class ) ) { ?> <div class="<?php echo esc_attr( $el_class ); ?>"> <?php } global $post_layout, $porto_settings; $post_layout_type = ! empty( $porto_settings['post-layout'] ) ? $porto_settings['post-layout'] : 'full'; $post_author_icon = ! empty( $porto_settings['post-title-style'] ) ? $porto_settings['post-title-style'] : ''; if ( ! empty( $atts['comment_author_icon'] ) && ( 'yes' == $atts['comment_author_icon'] || true == $atts['comment_author_icon'] ) ) { $porto_settings['post-title-style'] = 'without-icon'; } else { $porto_settings['post-title-style'] = 'with-icon'; } $soft_mode = ! apply_filters( 'porto_legacy_mode', true ); if ( $soft_mode ) { $post_layout = 'modern'; } comments_template(); if ( $soft_mode ) { $post_layout = $post_layout_type; } if ( ! empty( $post_author_icon ) ) { $porto_settings['post-title-style'] = $post_author_icon; } if ( ! empty( $el_class ) ) { ?> </div> <?php } $this->reset_global_single_variable(); $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); return $result; } /** * Sigle Post Related Widget * * @since 2.3.0 * @access public */ public function shortcode_single_related( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } if ( empty( $atts ) ) { $atts = array(); } if ( $template = porto_shortcode_template( 'porto_posts_grid' ) ) { ob_start(); $internal_css = ''; if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_related', array( array( 'param_name' => 'spacing', 'selectors' => true, ), array( 'param_name' => 'p_align', 'selectors' => true, ), array( 'param_name' => 'p_margin', 'selectors' => true, ), array( 'param_name' => 'lm_width', 'selectors' => true, ), array( 'param_name' => 'lm_typography', 'selectors' => true, ), array( 'param_name' => 'lm_padding', 'selectors' => true, ), array( 'param_name' => 'lm_spacing', 'selectors' => true, ), array( 'param_name' => 'filter_align', 'selectors' => true, ), array( 'param_name' => 'filter_between_spacing', 'selectors' => true, ), array( 'param_name' => 'filter_spacing', 'selectors' => true, ), array( 'param_name' => 'filter_typography', 'selectors' => true, ), array( 'param_name' => 'filter_normal_bgc', 'selectors' => true, ), array( 'param_name' => 'filter_normal_color', 'selectors' => true, ), array( 'param_name' => 'filter_active_bgc', 'selectors' => true, ), array( 'param_name' => 'filter_active_color', 'selectors' => true, ), array( 'param_name' => 'dots_pos_top', 'selectors' => true, ), array( 'param_name' => 'dots_pos_bottom', 'selectors' => true, ), array( 'param_name' => 'dots_pos_left', 'selectors' => true, ), array( 'param_name' => 'dots_pos_right', 'selectors' => true, ), array( 'param_name' => 'dots_br_color', 'selectors' => true, ), array( 'param_name' => 'dots_abr_color', 'selectors' => true, ), array( 'param_name' => 'dots_bg_color', 'selectors' => true, ), array( 'param_name' => 'dots_abg_color', 'selectors' => true, ), array( 'param_name' => 'dots_original', 'selectors' => true, ), array( 'param_name' => 'dots_visible', 'selectors' => true, ), array( 'param_name' => 'nav_visible', 'selectors' => true, ), array( 'param_name' => 'nav_fs', 'selectors' => true, ), array( 'param_name' => 'nav_width', 'selectors' => true, ), array( 'param_name' => 'nav_height', 'selectors' => true, ), array( 'param_name' => 'nav_br', 'selectors' => true, ), array( 'param_name' => 'navs_h_origin', 'selectors' => true, ), array( 'param_name' => 'nav_h_pos', 'selectors' => true, ), array( 'param_name' => 'nav_v_pos', 'selectors' => true, ), array( 'param_name' => 'nav_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_color', 'selectors' => true, ), array( 'param_name' => 'nav_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_bg_color', 'selectors' => true, ), array( 'param_name' => 'nav_br_color', 'selectors' => true, ), array( 'param_name' => 'nav_h_br_color', 'selectors' => true, ), array( 'param_name' => 'flick_opacity', 'selectors' => true, ), ) ); // Frontend editor $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_related', $atts ); } elseif ( defined( 'ELEMENTOR_VERSION' ) ) { if ( empty( $atts['spacing'] ) ) { $atts['spacing'] = ''; } if ( ! empty( $atts['count'] ) && is_array( $atts['count'] ) ) { if ( isset( $atts['count']['size'] ) ) { $atts['count'] = $atts['count']['size']; } else { $atts['count'] = ''; } } } if ( ( function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { $atts['post_type'] = $this->edit_post_type; $atts['related_post'] = $this->edit_post->ID; } else { global $post; $atts['post_type'] = get_post_type(); $atts['related_post'] = $post->ID; } include $template; $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); $this->reset_global_single_variable(); return $result; } } /** * Sigle Post Share Widget * * @since 2.3.0 * @access public */ public function shortcode_single_share( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } global $porto_settings; $internal_css = ''; $el_class = ''; $share_position = ! empty( $porto_settings['post-share-position'] ) ? $porto_settings['post-share-position'] : ''; $post_share = ! empty( $porto_settings['post-share'] ) ? $porto_settings['post-share'] : ''; $share_enable = ! empty( $porto_settings['share-enable'] ) ? $porto_settings['share-enable'] : ''; $with_icon = ! empty( $porto_settings['post-title-style'] ) ? $porto_settings['post-title-style'] : ''; ob_start(); if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_share', array( array( 'param_name' => 'share_inline', 'selectors' => true, ), array( 'param_name' => 'hide_heading', 'selectors' => true, ), array( 'param_name' => 'icon_space', 'selectors' => true, ), array( 'param_name' => 'share_heading_style', 'selectors' => true, ), array( 'param_name' => 'title_color', 'selectors' => true, ), array( 'param_name' => 'title_space', 'selectors' => true, ), array( 'param_name' => 'share_icons', 'selectors' => true, ), array( 'param_name' => 'share_width', 'selectors' => true, ), array( 'param_name' => 'share_radius', 'selectors' => true, ), array( 'param_name' => 'share_space', 'selectors' => true, ), array( 'param_name' => 'share_icon_box_shadow', 'selectors' => true, ), array( 'param_name' => 'share_color_normal', 'selectors' => true, ), array( 'param_name' => 'share_bg_color_normal', 'selectors' => true, ), array( 'param_name' => 'share_color_hover', 'selectors' => true, ), array( 'param_name' => 'share_bg_color_hover', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_share', $atts ); if ( ! empty( $shortcode_class ) ) { $el_class .= ' wpb-post-share' . $shortcode_class; } if ( ! empty( $atts['el_class'] ) ) { $el_class .= ' ' . $atts['el_class']; } } if ( ! empty( $el_class ) ) { ?> <div class="<?php echo esc_attr( $el_class ); ?>"> <?php } $style = ''; if ( ! empty( $atts['share_inline'] ) && ( 'yes' == $atts['share_inline'] || true == $atts['share_inline'] ) ) { $atts['style'] = 'inline'; } $porto_settings['post-share'] = true; $porto_settings['share-enable'] = true; $porto_settings['post-share-position'] = ''; if ( ! empty( $atts['with_icon'] ) && ( 'yes' == $atts['with_icon'] || true == $atts['with_icon'] ) ) { $porto_settings['post-title-style'] = 'without-icon'; } else { $porto_settings['post-title-style'] = ''; } porto_get_template_part( 'views/posts/single/share', null, $atts ); if ( ! empty( $el_class ) ) { ?> </div> <?php } $this->reset_global_single_variable(); $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); //retreive Porto Settings if ( ! empty( $share_position ) ) { $porto_settings['post-share-position'] = $share_position; } if ( ! empty( $post_share ) ) { $porto_settings['post-share'] = $post_share; } if ( ! empty( $share_enable ) ) { $porto_settings['share-enable'] = $share_enable; } if ( ! empty( $with_icon ) ) { $porto_settings['post-title-style'] = $with_icon; } return $result; } /** * Single Post Format Widget * * @since 2.5.0 * @access public */ public function shortcode_single_post_format( $atts ) { if ( ( ! $this->restore_global_single_variable() && function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) || ( ! $this->restore_global_single_variable() && function_exists( 'vc_is_inline' ) && vc_is_inline() ) ) { return null; } global $porto_settings; $post_format = ''; $internal_css = ''; $el_class = ''; if ( ! empty( $porto_settings['post-format'] ) ) { $post_format = $porto_settings['post-format']; } $porto_settings['post-format'] = true; if ( defined( 'WPB_VC_VERSION' ) && empty( $atts['page_builder'] ) ) { // Shortcode class $shortcode_class = ' wpb_custom_' . PortoShortcodesClass::get_global_hashcode( $atts, 'porto_single_post_format', array( array( 'param_name' => 'format_heading', 'selectors' => true, ), array( 'param_name' => 'format_padding', 'selectors' => true, ), array( 'param_name' => 'format_radius', 'selectors' => true, ), array( 'param_name' => 'format_color', 'selectors' => true, ), array( 'param_name' => 'format_bg_color', 'selectors' => true, ), array( 'param_name' => 'format_shadow', 'selectors' => true, ), ) ); $internal_css = PortoShortcodesClass::generate_wpb_css( 'porto_single_post_format', $atts ); if ( ! empty( $shortcode_class ) ) { $el_class .= ' wpb-post-format' . $shortcode_class; } if ( ! empty( $atts['el_class'] ) ) { $el_class .= ' ' . $atts['el_class']; } } if ( ! empty( $atts['page_builder'] ) ) { $el_class .= ' ' . $atts['elementor_id']; } ob_start(); if ( ! empty( $el_class ) ) { ?> <div class="<?php echo esc_attr( $el_class ); ?>"> <?php } porto_post_format(); $internal_css .= ' .' . str_replace( ' ', '.', trim( esc_attr( $el_class ) ) ) . ' .format { display: inline-block; margin: 0; }'; if ( ! empty( $el_class ) ) { ?> </div> <?php } $result = PortoShortcodesClass::generate_insert_css( ob_get_clean(), $internal_css ); if ( ! empty( $post_format ) ) { $porto_settings['post-format'] = $post_format; } return $result; } /** * Register Single Builder shortcodes for WP Bakery * * @since 2.3.0 * @access public */ public function wpb_custom_single_shortcodes() { if ( ! $this->wpb_display_post_page_elements ) { $this->wpb_display_post_page_elements = PortoBuilders::check_load_wpb_elements( 'single' ); } if ( ! $this->wpb_display_post_page_elements ) { return; } // feature image $feature_slide = porto_vc_product_slider_fields(); $feature_slide[0]['dependency'] = $feature_slide[19]['dependency'] = $feature_slide[34]['dependency'] = $feature_slide[35]['dependency'] = array( 'element' => 'show_type', 'value' => array( 'images' ), ); $feature_slide[1]['value'] = array( __( 'Middle', 'porto-functionality' ) => '', __( 'Middle Inside', 'porto-functionality' ) => 'nav-pos-inside', __( 'Middle of Images', 'porto-functionality' ) => 'nav-center-images-only', __( 'Middle Outside', 'porto-functionality' ) => 'nav-pos-outside', ); $feature_slide[3]['dependency'] = array( 'element' => 'navigation', 'value' => 'yes', ); unset( $feature_slide[33] ); unset( $feature_slide[32] ); $feature_slide[0]['std'] = $feature_slide[4]['std'] = $feature_slide[19]['std'] = ''; $left = is_rtl() ? 'right' : 'left'; $right = is_rtl() ? 'left' : 'right'; vc_map( array( 'name' => __( 'Featured Image', 'porto-functionality' ), 'base' => 'porto_single_image', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'featured-image.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the feautred image.', 'porto-functionality' ), 'params' => array_merge( array( array( 'type' => 'checkbox', 'heading' => __( 'Follow Post Meta Box', 'porto-functionality' ), 'description' => __( 'To display according to the "Media Type" of the Meta box.', 'porto-functionality' ), 'param_name' => 'follow_meta', 'hint' => '<img src="' . PORTO_HINT_URL . 'singleb_image-follow_meta.gif"/>', ), array( 'type' => 'dropdown', 'heading' => __( 'Media Type', 'porto-functionality' ), 'description' => __( 'To choose the media type. If the type of meta box of post is video or audio, this widget will render the media.', 'porto-functionality' ), 'param_name' => 'show_type', 'value' => array( __( 'Select..', 'porto-functionality' ) => '', __( 'Grid', 'porto-functionality' ) => 'grid', __( 'Images', 'porto-functionality' ) => 'images', __( 'Masonry', 'porto-functionality' ) => 'masonry', __( 'Video', 'porto-functionality' ) => 'video', ), 'dependency' => array( 'element' => 'follow_meta', 'is_empty' => true, ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns', 'porto-functionality' ), 'description' => esc_html__( 'Controls the column count.', 'porto-functionality' ), 'param_name' => 'grid_column', 'std' => '3', 'value' => array( __( '6 columns', 'porto-functionality' ) => '6', __( '4 columns', 'porto-functionality' ) => '4', __( '3 columns', 'porto-functionality' ) => '3', __( '2 columns', 'porto-functionality' ) => '2', __( '1 columns', 'porto-functionality' ) => '1', ), 'dependency' => array( 'element' => 'show_type', 'value' => 'grid', ), ), array( 'type' => 'textfield', 'heading' => __( 'Image Size', 'porto-functionality' ), 'param_name' => 'grid_thumbnail_size', 'description' => __( 'Enter image size (Example: "thumbnail", "medium", "large", "full" or other sizes defined by theme). Alternatively enter size in pixels (Example: 200x100 (Width x Height)).', 'porto-functionality' ), 'dependency' => array( 'element' => 'show_type', 'value' => array( 'grid', 'masonry' ), ), ), array( 'type' => 'checkbox', 'heading' => __( 'Show Zoom Icon', 'porto-functionality' ), 'param_name' => 'popup', 'value' => false, 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), ), array( 'type' => 'checkbox', 'heading' => __( 'Zoom Icon Position', 'porto-functionality' ), 'description' => __( 'Put the icon in the center.', 'porto-functionality' ), 'param_name' => 'icon_pos', 'selectors' => array( '{{WRAPPER}} .zoom' => 'right: 50%; bottom: 50%; transform: translate(50%, 50%);', ), 'dependency' => array( 'element' => 'popup', 'not_empty' => true, ), ), array( 'type' => 'checkbox', 'heading' => __( 'Advanced Post Share?', 'porto-functionality' ), 'param_name' => 'share_position', 'description' => __( 'To show Share Icons near the image.', 'porto-functionality' ), 'value' => false, 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Overlay Background Color', 'porto-functionality' ), 'param_name' => 'overlay_bgc', 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid', 'masonry' ), ), 'qa_selector' => '.post-image', 'selectors' => array( '{{WRAPPER}} .thumb-info.thumb-info-no-borders .thumb-info-wrapper:after' => 'background-color: {{VALUE}};', '{{WRAPPER}} .img-zoom-overlay .img-thumbnail:hover:after' => 'background-color: {{VALUE}};', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'icon_desc', 'text' => __( 'Zoom Icon', 'porto-functionality' ), 'description' => __( 'If the "Media Type" of "General" tab is "Images", the following options are useful after enabling "show Zoom Icon".', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Overlay Icon Type', 'porto-functionality' ), 'param_name' => 'icon_type', 'value' => array( __( 'Font Awesome', 'porto-functionality' ) => 'fontawesome', __( 'Simple Line Icon', 'porto-functionality' ) => 'simpleline', __( 'Porto Icon', 'porto-functionality' ) => 'porto', ), 'dependency' => array( 'element' => 'show_type', 'value' => array( 'grid', 'masonry' ), ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'iconpicker', 'heading' => __( 'Overlay Icon', 'porto-functionality' ), 'param_name' => 'icon_cl', 'value' => '', 'dependency' => array( 'element' => 'icon_type', 'value' => array( 'fontawesome' ), ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'iconpicker', 'heading' => __( 'Overlay Icon', 'porto-functionality' ), 'param_name' => 'icon_simpleline', 'settings' => array( 'type' => 'simpleline', 'iconsPerPage' => 4000, ), 'dependency' => array( 'element' => 'icon_type', 'value' => 'simpleline', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'iconpicker', 'heading' => __( 'Overlay Icon', 'porto-functionality' ), 'param_name' => 'icon_porto', 'settings' => array( 'type' => 'porto', 'iconsPerPage' => 4000, ), 'dependency' => array( 'element' => 'icon_type', 'value' => 'porto', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Background Color', 'porto-functionality' ), 'param_name' => 'icon_bgc', 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid', 'masonry' ), ), 'selectors' => array( '{{WRAPPER}} .thumb-info .thumb-info-action .thumb-info-action-icon-light' => 'background-color: {{VALUE}};', '{{WRAPPER}} .zoom' => 'background-color: {{VALUE}} !important;', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Color', 'porto-functionality' ), 'param_name' => 'icon_clr', 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid', 'masonry' ), ), 'selectors' => array( '{{WRAPPER}} .thumb-info .thumb-info-action-icon-light i' => 'color: {{VALUE}} !important;', '{{WRAPPER}} .zoom i' => 'color: {{VALUE}} !important;', ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Icon Background Size(px)', 'porto-functionality' ), 'description' => __( 'Control the icon width.', 'porto-functionality' ), 'param_name' => 'icon_width', 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid' ), ), 'selectors' => array( '{{WRAPPER}} .zoom, {{WRAPPER}} .thumb-info .thumb-info-action-icon-light' => 'width: {{VALUE}}px; height: {{VALUE}}px;', '{{WRAPPER}} .zoom i, {{WRAPPER}} .thumb-info .thumb-info-action-icon-light i' => 'line-height: {{VALUE}}px;', ), 'qa_selector' => '.owl-item.active .img-thumbnail .zoom, .lightbox >div:not(.masonry-item):first-child .thumb-info-action-icon', 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Icon Size(px)', 'porto-functionality' ), 'description' => __( 'Control the font size of the icon.', 'porto-functionality' ), 'param_name' => 'icon_size', 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid' ), ), 'selectors' => array( '{{WRAPPER}} .zoom i' => 'font-size: {{VALUE}}px;', '{{WRAPPER}} .thumb-info .thumb-info-action-icon-light i' => 'font-size: {{VALUE}}px;', ), 'qa_selector' => '.owl-item.active .img-thumbnail .zoom i, .lightbox >div:not(.masonry-item):first-child .thumb-info-action-icon i', 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Image Border Radius', 'porto-functionality' ), 'description' => __( 'Control the border radius of image.', 'porto-functionality' ), 'param_name' => 'border_radius', 'units' => array( 'px', 'rem', 'em' ), 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), 'selectors' => array( '{{WRAPPER}} img' => 'border-radius: {{VALUE}}{{UNIT}};', ), 'group' => __( 'Image Option', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Image Height', 'porto-functionality' ), 'description' => __( 'Control the height of image.', 'porto-functionality' ), 'param_name' => 'image_height', 'units' => array( 'px', 'rem', 'em' ), 'dependency' => array( 'element' => 'show_type', 'value' => array( 'images', 'grid' ), ), 'selectors' => array( '{{WRAPPER}} .post-image >div:first-child img' => 'height: {{VALUE}}{{UNIT}}; object-fit: cover;', ), 'group' => __( 'Image Option', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Image Padding', 'porto-functionality' ), 'description' => __( 'Control the padding of image.', 'porto-functionality' ), 'param_name' => 'image_padding', 'units' => array( 'px' ), 'dependency' => array( 'element' => 'show_type', 'value' => 'grid', ), 'selectors' => array( '{{WRAPPER}} .lightbox >div' => 'padding: {{VALUE}}{{UNIT}} !important;', ), 'group' => __( 'Image Option', 'porto-functionality' ), ), array( 'type' => 'textfield', 'heading' => __( 'Image Size', 'porto-functionality' ), 'param_name' => 'thumbnail_size', 'description' => __( 'Enter image size (Example: "thumbnail", "medium", "large", "full" or other sizes defined by theme). Alternatively enter size in pixels (Example: 200x100 (Width x Height)).', 'porto-functionality' ), 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), 'group' => __( 'Image Option', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Hover Effect', 'porto-functionality' ), 'description' => __( 'Choose the hover effet.', 'porto-functionality' ), 'param_name' => 'hover_effect', 'std' => '', 'value' => array( __( 'None', 'porto-functionality' ) => '', __( 'Zoom', 'porto-functionality' ) => 'img-zoom-in', __( 'Zoom Overlay', 'porto-functionality' ) => 'img-zoom-overlay', ), 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), 'group' => __( 'Image Option', 'porto-functionality' ), ), array( 'type' => 'checkbox', 'heading' => __( 'Show Thumbanil Images', 'porto-functionality' ), 'param_name' => 'show_thumbnail', 'description' => __( 'To show thumbnails under the large image.', 'porto-functionality' ), 'dependency' => array( 'element' => 'show_type', 'value' => 'images', ), 'group' => __( 'Thumbnail Option', 'porto-functionality' ), ), array( 'type' => 'textfield', 'heading' => __( 'Thumbnail Size', 'porto-functionality' ), 'param_name' => 'image_thumbnail_size', 'description' => __( 'Enter image size (Example: "thumbnail", "medium", "large", "full" or other sizes defined by theme). Alternatively enter size in pixels (Example: 200x100 (Width x Height)).', 'porto-functionality' ), 'dependency' => array( 'element' => 'show_thumbnail', 'not_empty' => true, ), 'std' => 'thumbnail', 'group' => __( 'Thumbnail Option', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Thumbnail Space(px)', 'porto-functionality' ), 'description' => __( 'Control the space of thumbnail images.', 'porto-functionality' ), 'param_name' => 'thumbnail_space', 'std' => '10', 'dependency' => array( 'element' => 'show_thumbnail', 'not_empty' => true, ), 'selectors' => array( '{{WRAPPER}} .thumbnail-wrapper .porto-carousel' => 'margin-bottom: {{VALUE}}px;', ), 'qa_selector' => '.thumbnail-gallery', 'group' => __( 'Thumbnail Option', 'porto-functionality' ), ), porto_vc_custom_class(), ), $feature_slide ), ) ); vc_map( array( 'name' => __( 'Post Comments', 'porto-functionality' ), 'base' => 'porto_single_comments', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-comments.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the comments of the single post.', 'porto-functionality' ), 'params' => array( array( 'type' => 'checkbox', 'heading' => __( 'Hide Author Icon', 'porto-functionality' ), 'param_name' => 'comment_author_icon', ), array( 'type' => 'porto_number', 'heading' => __( 'Space between Comments.', 'porto-functionality' ), 'description' => __( 'To control the space between the comments. To perform this, the post has more than 2 comments.', 'porto-functionality' ), 'param_name' => 'comments_spacing', 'hint' => '<img src="' . PORTO_HINT_URL . 'single_comments-comments_spacing.gif"/>', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} ul.comments>li + li' => 'margin-top: {{VALUE}}{{UNIT}};', ), 'qa_selector' => '.comment:nth-child(2)', ), array( 'type' => 'porto_number', 'heading' => __( 'Space between Comment and Reply.', 'porto-functionality' ), 'description' => __( 'To control the space between the comment and reply object.', 'porto-functionality' ), 'param_name' => 'comments_reply', 'hint' => '<img src="' . PORTO_HINT_URL . 'single_comments-comments_reply.gif"/>', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .comment-respond' => 'margin-top: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Space between Reply and Form.', 'porto-functionality' ), 'description' => __( 'To control the space between the reply title and reply form.', 'porto-functionality' ), 'param_name' => 'comments_form', 'hint' => '<img src="' . PORTO_HINT_URL . 'single_comments-comments_form.gif"/>', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .comment-respond .comment-reply-title' => 'margin-bottom: {{VALUE}}{{UNIT}};', ), 'qa_selector' => '.comment-form', ), array( 'type' => 'porto_number', 'heading' => __( 'Avatar Image Spacing', 'porto-functionality' ), 'param_name' => 'comment_image_between', 'description' => __( 'To control the space between the avatar and the comment body.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} ul.comments>li .img-thumbnail' => "margin-{$right}: -{{VALUE}}{{UNIT}};", ), 'qa_selector' => '.comment:first-child .img-thumbnail', ), array( 'type' => 'porto_number', 'heading' => __( 'Max Width of Comment Avatar Image', 'porto-functionality' ), 'param_name' => 'comment_image_width', 'description' => __( 'To control the max width of avatar.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} ul.comments>li img.avatar' => 'max-width: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Border Radius of Comment Avatar Image', 'porto-functionality' ), 'units' => array( 'px', 'rem', '%' ), 'description' => __( 'To control the border radius of avatar.', 'porto-functionality' ), 'param_name' => 'comment_image_radius', 'selectors' => array( '{{WRAPPER}} ul.comments>li img.avatar' => 'border-radius: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'comment_title_typography', 'text' => __( 'Comment Title', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'description' => __( 'To control the commenter title.', 'porto-functionality' ), 'param_name' => 'comment_title', 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .post-comments h4, {{WRAPPER}} .post-comments h3', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_title_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of the commente title.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .post-comments h3, {{WRAPPER}} .post-comments h4' => 'color: {{VALUE}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'comment_name_typography', 'text' => __( 'Comment Name', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'description' => __( 'To control the commenter.', 'porto-functionality' ), 'param_name' => 'comment_name', 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-by strong, {{WRAPPER}} .comment-by strong a', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_name_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of the commenter.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} ul.comments .comment-by strong,{{WRAPPER}} ul.comments .comment-by strong a' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment:first-child .comment-by strong', ), array( 'type' => 'porto_param_heading', 'param_name' => 'comment_setting_typography', 'text' => __( 'Comment Settings', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'description' => __( 'To control the commenter options.', 'porto-functionality' ), 'param_name' => 'comment_setting', 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-by span a', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_setting_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of commenter options.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-by span a' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment:first-child .comment-by>span', ), array( 'type' => 'colorpicker', 'param_name' => 'comment_setting_h_color', 'heading' => __( 'Hover Color', 'porto-functionality' ), 'description' => __( 'To control the hover color of commenter options.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-by span a:hover' => 'color: {{VALUE}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'comment_date_typography', 'text' => __( 'Comment Date', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'description' => __( 'To control the comment date.', 'porto-functionality' ), 'param_name' => 'comment_date', 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} ul.comments .comment-block .date', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_date_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of comment date.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} ul.comments .comment-block .date' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment:first-child .comment-block .date', ), array( 'type' => 'porto_param_heading', 'param_name' => 'comment_text_typography', 'text' => __( 'Comment Text', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'description' => __( 'To control the comment content.', 'porto-functionality' ), 'param_name' => 'comment_text', 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-block > div p', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_text_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of comment content.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-block > div p' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment:first-child .comment-block > div p', ), array( 'type' => 'porto_param_heading', 'param_name' => 'form_heading_typography', 'text' => __( 'Reply Heading', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'form_heading', 'description' => __( 'To control the reply form heading.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-respond .comment-reply-title', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_form_heading_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of reply heading.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-respond .comment-reply-title' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment-respond .comment-reply-title', ), array( 'type' => 'porto_param_heading', 'param_name' => 'form_reply_typography', 'text' => __( 'Comment Form Reply', 'porto-functionality' ), 'description' => __( 'These options are shown if edit or reply the comments. Try on the real page.', 'porto-functionality' ), 'group' => 'Style', ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'comment_reply', 'description' => __( 'To control the reply heading.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-respond #cancel-comment-reply-link', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_form_reply_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'To control the color of reply heading.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-respond #cancel-comment-reply-link' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_form_reply_color_hover', 'heading' => __( 'Hover Color', 'porto-functionality' ), 'description' => __( 'To control the hover color of reply heading.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-respond #cancel-comment-reply-link:hover' => 'color: {{VALUE}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Space between Reply title and button', 'porto-functionality' ), 'description' => __( 'To control the color of reply heading.', 'porto-functionality' ), 'units' => array( 'px', 'rem', '%' ), 'param_name' => 'comment_form_reply_space', 'hint' => '<img src="' . PORTO_HINT_URL . 'single_comments-comment_form_reply_space.gif"/>', 'selectors' => array( '{{WRAPPER}} .comment-respond #cancel-comment-reply-link' => "margin-{$left}: {{VALUE}}{{UNIT}};", ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'form_label_style', 'text' => __( 'Comment Form Label', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'comment_label', 'description' => __( 'To control the reply form lable.', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-form label', ), ), array( 'type' => 'colorpicker', 'param_name' => 'comment_form_label_color', 'description' => __( 'To control the color of reply form lable.', 'porto-functionality' ), 'heading' => __( 'Color', 'porto-functionality' ), 'group' => 'Style', 'selectors' => array( '{{WRAPPER}} .comment-form label' => 'color: {{VALUE}};', ), 'qa_selector' => '.comment-form label', ), porto_vc_custom_class(), ), ) ); vc_map( array( 'name' => __( 'Post Navigation', 'porto-functionality' ), 'base' => 'porto_single_navigation', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-nav.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the navigation for previous or next post.', 'porto-functionality' ), 'params' => array( array( 'type' => 'dropdown', 'heading' => __( 'Alignment', 'porto-functionality' ), 'description' => esc_html__( 'Controls navigations alignment. Choose from Left, Center, Right.', 'porto-functionality' ), 'param_name' => 'nav_align', 'value' => array( __( 'Left', 'porto-functionality' ) => 'flex-start', __( 'Center', 'porto-functionality' ) => 'center', __( 'Right', 'porto-functionality' ) => 'flex-end', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Navigation Spacing', 'porto-functionality' ), 'param_name' => 'nav_space', 'description' => __( 'To control the space between previous and next navigation.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} a + a' => "margin-{$left}: {{VALUE}}{{UNIT}};", ), ), array( 'type' => 'iconpicker', 'heading' => esc_html__( 'Preview Icon', 'porto-functionality' ), 'param_name' => 'nav_icon_prev', 'description' => __( 'To select the previous icon', 'porto-functionality' ), 'value' => 'fas fa-angle-left', 'settings' => array( 'emptyIcon' => false, 'iconsPerPage' => 500, ), ), array( 'type' => 'iconpicker', 'heading' => esc_html__( 'Next Icon', 'porto-functionality' ), 'param_name' => 'nav_icon_next', 'value' => 'fas fa-angle-right', 'description' => __( 'To select the next icon', 'porto-functionality' ), 'settings' => array( 'emptyIcon' => false, 'iconsPerPage' => 500, ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'navigation_typography', 'description' => __( 'To select the typography of icon', 'porto-functionality' ), 'text' => __( 'Typography', 'porto-functionality' ), 'group' => 'Style', ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'nav_typography', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}}', ), ), array( 'type' => 'colorpicker', 'param_name' => 'nav_color', 'heading' => __( 'Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} a' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'nav_hover_color', 'heading' => __( 'Hover Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} a:hover' => 'color: {{VALUE}};', ), ), porto_vc_custom_class(), ), ) ); vc_map( array( 'name' => __( 'Share', 'porto-functionality' ), 'base' => 'porto_single_share', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-share.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the share icons of the single post.', 'porto-functionality' ), 'params' => array( array( 'type' => 'checkbox', 'heading' => __( 'Inline Style', 'porto-functionality' ), 'param_name' => 'share_inline', 'default' => '', 'selectors' => array( '{{WRAPPER}} .post-share > .share-links' => 'display: inline-block;', ), ), array( 'type' => 'checkbox', 'heading' => __( 'Hide Heading', 'porto-functionality' ), 'param_name' => 'hide_heading', 'default' => '', 'selectors' => array( '{{WRAPPER}} .post-share > span' => 'display: none;', ), ), array( 'type' => 'checkbox', 'heading' => __( 'Without Icon', 'porto-functionality' ), 'description' => __( 'To hide the heading icon', 'porto-functionality' ), 'param_name' => 'with_icon', 'dependency' => array( 'element' => 'share_inline', 'is_empty' => true, ), ), array( 'type' => 'porto_number', 'heading' => __( 'Icon Spacing', 'porto-functionality' ), 'param_name' => 'icon_space', 'description' => __( 'To control the space between the icon and heading', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .post-share > h3 i' => "margin-{$right}: {{VALUE}}{{UNIT}};", '{{WRAPPER}} .post-share > span i' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'share_heading_typography', 'description' => __( 'To control the heading', 'porto-functionality' ), 'text' => __( 'Typography', 'porto-functionality' ), 'group' => 'Style', 'dependency' => array( 'element' => 'hide_heading', 'is_empty' => true, ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'share_heading_style', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share h3', '{{WRAPPER}} .post-share > span', ), 'dependency' => array( 'element' => 'hide_heading', 'is_empty' => true, ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Title Color', 'porto-functionality' ), 'param_name' => 'title_color', 'description' => __( 'To control the color of the share heading.', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share h3' => 'color: {{VALUE}}', '{{WRAPPER}} .post-share > span' => 'color: {{VALUE}}', ), 'dependency' => array( 'element' => 'hide_heading', 'is_empty' => true, ), ), array( 'type' => 'porto_number', 'heading' => __( 'Title Spacing', 'porto-functionality' ), 'param_name' => 'title_space', 'description' => __( 'To control the space between the icon and title', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .post-share h3' => 'margin-bottom: {{VALUE}}{{UNIT}};', '{{WRAPPER}} .post-share span' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), 'dependency' => array( 'element' => 'hide_heading', 'is_empty' => true, ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'share_icons_typography', 'text' => __( 'Icon Typography', 'porto-functionality' ), 'description' => __( 'To control the typography of the social icons', 'porto-functionality' ), 'group' => 'Style', ), array( 'type' => 'porto_param_heading', 'param_name' => 'share_icon', 'text' => __( 'Share Icons', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'share_icons', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .share-links a', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Share Width', 'porto-functionality' ), 'param_name' => 'share_width', 'description' => __( 'To control the width and height of the share icons.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .share-links a' => 'width: {{VALUE}}{{UNIT}}; Height: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Border Radius', 'porto-functionality' ), 'description' => __( 'To control the border radius of the share icons.', 'porto-functionality' ), 'param_name' => 'share_radius', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .share-links a' => 'border-radius: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Share Spacing', 'porto-functionality' ), 'description' => __( 'To control the space between the share icons.', 'porto-functionality' ), 'param_name' => 'share_space', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .share-links a:not(:last-child)' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), ), array( 'type' => 'porto_boxshadow', 'heading' => __( 'Icon Box Shadow', 'porto-functionality' ), 'param_name' => 'share_icon_box_shadow', 'unit' => 'px', 'positions' => array( __( 'Horizontal', 'porto-functionality' ) => '', __( 'Vertical', 'porto-functionality' ) => '', __( 'Blur', 'porto-functionality' ) => '', __( 'Spread', 'porto-functionality' ) => '', ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share > .share-links a', ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Color', 'porto-functionality' ), 'param_name' => 'share_color_normal', 'description' => __( 'To control the color of the share icons.', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share > .share-links a:not(:hover)' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Background Color', 'porto-functionality' ), 'param_name' => 'share_bg_color_normal', 'description' => __( 'To control the background color of the share icons.', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share > .share-links a:not(:hover)' => 'background-color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Hover Color', 'porto-functionality' ), 'param_name' => 'share_color_hover', 'description' => __( 'To control the hover color of the share icons.', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share > .share-links a:hover' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'heading' => __( 'Icon Background Hover Color', 'porto-functionality' ), 'param_name' => 'share_bg_color_hover', 'description' => __( 'To control the background hover color of the share icons.', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-share > .share-links a:hover' => 'background-color: {{VALUE}};', ), ), porto_vc_custom_class(), ), ) ); vc_map( array( 'name' => __( 'Post Author Box', 'porto-functionality' ), 'base' => 'porto_single_author_box', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-author.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the author box of the single post.', 'porto-functionality' ), 'params' => array( array( 'type' => 'checkbox', 'heading' => __( 'Hide author icon', 'porto-functionality' ), 'description' => __( 'To hide the icon of author title.', 'porto-functionality' ), 'param_name' => 'author_icon', ), array( 'type' => 'porto_number', 'heading' => __( 'Icon Spacing', 'porto-functionality' ), 'param_name' => 'author_icon_space', 'description' => __( 'To control the space between icon and title.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'dependency' => array( 'element' => 'author_icon', 'is_empty' => true, ), 'selectors' => array( '{{WRAPPER}} h3 i' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), 'qa_selector' => '.post-author h3 i', ), array( 'type' => 'porto_number', 'heading' => __( 'Author Spacing', 'porto-functionality' ), 'param_name' => 'author_space', 'description' => __( 'To control the space between the title and the content.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} h3' => 'margin-bottom: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'heading_image_typography', 'text' => __( 'Author Image', 'porto-functionality' ), ), array( 'type' => 'porto_number', 'heading' => __( 'Author Image Max Width', 'porto-functionality' ), 'param_name' => 'author_image_size', 'description' => __( 'To control the max width of author image.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} .img-thumbnail img' => 'max-width: {{VALUE}}{{UNIT}};', ), 'qa_selector' => '.post-author .img-thumbnail img', ), array( 'type' => 'porto_number', 'heading' => __( 'Author Image Border Radius', 'porto-functionality' ), 'param_name' => 'author_image_radius', 'description' => __( 'To control the border radius of author image.', 'porto-functionality' ), 'units' => array( 'px', 'rem', '%' ), 'selectors' => array( '{{WRAPPER}} .img-thumbnail img' => 'border-radius: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'heading_title_typography', 'text' => __( 'Author Title', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'heading_title_style', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-author h3', ), ), array( 'type' => 'colorpicker', 'param_name' => 'author_title_color', 'heading' => __( 'Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .post-author h3' => 'color: {{VALUE}};', ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'heading_name_typography', 'text' => __( 'Author Name', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'heading_name_style', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .name a', ), ), array( 'type' => 'colorpicker', 'param_name' => 'author_name_color', 'heading' => __( 'Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .name a' => 'color: {{VALUE}};', ), 'qa_selector' => '.name a', ), array( 'type' => 'porto_param_heading', 'param_name' => 'heading_desc_typography', 'text' => __( 'Author Description', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'heading_desc_style', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .author-content', ), ), array( 'type' => 'colorpicker', 'param_name' => 'author_desc_color', 'heading' => __( 'Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .author-content' => 'color: {{VALUE}};', ), 'qa_selector' => '.author-content', ), porto_vc_custom_class(), ), ) ); vc_map( array( 'name' => __( 'Related Posts Grid', 'porto-functionality' ), 'base' => 'porto_single_related', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-related.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the related posts with type builder template.', 'porto-functionality' ), 'params' => array_merge( array( array( 'type' => 'porto_param_heading', 'param_name' => 'posts_layout', 'text' => __( 'Posts Selector', 'porto-functionality' ), ), array( 'type' => 'autocomplete', 'heading' => __( 'Post Layout', 'porto-functionality' ), 'param_name' => 'builder_id', 'settings' => array( 'multiple' => false, 'sortable' => true, 'unique_values' => true, ), /* translators: starting and end A tags which redirects to edit page */ 'description' => sprintf( __( 'Please select a saved Post Layout template which was built using post type builder. Please create a new Post Layout template in %1$sPorto Templates Builder%2$s', 'porto-functionality' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=' . PortoBuilders::BUILDER_SLUG . '&' . PortoBuilders::BUILDER_TAXONOMY_SLUG . '=type' ) ) . '" target="_blank">', '</a>' ), 'admin_label' => true, ), array( 'type' => 'number', 'heading' => __( 'Count', 'porto-functionality' ), 'description' => __( 'Leave blank if you use default value.', 'porto-functionality' ), 'param_name' => 'count', 'admin_label' => true, ), array( 'type' => 'dropdown', 'heading' => __( 'Order by', 'porto-functionality' ), 'param_name' => 'orderby', 'value' => porto_vc_order_by(), /* translators: %s: Wordpres codex page */ 'description' => sprintf( __( 'Select how to sort retrieved posts. More at %s.', 'porto-functionality' ), '<a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" target="_blank">WordPress codex page</a>' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Order way', 'porto-functionality' ), 'param_name' => 'order', 'value' => porto_vc_woo_order_way(), /* translators: %s: Wordpres codex page */ 'description' => sprintf( __( 'Designates the ascending or descending order. More at %s.', 'porto-functionality' ), '<a href="http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters" target="_blank">WordPress codex page</a>' ), ), array( 'type' => 'porto_param_heading', 'param_name' => 'posts_layout', 'text' => __( 'Posts Layout', 'porto-functionality' ), ), array( 'type' => 'dropdown', 'heading' => __( 'View mode', 'porto-functionality' ), 'param_name' => 'view', 'value' => array( __( 'Grid', 'porto-functionality' ) => '', __( 'Grid - Creative', 'porto-functionality' ) => 'creative', __( 'Masonry', 'porto-functionality' ) => 'masonry', __( 'Slider', 'porto-functionality' ) => 'slider', ), 'admin_label' => true, ), array( 'type' => 'porto_image_select', 'heading' => __( 'Grid Layout', 'porto-functionality' ), 'param_name' => 'grid_layout', 'dependency' => array( 'element' => 'view', 'value' => array( 'creative' ), ), 'std' => '1', 'value' => porto_sh_commons( 'masonry_layouts' ), ), array( 'type' => 'number', 'heading' => __( 'Grid Height (px)', 'porto-functionality' ), 'param_name' => 'grid_height', 'dependency' => array( 'element' => 'view', 'value' => array( 'creative' ), ), 'suffix' => 'px', 'std' => 600, ), array( 'type' => 'number', 'heading' => __( 'Column Spacing (px)', 'porto-functionality' ), 'description' => __( 'Leave blank if you use theme default value.', 'porto-functionality' ), 'param_name' => 'spacing', 'suffix' => 'px', 'std' => '', 'selectors' => array( '{{WRAPPER}}' => '--porto-el-spacing: {{VALUE}}px;', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns', 'porto-functionality' ), 'param_name' => 'columns', 'std' => '4', 'value' => porto_sh_commons( 'products_columns' ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column', 'porto-functionality' ), 'param_name' => 'half_column', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns on tablet ( <= 991px )', 'porto-functionality' ), 'param_name' => 'columns_tablet', 'std' => '', 'value' => array( __( 'Default', 'porto-functionality' ) => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column on tablet', 'porto-functionality' ), 'param_name' => 'half_column_tablet', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Columns on mobile ( <= 575px )', 'porto-functionality' ), 'param_name' => 'columns_mobile', 'std' => '', 'value' => array( __( 'Default', 'porto-functionality' ) => '', '1' => '1', '2' => '2', '3' => '3', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Add Half Column on Mobile', 'porto-functionality' ), 'param_name' => 'half_column_mobile', 'value' => array( __( 'Default', 'porto-functionality' ) => '', __( 'Yes', 'porto-functionality' ) => 'yes', __( 'No', 'porto-functionality' ) => 'no', ), 'dependency' => array( 'element' => 'view', 'value' => array( 'slider' ), ), ), array( 'type' => 'dropdown', 'heading' => __( 'Image Size', 'porto-functionality' ), 'param_name' => 'image_size', 'value' => porto_sh_commons( 'image_sizes' ), 'std' => '', 'dependency' => array( 'element' => 'view', 'value_not_equal_to' => 'creative', ), ), porto_vc_custom_class(), array( 'type' => 'css_editor', 'heading' => __( 'CSS', 'porto-functionality' ), 'param_name' => 'css_design', 'group' => __( 'Design', 'porto-functionality' ), 'edit_field_class' => 'vc_col-sm-12 vc_column no-vc-background no-vc-border creative_link_css_editor', ), ), porto_vc_product_slider_fields( 'slider' ) ), ) ); vc_map( array( 'name' => __( 'Meta', 'porto-functionality' ), 'base' => 'porto_single_meta', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-meta.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the metas of the single post.', 'porto-functionality' ), 'params' => array( array( 'type' => 'checkbox', 'heading' => __( 'Without Icon', 'porto-functionality' ), 'description' => __( 'To hide icon of metas except the date.', 'porto-functionality' ), 'param_name' => 'hide_icon', ), array( 'type' => 'checkbox', 'heading' => __( 'Show Divider', 'porto-functionality' ), 'description' => __( 'To show divider between the post metas.', 'porto-functionality' ), 'param_name' => 'show_divider', ), array( 'type' => 'checkbox', 'heading' => __( 'Hide author by', 'porto-functionality' ), 'description' => __( 'To hide by of author meta.', 'porto-functionality' ), 'param_name' => 'hide_by', ), array( 'type' => 'porto_multiselect', 'heading' => __( 'Select Metas To Show.', 'porto-functionality' ), 'param_name' => 'post-metas', 'std' => '', 'value' => array( __( 'Date', 'porto-functionality' ) => 'date', __( 'Author', 'porto-functionality' ) => 'author', __( 'Category', 'porto-functionality' ) => 'cats', __( 'Tags', 'porto-functionality' ) => 'tags', __( 'Comments', 'porto-functionality' ) => 'comments', __( 'Like', 'porto-functionality' ) => 'like', ), ), array( 'type' => 'dropdown', 'heading' => __( 'Alignment', 'porto-functionality' ), 'description' => esc_html__( 'Controls metas alignment. Choose from Left, Center, Right.', 'porto-functionality' ), 'param_name' => 'meta_align', 'value' => array( __( 'Left', 'porto-functionality' ) => 'left', __( 'Center', 'porto-functionality' ) => 'center', __( 'Right', 'porto-functionality' ) => 'right', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Meta Spacing', 'porto-functionality' ), 'description' => __( 'To control the space between post metas.', 'porto-functionality' ), 'param_name' => 'meta_space', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} > span' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), 'qa_selector' => '.post-meta > span:nth-of-type(2)', ), array( 'type' => 'porto_number', 'heading' => __( 'Icon Spacing', 'porto-functionality' ), 'description' => __( 'To control the space between icon and meta.', 'porto-functionality' ), 'param_name' => 'icon_space', 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} > span i' => "margin-{$right}: {{VALUE}}{{UNIT}};", ), 'qa_selector' => '.post-meta > span:first-of-type i', ), array( 'type' => 'porto_param_heading', 'param_name' => 'meta_typography', 'text' => __( 'Author Title', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'meta_style', 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}}', ), ), array( 'type' => 'colorpicker', 'param_name' => 'meta_color', 'heading' => __( 'Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} > span' => 'color: {{VALUE}};', '{{WRAPPER}} > span i' => 'color: {{VALUE}};', '{{WRAPPER}} > span a' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'meta_hover_color', 'heading' => __( 'Hover Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} span a:hover' => 'color: {{VALUE}};', '{{WRAPPER}} span a:focus' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'divider_color', 'heading' => __( 'Divider Color', 'porto-functionality' ), 'group' => __( 'Style', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} > span:after' => 'color: {{VALUE}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Divider Spacing', 'porto-functionality' ), 'param_name' => 'divider_space', 'description' => __( 'To control the space between meta and divider.', 'porto-functionality' ), 'units' => array( 'px', 'rem', 'em' ), 'selectors' => array( '{{WRAPPER}} > span:after' => "margin-{$left}: {{VALUE}}{{UNIT}};", ), ), porto_vc_custom_class(), ), ) ); vc_map( array( 'name' => __( 'Post Format', 'porto-functionality' ), 'base' => 'porto_single_post_format', 'class' => 'porto-wpb-widget', 'icon' => PORTO_WIDGET_URL . 'post-format.png', 'category' => __( 'Single Builder', 'porto-functionality' ), 'description' => __( 'Display the single Post Format.', 'porto-functionality' ), 'params' => array( array( 'type' => 'porto_param_heading', 'param_name' => 'description_format', 'text' => esc_html__( 'This widget is only available for Single Post. For this, you should set post format on Post Settings.', 'porto-functionality' ), ), array( 'type' => 'porto_typography', 'heading' => __( 'Typography', 'porto-functionality' ), 'param_name' => 'format_heading', 'selectors' => array( '{{WRAPPER}} .gallery > i', ), ), array( 'type' => 'porto_dimension', 'heading' => __( 'Padding', 'porto-functionality' ), 'description' => __( 'Controls the padding of format icon.', 'porto-functionality' ), 'param_name' => 'format_padding', 'selectors' => array( '{{WRAPPER}} .format i' => 'padding-top: {{TOP}}; padding-right: {{RIGHT}}; padding-bottom: {{BOTTOM}}; padding-left: {{LEFT}};', ), ), array( 'type' => 'porto_number', 'heading' => __( 'Border Radius', 'porto-functionality' ), 'description' => __( 'Controls the border radius of post format.', 'porto-functionality' ), 'param_name' => 'format_radius', 'units' => array( 'px', 'em', 'rem' ), 'selectors' => array( '{{WRAPPER}} .format' => 'border-radius: {{VALUE}}{{UNIT}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'format_color', 'heading' => __( 'Color', 'porto-functionality' ), 'description' => __( 'Controls the color of format icon.', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .format i' => 'color: {{VALUE}};', ), ), array( 'type' => 'colorpicker', 'param_name' => 'format_bg_color', 'description' => __( 'Controls the background color of post format.', 'porto-functionality' ), 'heading' => __( 'Background Color', 'porto-functionality' ), 'selectors' => array( '{{WRAPPER}} .format' => 'background-color: {{VALUE}};', ), ), array( 'type' => 'porto_boxshadow', 'heading' => __( 'Box Shadow', 'porto-functionality' ), 'description' => __( 'Controls the box shadow.', 'porto-functionality' ), 'param_name' => 'format_shadow', 'unit' => 'px', 'positions' => array( __( 'Horizontal', 'porto-functionality' ) => '', __( 'Vertical', 'porto-functionality' ) => '', __( 'Blur', 'porto-functionality' ) => '', __( 'Spread', 'porto-functionality' ) => '', ), 'selectors' => array( '{{WRAPPER}} .format', ), ), porto_vc_custom_class(), ), ) ); } /** * Register Single Builder shortcodes * * @since 2.3.0 * @access public */ public function elementor_custom_single_shortcodes( $self ) { $load_widgets = false; if ( is_single() && ! ( function_exists( 'porto_is_elementor_preview' ) && porto_is_elementor_preview() ) ) { $load_widgets = true; } elseif ( is_singular( PortoBuilders::BUILDER_SLUG ) && 'single' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { $load_widgets = true; } elseif ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] && ( ! empty( $_POST['editor_post_id'] ) || ! empty( $_POST['initial_document_id'] ) ) ) { $load_widgets = true; } if ( apply_filters( 'porto_elementor_load_builder_widgets', $load_widgets, 'single' ) ) { foreach ( $this->shortcodes as $shortcode ) { include_once PORTO_BUILDERS_PATH . 'elements/single/elementor/' . $shortcode . '.php'; $class_name = 'Porto_Elementor_Single_' . ucfirst( str_replace( '-', '_', $shortcode ) ) . '_Widget'; if ( class_exists( $class_name ) ) { $self->register( new $class_name( array(), array( 'widget_name' => $class_name ) ) ); } } } } /** * Regsiter Preview Settings for Dynamic Post Type * * @since 2.3.0 * @access public */ public function register_elementor_preview_controls( $document ) { if ( ! $document instanceof Elementor\Core\DocumentTypes\PageBase && ! $document instanceof Elementor\Modules\Library\Documents\Page ) { return; } // Add Template Builder Controls $id = (int) $document->get_main_id(); if ( $id && 'single' == get_post_meta( get_the_ID(), PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { $_post_types = get_post_types( array( 'public' => true, 'show_in_nav_menus' => true, ), 'objects' ); $post_types = array(); foreach ( $_post_types as $post_type => $object ) { if ( ! in_array( $post_type, array( 'page', 'product', 'e-landing-page' ) ) ) { $post_types[ $post_type ] = sprintf( esc_html__( 'Single %s', 'porto-functionality' ), $object->labels->singular_name ); } } $document->start_controls_section( 'single_preview_settings', array( 'label' => esc_html__( 'Preview Settings', 'porto-functionality' ), 'tab' => Controls_Manager::TAB_SETTINGS, ) ); $document->add_control( 'single_preview_type', array( 'label' => esc_html__( 'Preview Dynamic Content as', 'porto-functionality' ), 'description' => __( '<span style="color: red;">Please save and refresh page for editing dynamic field after changing this option.</span>', 'porto-functionality' ), 'label_block' => true, 'type' => Controls_Manager::SELECT, 'default' => ! empty( $this->edit_post_type ) ? $this->edit_post_type : 'post', 'groups' => array( 'single' => array( 'label' => esc_html__( 'Single', 'porto-functionality' ), 'options' => $post_types, ), ), 'export' => false, ) ); $document->add_control( 'single_preview_apply', array( 'type' => Controls_Manager::BUTTON, 'label' => esc_html__( 'Apply & Preview', 'porto-functionality' ), 'label_block' => true, 'show_label' => false, 'text' => esc_html__( 'Apply & Preview', 'porto-functionality' ), 'separator' => 'none', ) ); $document->end_controls_section(); } } /** * Apply Global Post Type to Builder Type * * @since 2.3.0 * @access public */ public function restore_global_single_variable() { $this->find_preview(); if ( ! $this->edit_post && ( is_singular( PortoBuilders::BUILDER_SLUG ) || ( ! empty( $_REQUEST['post'] ) && PortoBuilders::BUILDER_SLUG == get_post_type( (int) $_REQUEST['post'] ) ) || ( isset( $_REQUEST['context'] ) && 'edit' == $_REQUEST['context'] ) || ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] ) || ( isset( $_REQUEST['vc_editable'] ) && $_REQUEST['vc_editable'] ) || ( ! empty( $_REQUEST['wpb_vc_js_status'] ) && ! empty( $_REQUEST['post'] ) ) ) ) { $query = new WP_Query( array( 'post_type' => $this->edit_post_type, 'post_status' => 'publish', 'posts_per_page' => 1, 'ignore_sticky_posts' => true, ) ); if ( $query->have_posts() ) { $the_post = $query->next_post(); $this->edit_post = $the_post; } } if ( $this->edit_post ) { global $post; $post = $this->edit_post; setup_postdata( $this->edit_post ); return true; } return false; } /** * Retrieve Global Post Type * * @since 2.3.0 * @access public */ public function reset_global_single_variable() { if ( $this->edit_post ) { wp_reset_postdata(); } } /** * Find the registered post type * * @since 2.3.0 * @access public */ public function find_preview() { if ( $this->edit_post_type ) { return; } if ( ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'elementor_ajax' == $_REQUEST['action'] ) || ( function_exists( 'vc_is_inline' ) && vc_is_inline() ) || ( isset( $_REQUEST['post'] ) && PortoBuilders::BUILDER_SLUG == get_post_type( (int) $_REQUEST['post'] ) ) ) { $post_id = 0; // backend if ( ! empty( $_REQUEST['post'] ) ) { $post_id = (int) $_REQUEST['post']; } // Wpb frontend if ( ! empty( $_REQUEST['post_id'] ) ) { $post_id = (int) $_REQUEST['post_id']; } // Elementor Preview if ( ! $post_id ) { $post_id = get_the_ID(); } if ( 'single' != get_post_meta( $post_id, PortoBuilders::BUILDER_TAXONOMY_SLUG, true ) ) { return; } $edit_post_type = get_post_meta( $post_id, 'preview_type', true ); $this->edit_post_type = $edit_post_type ? $edit_post_type : 'post'; } } /** * Apply preview mode in ajax - Elementor * * @since 2.3.0 * @access public */ public function apply_preview_post() { check_ajax_referer( 'porto-elementor-nonce', 'nonce' ); update_post_meta( (int) $_REQUEST['post_id'], 'preview_type', sanitize_title( $_REQUEST['mode'] ) ); die; } /** * Apply preview mode in ajax - WP Bakery * * @since 2.3.0 * @access public */ public function apply_preview_wpb_post() { check_ajax_referer( 'porto-admin-nonce', 'nonce' ); update_post_meta( (int) $_REQUEST['post_id'], 'preview_type', sanitize_title( $_REQUEST['mode'] ) ); die; } } PortoBuildersSingle::get_instance(); endif;
Save
Cancel