File "class-grid.php"

Full path: /home/dora/public_html/wp-content/plugins/wp-grid-builder-bricks/includes/elements/class-grid.php
File size: 2.87 KB
MIME-type: --
Charset: utf-8

<?php
/**
 * Grid element
 *
 * @package   WP Grid Builder - Bricks
 * @author    Loïc Blascos
 * @copyright 2019-2022 Loïc Blascos
 */

namespace WP_Grid_Builder_Bricks\Elements;

use WP_Grid_Builder_Bricks\Includes\Helpers;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Grid element
 *
 * @class WP_Grid_Builder_Bricks\Elements\Grid
 * @since 1.0.0
 */
final class Grid extends \Bricks\Element {

	use Helpers;

	/**
	 * Category slug
	 *
	 * @since 1.0.0
	 * @access public
	 * @var string
	 */
	public $category = 'WP Grid Builder';

	/**
	 * Element name
	 *
	 * @since 1.0.0
	 * @access public
	 * @var string
	 */
	public $name = 'wpgb-grid';

	/**
	 * Element icon
	 *
	 * @since 1.0.0
	 * @access public
	 * @var string
	 */
	public $icon = 'ti-layout-grid2';

	/**
	 * Element CSS selector
	 *
	 * @since 1.0.0
	 * @access public
	 * @var string
	 */
	public $css_selector = '.wp-grid-builder';

	/**
	 * Nestable element
	 *
	 * @since 1.0.0
	 * @access public
	 * @var boolean
	 */
	public $nestable = false;

	/**
	 * Element label
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return string
	 */
	public function get_label() {

		return esc_html__( 'Grid', 'wpgb-bricks' );

	}

	/**
	 * Element controls
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function set_controls() {

		include WPGB_BRICKS_PATH . 'includes/elements/controls/grid.php';

	}

	/**
	 * Widget render
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function render() {

		$is_empty = empty( $this->settings['id'] );

		if ( ! $this->is_builder() && $is_empty ) {
			return;
		}

		// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		echo '<div ' . $this->render_attributes( '_root' ) . '>';
			! $is_empty && wpgb_render_grid(
				array_merge(
					[ 'id' => $this->settings['id'] ],
					$this->default_query()
				)
			);
			$this->enqueue_grid_assets();
		echo '</div>';

	}

	/**
	 * Get default editor query to simulate main query.
	 *
	 * @since 1.0.0
	 * @access public
	 *
	 * @return array
	 */
	public function default_query() {

		$query_args['is_main_query'] = ! empty( $this->settings['is_main_query'] );

		if ( ! $this->is_builder() ) {
			return $query_args;
		}

		if ( ! $query_args['is_main_query'] ) {
			return $query_args;
		}

		$post_types = get_post_types( [ 'public' => true ] );
		unset( $post_types['attachment'] );

		return [
			'post_type'   => $post_types,
			'post_status' => 'publish',
		];
	}

	/**
	 * Enqueue widget styles in editor
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function enqueue_grid_assets() {

		if ( ! $this->is_builder() ) {
			return;
		}

		// Enqueue plugin styles.
		wpgb_enqueue_styles();

		// Add inline styles generated by a grid only.
		$styles = wp_styles();
		$styles->print_inline_style( WPGB_SLUG . '-style' );
		$styles->do_item( WPGB_SLUG . '-grids' );
		$styles->do_item( WPGB_SLUG . '-fonts' );

	}
}