Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
wp-grid-builder-bricks
/
includes
:
class-render.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Render elements * * @package WP Grid Builder - Bricks * @author Loïc Blascos * @copyright 2019-2022 Loïc Blascos */ namespace WP_Grid_Builder_Bricks\Includes; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Render * * @class WP_Grid_Builder_Bricks\Includes\Render * @since 1.0.0 */ final class Render { use Helpers; /** * Holds Bricks elements to handle * * @since 1.0.0 * @access protected * @var array */ protected $elements = []; /** * Constructor * * @since 1.0.0 * @access public */ public function __construct() { add_filter( 'wp_grid_builder_bricks/handle_element', [ $this, 'handle_element' ], 10, 2 ); add_filter( 'wp_grid_builder_bricks/setup_element', [ $this, 'setup_element' ] ); add_filter( 'wp_grid_builder/frontend/register_scripts', [ $this, 'register_script' ] ); add_filter( 'wp_grid_builder/frontend/add_inline_script', [ $this, 'inline_script' ] ); add_filter( 'wp_grid_builder/frontend/localize_script', [ $this, 'unset_elements' ] ); add_filter( 'bricks/builder/data_post_id', [ $this, 'get_elements' ] ); } /** * Whether to handle element * * @since 1.0.0 * @access public * * @param boolean $handle Whether to handle element. * @param string $element Element id. * @return boolean */ public function handle_element( $handle, $element ) { if ( ! isset( $this->elements[ $element ] ) ) { return false; } // Prevent rendering duplicate elements. unset( $this->elements[ $element ] ); return true; } /** * Setup element ID to handle * * @since 1.0.0 * @access public * * @param interger $element_id Element ID to handle. */ public function setup_element( $element_id ) { if ( empty( $element_id ) || isset( $this->elements[ $element_id ] ) ) { return false; } $this->elements[ $element_id ] = true; } /** * Loop through elements to render * * @since 1.0.0 * @access public * * @param integer $post_id Holds current post ID. * @return integer */ public function get_elements( $post_id ) { if ( bricks_is_builder() || wpgb_doing_ajax() ) { return $post_id; } $elements = $this->get_bricks_data( $post_id ); if ( false === $elements ) { return $post_id; } foreach ( $elements as $element ) { if ( empty( $element['id'] ) || empty( $element['name'] ) ) { continue; } $this->get_template( $element ); if ( empty( $element['settings']['grid'] ) || 'wpgb-facet' !== $element['name'] ) { continue; } $this->setup_element( $element['settings']['grid'] ); } return $post_id; } /** * Retrieve template elements to render * * @since 1.0.0 * @access public * * @param array $element Holds element. */ public function get_template( $element ) { if ( 'template' !== $element['name'] || empty( $element['settings']['template'] ) ) { return; } apply_filters( 'wp_grid_builder_bricks/data_post_id', (int) $element['settings']['template'] ); $this->get_elements( $element['settings']['template'] ); } /** * Unset shadow elements generated by Bricks facets * * @since 1.0.0 * @access public * * @param array $data Holds data to localize. * @return array */ public function unset_elements( $data ) { if ( empty( $data['shadowGrids'] ) ) { return $data; } $data['shadowGrids'] = array_values( array_filter( $data['shadowGrids'], function( $id ) { return strpos( $id, 'bricks-element-' ) === false; } ) ); return $data; } /** * Register script * * @since 1.0.0 * @access public * * @param array $scripts Holds script to register. * @return array */ public function register_script( $scripts ) { $scripts[] = [ 'handle' => 'wpgb-bricks', 'source' => WPGB_BRICKS_URL . 'assets/js/frontend.js', 'version' => WPGB_BRICKS_VERSION, ]; return $scripts; } /** * Add inline javascript code to instantiate Bricks elements * * @since 1.0.0 * @access public * * @param string $script Inline script. * @return string */ public function inline_script( $script ) { $rendered = []; foreach ( Container::all() as $id => $instance ) { $rendered[] = $instance->inline_script( $script ); } if ( ! empty( $rendered ) ) { $script .= implode( '', array_unique( $rendered ) ); } return apply_filters( 'wp_grid_builder/template/inline_script', $script ); } }