164 lines
3.9 KiB
PHP
164 lines
3.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* This file displays our block elements on the site.
|
||
|
*
|
||
|
* @package GP Premium
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // No direct access, please.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Build our Block Elements.
|
||
|
*/
|
||
|
class GeneratePress_Block_Element {
|
||
|
|
||
|
/**
|
||
|
* The element ID.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
* @var int ID of the element.
|
||
|
*/
|
||
|
protected $post_id = '';
|
||
|
|
||
|
/**
|
||
|
* The element type.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
* @var string Type of element.
|
||
|
*/
|
||
|
protected $type = '';
|
||
|
|
||
|
/**
|
||
|
* Kicks it all off.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
*
|
||
|
* @param int $post_id The element post ID.
|
||
|
*/
|
||
|
public function __construct( $post_id ) {
|
||
|
$this->post_id = $post_id;
|
||
|
$this->type = get_post_meta( $post_id, '_generate_block_type', true );
|
||
|
|
||
|
$display_conditions = get_post_meta( $post_id, '_generate_element_display_conditions', true ) ? get_post_meta( $post_id, '_generate_element_display_conditions', true ) : array();
|
||
|
$exclude_conditions = get_post_meta( $post_id, '_generate_element_exclude_conditions', true ) ? get_post_meta( $post_id, '_generate_element_exclude_conditions', true ) : array();
|
||
|
$user_conditions = get_post_meta( $post_id, '_generate_element_user_conditions', true ) ? get_post_meta( $post_id, '_generate_element_user_conditions', true ) : array();
|
||
|
|
||
|
$display = apply_filters(
|
||
|
'generate_block_element_display',
|
||
|
GeneratePress_Conditions::show_data(
|
||
|
$display_conditions,
|
||
|
$exclude_conditions,
|
||
|
$user_conditions
|
||
|
),
|
||
|
$post_id
|
||
|
);
|
||
|
|
||
|
if ( $display ) {
|
||
|
$hook = get_post_meta( $post_id, '_generate_hook', true );
|
||
|
$custom_hook = get_post_meta( $post_id, '_generate_custom_hook', true );
|
||
|
$priority = get_post_meta( $post_id, '_generate_hook_priority', true );
|
||
|
|
||
|
if ( '' === $priority ) {
|
||
|
$priority = 10;
|
||
|
}
|
||
|
|
||
|
switch ( $this->type ) {
|
||
|
case 'site-header':
|
||
|
$hook = 'generate_header';
|
||
|
break;
|
||
|
|
||
|
case 'site-footer':
|
||
|
$hook = 'generate_footer';
|
||
|
break;
|
||
|
|
||
|
case 'right-sidebar':
|
||
|
$hook = 'generate_before_right_sidebar_content';
|
||
|
break;
|
||
|
|
||
|
case 'left-sidebar':
|
||
|
$hook = 'generate_before_left_sidebar_content';
|
||
|
break;
|
||
|
|
||
|
case 'custom':
|
||
|
$hook = $custom_hook;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( ! $hook ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( 'generate_header' === $hook ) {
|
||
|
remove_action( 'generate_header', 'generate_construct_header' );
|
||
|
}
|
||
|
|
||
|
if ( 'generate_footer' === $hook ) {
|
||
|
remove_action( 'generate_footer', 'generate_construct_footer' );
|
||
|
}
|
||
|
|
||
|
add_action( esc_attr( $hook ), array( $this, 'build_hook' ), absint( $priority ) );
|
||
|
|
||
|
if ( 'right-sidebar' === $this->type || 'left-sidebar' === $this->type ) {
|
||
|
add_filter( 'sidebars_widgets', array( $this, 'remove_sidebar_widgets' ) );
|
||
|
add_filter( 'generate_show_default_sidebar_widgets', '__return_false' );
|
||
|
}
|
||
|
|
||
|
add_filter( 'generateblocks_do_content', array( $this, 'do_block_content' ) );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Tell GenerateBlocks about our block element content so it can build CSS.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
* @param string $content The existing content.
|
||
|
*/
|
||
|
public function do_block_content( $content ) {
|
||
|
if ( has_blocks( $this->post_id ) ) {
|
||
|
$block_element = get_post( $this->post_id );
|
||
|
|
||
|
if ( ! $block_element || 'gp_elements' !== $block_element->post_type ) {
|
||
|
return $content;
|
||
|
}
|
||
|
|
||
|
if ( 'publish' !== $block_element->post_status || ! empty( $block_element->post_password ) ) {
|
||
|
return $content;
|
||
|
}
|
||
|
|
||
|
$content .= $block_element->post_content;
|
||
|
}
|
||
|
|
||
|
return $content;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove existing sidebar widgets.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
* @param array $widgets The existing widgets.
|
||
|
*/
|
||
|
public function remove_sidebar_widgets( $widgets ) {
|
||
|
if ( 'right-sidebar' === $this->type ) {
|
||
|
unset( $widgets['sidebar-1'] );
|
||
|
}
|
||
|
|
||
|
if ( 'left-sidebar' === $this->type ) {
|
||
|
unset( $widgets['sidebar-2'] );
|
||
|
}
|
||
|
|
||
|
return $widgets;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Builds the HTML structure for Page Headers.
|
||
|
*
|
||
|
* @since 1.11.0
|
||
|
*/
|
||
|
public function build_hook() {
|
||
|
echo GeneratePress_Elements_Helper::build_content( $this->post_id); // phpcs:ignore -- No escaping needed.
|
||
|
}
|
||
|
}
|