224 lines
5.2 KiB
PHP
224 lines
5.2 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* This file handles the Hook Element.
|
||
|
*
|
||
|
* @package GP Premium
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // No direct access, please.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Execute our hook elements.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
*/
|
||
|
class GeneratePress_Hook {
|
||
|
|
||
|
/**
|
||
|
* Set our content variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var string The content.
|
||
|
*/
|
||
|
protected $content = '';
|
||
|
|
||
|
/**
|
||
|
* Set our hook/action variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var string The hook.
|
||
|
*/
|
||
|
protected $hook = '';
|
||
|
|
||
|
/**
|
||
|
* Set our custom hook variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var string The custom hook.
|
||
|
*/
|
||
|
protected $custom_hook = '';
|
||
|
|
||
|
/**
|
||
|
* Set our disable site header variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var boolean Whether we're disabling the header.
|
||
|
*/
|
||
|
protected $disable_site_header = false;
|
||
|
|
||
|
/**
|
||
|
* Set our disable footer variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var boolean Whether we're disabling the footer.
|
||
|
*/
|
||
|
protected $disable_site_footer = false;
|
||
|
|
||
|
/**
|
||
|
* Set our priority variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var int The hook priority.
|
||
|
*/
|
||
|
protected $priority = 10;
|
||
|
|
||
|
/**
|
||
|
* Set our execute PHP variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var boolean Whether we're executing PHP.
|
||
|
*/
|
||
|
protected $php = false;
|
||
|
|
||
|
/**
|
||
|
* Set our execute shortcodes variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var boolean Whether we're executing shortcodes.
|
||
|
*/
|
||
|
protected $shortcodes = false;
|
||
|
|
||
|
/**
|
||
|
* Set our location variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var array The conditions.
|
||
|
*/
|
||
|
protected $conditional = array();
|
||
|
|
||
|
/**
|
||
|
* Set our exclusions variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var array The exclusions.
|
||
|
*/
|
||
|
protected $exclude = array();
|
||
|
|
||
|
/**
|
||
|
* Set our user condition variable.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
* @var array The user roles.
|
||
|
*/
|
||
|
protected $users = array();
|
||
|
|
||
|
/**
|
||
|
* Set up our class and give variables their values.
|
||
|
*
|
||
|
* @param int $post_id The post ID of the element we're executing.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
*/
|
||
|
public function __construct( $post_id ) {
|
||
|
|
||
|
$this->hook = get_post_meta( $post_id, '_generate_hook', true );
|
||
|
|
||
|
if ( empty( $this->hook ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->content = get_post_meta( $post_id, '_generate_element_content', true );
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_custom_hook', true ) ) {
|
||
|
$this->custom_hook = get_post_meta( $post_id, '_generate_custom_hook', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_hook_disable_site_header', true ) ) {
|
||
|
$this->disable_site_header = get_post_meta( $post_id, '_generate_hook_disable_site_header', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_hook_disable_site_footer', true ) ) {
|
||
|
$this->disable_site_footer = get_post_meta( $post_id, '_generate_hook_disable_site_footer', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_hook_priority', true ) || '0' === get_post_meta( $post_id, '_generate_hook_priority', true ) ) {
|
||
|
$this->priority = get_post_meta( $post_id, '_generate_hook_priority', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_hook_execute_php', true ) ) {
|
||
|
$this->php = get_post_meta( $post_id, '_generate_hook_execute_php', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_hook_execute_shortcodes', true ) ) {
|
||
|
$this->shortcodes = get_post_meta( $post_id, '_generate_hook_execute_shortcodes', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_element_display_conditions', true ) ) {
|
||
|
$this->conditional = get_post_meta( $post_id, '_generate_element_display_conditions', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_element_exclude_conditions', true ) ) {
|
||
|
$this->exclude = get_post_meta( $post_id, '_generate_element_exclude_conditions', true );
|
||
|
}
|
||
|
|
||
|
if ( get_post_meta( $post_id, '_generate_element_user_conditions', true ) ) {
|
||
|
$this->users = get_post_meta( $post_id, '_generate_element_user_conditions', true );
|
||
|
}
|
||
|
|
||
|
if ( 'custom' === $this->hook && $this->custom_hook ) {
|
||
|
$this->hook = $this->custom_hook;
|
||
|
}
|
||
|
|
||
|
$display = apply_filters( 'generate_hook_element_display', GeneratePress_Conditions::show_data( $this->conditional, $this->exclude, $this->users ), $post_id );
|
||
|
|
||
|
/**
|
||
|
* Simplify filter name.
|
||
|
*
|
||
|
* @since 2.0.0
|
||
|
*/
|
||
|
$display = apply_filters(
|
||
|
'generate_element_display',
|
||
|
$display,
|
||
|
$post_id
|
||
|
);
|
||
|
|
||
|
if ( $display ) {
|
||
|
global $generate_elements;
|
||
|
|
||
|
$generate_elements[ $post_id ] = array(
|
||
|
'is_block_element' => false,
|
||
|
'type' => 'hook',
|
||
|
'id' => $post_id,
|
||
|
);
|
||
|
|
||
|
if ( 'generate_header' === $this->hook && $this->disable_site_header ) {
|
||
|
remove_action( 'generate_header', 'generate_construct_header' );
|
||
|
}
|
||
|
|
||
|
if ( 'generate_footer' === $this->hook && $this->disable_site_footer ) {
|
||
|
remove_action( 'generate_footer', 'generate_construct_footer' );
|
||
|
add_filter( 'generate_footer_widgets', '__return_null' );
|
||
|
}
|
||
|
|
||
|
add_action( esc_attr( $this->hook ), array( $this, 'execute_hook' ), absint( $this->priority ) );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Output our hook content.
|
||
|
*
|
||
|
* @since 1.7
|
||
|
*/
|
||
|
public function execute_hook() {
|
||
|
|
||
|
$content = $this->content;
|
||
|
|
||
|
if ( $this->shortcodes ) {
|
||
|
$content = do_shortcode( $content );
|
||
|
}
|
||
|
|
||
|
if ( $this->php && GeneratePress_Elements_Helper::should_execute_php() ) {
|
||
|
ob_start();
|
||
|
eval( '?>' . $content . '<?php ' ); // phpcs:ignore -- Using eval() to execute PHP.
|
||
|
echo ob_get_clean(); // phpcs:ignore -- Escaping not necessary.
|
||
|
} else {
|
||
|
echo $content; // phpcs:ignore -- Escaping not necessary.
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|