HEX
Server: nginx/1.26.3
System: Linux debian 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64
User: root (0)
PHP: 5.6.40
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/gxdaosen.net/wp-content/plugins/futurio-extra/lib/elementor/widgets/posts-carousel.php
<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}
use Elementor\Controls_Manager;
use Elementor\Widget_Base;
use Elementor\Group_Control_Typography;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
/**
 * Elementor icon list widget.
 *
 * Elementor widget that displays a bullet list with any chosen icons and texts.
 *
 * @since 1.2.0
 */
class Futurio_Extra_Posts extends Widget_Base {

	/**
	 * Get widget name.
	 *
	 * Retrieve icon list widget name.
	 *
	 * @since 1.2.0
	 * @access public
	 *
	 * @return string Widget name.
	 */
	public function get_name() {
		return 'futurio-extra-posts';
	}

	/**
	 * Get widget title.
	 *
	 * Retrieve icon list widget title.
	 *
	 * @since 1.2.0
	 * @access public
	 *
	 * @return string Widget title.
	 */
	public function get_title() {
		return __( 'Posts', 'futurio-extra' );
	}

	/**
	 * Get widget icon.
	 *
	 * Retrieve icon list widget icon.
	 *
	 * @since 1.2.0
	 * @access public
	 *
	 * @return string Widget icon.
	 */
	public function get_icon() {
		return 'eicon-posts-grid';
	}

	/**
	 * Get widget categories.
	 *
	 * Retrieve the list of categories the icon list widget belongs to.
	 *
	 * Used to determine where to display the widget in the editor.
	 *
	 * @since 1.2.0
	 * @access public
	 *
	 * @return array Widget categories.
	 */
	public function get_categories() {
		return [ 'basic' ];
	}

	/**
	 * Register icon list widget controls.
	 *
	 * Adds different input fields to allow the user to change and customize the widget settings.
	 *
	 * @since 1.2.0
	 * @access protected
	 */
	protected function register_controls() {
		$this->start_controls_section(
			'section_blog',
			[
				'label' => __( 'Blog', 'futurio-extra' ),
			]
		);


		$this->add_control(
			'number',
			[
				'label' => __( 'Number of posts', 'futurio-extra' ),
				'type' => Controls_Manager::NUMBER,
				'default' => 4,
			]
		);
    
    $this->add_control(
			'per_row',
			[
				'label' => __( 'Posts per row', 'futurio-extra' ),
				'type' => Controls_Manager::SELECT,
				'default' => '3',
				'options' => [
					'12'  => __( '1', 'futurio-extra' ),
					'6' => __( '2', 'futurio-extra' ),
					'4' => __( '3', 'futurio-extra' ),
					'3' => __( '4', 'futurio-extra' ),
					'2' => __( '6', 'futurio-extra' ),
				],
			]
		);

		$this->add_control(
			'category',
			[
				'label' 	=> __( 'Categories', 'futurio-extra' ),
				'type' 		=> Controls_Manager::SELECT,
                'options' 	=> $this->get_cats(),
                'multiple' 	=> true,				
				'default' 	=> 4,
			]
		);
    
    $this->add_control(
			'limit',
			[
				'label' => __( 'Excerpt', 'futurio-extra' ),
				'type' => Controls_Manager::SLIDER,
				'default' => [
					'size' => 35,
				],
				'range' => [
					'ms' => [
						'min' => 0,
						'max' => 100,
						'step' => 1,
					],
				],
			]
		);


		$this->add_control(
			'view',
			[
				'label' => __( 'View', 'futurio-extra' ),
				'type' => Controls_Manager::HIDDEN,
				'default' => 'traditional',
			]
		);

		$this->end_controls_section();


		//Post titles styles
		$this->start_controls_section(
			'section_post_title_style',
			[
				'label' => __( 'Post title', 'futurio-extra' ),
				'tab' 	=> Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_control(
			'name_color',
			[
				'label' 	=> __( 'Color', 'futurio-extra' ),
				'type' 		=> Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .latest-news-wrapper h4 a' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' 		=> 'post_title_typography',
				'selector' 	=> '{{WRAPPER}} .latest-news-wrapper h4',
			]
		);

		$this->end_controls_section();
		//End post titles styles	

		

		//Content styles
		$this->start_controls_section(
			'section_content_style',
			[
				'label' => __( 'Post content', 'futurio-extra' ),
				'tab' 	=> Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_control(
			'content_color',
			[
				'label' 	=> __( 'Color', 'futurio-extra' ),
				'type' 		=> Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}} .latest-news-wrapper .news-item .post-excerpt' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name' 		=> 'content_typography',
				'selector' 	=> '{{WRAPPER}} .latest-news-wrapper .news-item .post-excerpt',
			]
		);

		$this->end_controls_section();
		//End content styles
    	
    //Post spacing
		$this->start_controls_section(
			'section_post_spacing',
			[
				'label' => __( 'Post spacing', 'futurio-extra' ),
				'tab' 	=> Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_control(
			'post_spacing',
			[
				'label' => __( 'Spacing', 'futurio-extra' ),
				'type' => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'default' => [	
            'top' => 0,
						'right' => 15,
						'bottom' => 0,
						'left' => 15,
						'unit' => 'px',
						'isLinked' => false,
					],				
				'selectors' => [
					'.page-builders {{WRAPPER}} .f-posts-shortcode article, {{WRAPPER}} .f-posts-shortcode article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->end_controls_section();
		//End post spacing


	}

	protected function get_cats() {
		$items = [ '' => '' ];
		$terms = get_terms('category');
		foreach ( $terms as $term ) {
			$items[ $term->term_id ] = $term->name;
		}
		return $items;
	}	

	/**
	 * Render icon list widget output on the frontend.
	 *
	 * Written in PHP and used to generate the final HTML.
	 *
	 * @since 1.2.0
	 * @access protected
	 */
	protected function render() {
		$settings = $this->get_settings();
    $limit = $settings['limit']['size'];
    $per_row = $settings['per_row'];
		$r = new \WP_Query( array(
			'no_found_rows'       => true,
			'post_status'         => 'publish',
			'cat'		  		  => $settings['category'],
			'posts_per_page'	  => $settings['number']		
		) );

		if ( $r->have_posts() ) :
		?>

		<div class="f-posts-shortcode">
			<div class="latest-news-wrapper">
			<?php while ( $r->have_posts() ) : $r->the_post(); ?>
				<article id="post-<?php the_ID(); ?>" <?php post_class( 'news-item text-center col-md-' . absint( $per_row ) ); ?>>
					<div class="entry-thumb">
						<?php futurio_thumb_img( 'futurio-med' ); ?>		
					</div>						
  				<?php the_title( sprintf( '<h4 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h4>' ); ?>
          <div class="f-line"></div>
					<div class="post-excerpt">
					<?php echo wp_trim_words( wp_strip_all_tags( get_the_excerpt() ), $limit ); ?>
          </div>
				</article>
			<?php endwhile; ?>
			</div>
		</div>

		<?php 
		wp_reset_postdata();
		endif; //end have_posts() check
		?>

		<?php
	}

	/**
	 * Render icon list widget output in the editor.
	 *
	 * Written as a Backbone JavaScript template and used to generate the live preview.
	 *
	 * @since 1.2.0
	 * @access protected
	 */
	protected function content_template() {
	}
}