laipower/wp-content/plugins/gp-premium/elements/class-block-elements.php

1790 lines
54 KiB
PHP
Raw Normal View History

<?php
/**
* This file handles the dynamic aspects of Block Elements.
*
* @package GP Premium
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // No direct access, please.
}
/**
* Dynamic blocks.
*/
class GeneratePress_Block_Elements {
/**
* Instance.
*
* @access private
* @var object Instance
* @since 2.0.0
*/
private static $instance;
/**
* Initiator.
*
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Build it.
*/
public function __construct() {
add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_assets' ), 8 );
if ( version_compare( $GLOBALS['wp_version'], '5.8', '<' ) ) {
add_filter( 'block_categories', array( $this, 'add_block_category' ) );
} else {
add_filter( 'block_categories_all', array( $this, 'add_block_category' ) );
}
add_action( 'init', array( $this, 'register_dynamic_blocks' ) );
add_action( 'init', array( $this, 'register_meta' ) );
add_filter( 'render_block', array( $this, 'render_blocks' ), 10, 2 );
add_filter( 'generateblocks_background_image_url', array( $this, 'set_background_image_url' ), 10, 2 );
add_filter( 'generateblocks_attr_container', array( $this, 'set_container_attributes' ), 10, 2 );
add_filter( 'generateblocks_defaults', array( $this, 'set_defaults' ) );
add_action( 'generateblocks_block_css_data', array( $this, 'generate_css' ), 10, 7 );
add_filter( 'generateblocks_attr_container', array( $this, 'set_dynamic_container_url' ), 15, 2 );
add_filter( 'generateblocks_attr_container-link', array( $this, 'set_dynamic_container_url' ), 15, 2 );
add_action( 'wp_enqueue_scripts', array( $this, 'frontend_css' ), 100 );
}
/**
* Enqueue assets.
*/
public function enqueue_assets() {
if ( 'gp_elements' !== get_post_type() ) {
return;
}
wp_enqueue_script(
'gp-premium-block-elements',
GP_PREMIUM_DIR_URL . 'dist/block-elements.js',
array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
filemtime( GP_PREMIUM_DIR_PATH . 'dist/block-elements.js' ),
true
);
wp_set_script_translations( 'gp-premium-block-elements', 'gp-premium', GP_PREMIUM_DIR_PATH . 'langs' );
$taxonomies = get_taxonomies(
apply_filters(
'generate_get_block_element_taxonomies_args',
array(
'public' => true,
)
)
);
$parent_elements = get_posts(
array(
'post_type' => 'gp_elements',
'post_parent' => 0,
'no_found_rows' => true,
'post_status' => 'publish',
'numberposts' => 100,
'fields' => 'ids',
'exclude' => array( get_the_ID() ),
'meta_query' => array(
array(
'key' => '_generate_block_type',
'value' => 'content-template',
'compare' => '=',
),
),
)
);
$parent_elements_data = array();
foreach ( (array) $parent_elements as $element ) {
$parent_elements_data[] = array(
'label' => get_the_title( $element ),
'id' => $element,
);
}
$image_sizes = get_intermediate_image_sizes();
$image_sizes = array_diff( $image_sizes, array( '1536x1536', '2048x2048' ) );
$image_sizes[] = 'full';
$containerWidth = function_exists( 'generate_get_option' ) ? generate_get_option( 'container_width' ) : 1100;
$rightSidebarWidth = apply_filters( 'generate_right_sidebar_width', '25' );
$leftSidebarWidth = apply_filters( 'generate_left_sidebar_width', '25' );
$containerWidth = floatval( $containerWidth );
$leftSidebarWidth = '0.' . $leftSidebarWidth;
$rightSidebarWidth = '0.' . $rightSidebarWidth;
$leftSidebarWidth = $containerWidth - ( $containerWidth * $leftSidebarWidth );
$rightSidebarWidth = $containerWidth - ( $containerWidth * $rightSidebarWidth );
$leftSidebarWidth = $containerWidth - $leftSidebarWidth;
$rightSidebarWidth = $containerWidth - $rightSidebarWidth;
$contentWidth = $containerWidth - $rightSidebarWidth;
wp_localize_script(
'gp-premium-block-elements',
'gpPremiumBlockElements',
array(
'isBlockElement' => 'gp_elements' === get_post_type(),
'taxonomies' => $taxonomies,
'rightSidebarWidth' => $rightSidebarWidth,
'leftSidebarWidth' => $leftSidebarWidth,
'contentWidth' => $contentWidth,
'hooks' => GeneratePress_Elements_Helper::get_available_hooks(),
'excerptLength' => apply_filters( 'excerpt_length', 55 ), // phpcs:ignore -- Core filter.
'isGenerateBlocksActive' => function_exists( 'generateblocks_load_plugin_textdomain' ),
'isGenerateBlocksInstalled' => file_exists( WP_PLUGIN_DIR . '/generateblocks/plugin.php' ) ? true : false,
'isGenerateBlocksProActive' => function_exists( 'generateblocks_pro_init' ),
'installLink' => wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=generateblocks' ), 'install-plugin_generateblocks' ),
'activateLink' => wp_nonce_url( 'plugins.php?action=activate&amp;plugin=generateblocks/plugin.php&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_generateblocks/plugin.php' ),
'imageSizes' => $image_sizes,
'imageSizeDimensions' => $this->get_image_Sizes(),
'featuredImagePlaceholder' => GP_PREMIUM_DIR_URL . 'elements/assets/admin/featured-image-placeholder.png',
'authorImagePlaceholder' => GP_PREMIUM_DIR_URL . 'elements/assets/admin/author-image-placeholder.png',
'bgImageFallback' => GP_PREMIUM_DIR_URL . 'elements/assets/admin/background-image-fallback.jpg',
'templateImageUrl' => 'https://gpsites.co/files/element-library',
'parentElements' => $parent_elements_data,
)
);
wp_enqueue_style(
'gp-premium-block-elements',
GP_PREMIUM_DIR_URL . 'dist/block-elements.css',
array( 'wp-edit-blocks' ),
filemtime( GP_PREMIUM_DIR_PATH . 'dist/block-elements.css' )
);
}
/**
* Add our block category.
*
* @param array $categories The existing categories.
*/
public function add_block_category( $categories ) {
return array_merge(
array(
array(
'slug' => 'generatepress',
'title' => __( 'GeneratePress', 'gp-premium' ),
),
),
$categories
);
}
/**
* Register our dynamic blocks.
*/
public function register_dynamic_blocks() {
if ( ! function_exists( 'register_block_type' ) ) {
return;
}
register_block_type(
'generatepress/dynamic-content',
array(
'render_callback' => array( $this, 'do_dynamic_content_block' ),
'attributes' => array(
'contentType' => array(
'type' => 'string',
'default' => '',
),
'excerptLength' => array(
'type' => 'number',
'default' => apply_filters( 'excerpt_length', 55 ), // phpcs:ignore -- Core filter.
),
'useThemeMoreLink' => array(
'type' => 'boolean',
'defaut' => true,
),
'customMoreLink' => array(
'type' => 'string',
'default' => '',
),
),
)
);
register_block_type(
'generatepress/dynamic-image',
array(
'render_callback' => array( $this, 'do_dynamic_image_block' ),
'attributes' => array(
'imageType' => array(
'type' => 'string',
'default' => '',
),
'imageSource' => array(
'type' => 'string',
'default' => 'current-post',
),
'customField' => array(
'type' => 'string',
'default' => '',
),
'gpDynamicSourceInSameTerm' => array(
'type' => 'boolean',
'default' => false,
),
'gpDynamicSourceInSameTermTaxonomy' => array(
'tyoe' => 'string',
'default' => 'category',
),
'imageSize' => array(
'type' => 'string',
'default' => 'full',
),
'linkTo' => array(
'type' => 'string',
'default' => '',
),
'linkToCustomField' => array(
'type' => 'string',
'default' => '',
),
'imageWidth' => array(
'type' => 'number',
'default' => null,
),
'imageHeight' => array(
'type' => 'number',
'default' => null,
),
'avatarSize' => array(
'type' => 'number',
'default' => 30,
),
'avatarRounded' => array(
'type' => 'boolean',
'default' => false,
),
),
)
);
}
/**
* Do our dynamic content block.
*
* @param array $attributes The attributes from this block.
*/
public function do_dynamic_content_block( $attributes ) {
if ( empty( $attributes['contentType'] ) ) {
return;
}
if ( 'post-content' === $attributes['contentType'] ) {
return $this->do_content_block();
}
if ( 'post-excerpt' === $attributes['contentType'] ) {
return $this->do_excerpt_block( $attributes );
}
if ( 'term-description' === $attributes['contentType'] ) {
return sprintf(
'<div class="dynamic-term-description">%s</div>',
term_description()
);
}
if ( 'author-description' === $attributes['contentType'] ) {
return sprintf(
'<div class="dynamic-author-description">%s</div>',
get_the_author_meta( 'description' )
);
}
}
/**
* Build our content block.
*/
public function do_content_block() {
// Prevents infinite loops while in the editor or autosaving.
$nonpublic_post_types = array(
'gp_elements',
'revision',
);
if ( ! in_array( get_post_type(), $nonpublic_post_types ) && ! is_admin() ) {
return sprintf(
'<div class="dynamic-entry-content">%s</div>',
apply_filters( 'the_content', str_replace( ']]>', ']]&gt;', get_the_content() ) ) // phpcs:ignore -- Core filter.
);
}
}
/**
* Build our excerpt block.
*
* @param array $attributes The block attributes.
*/
public function do_excerpt_block( $attributes ) {
if ( version_compare( PHP_VERSION, '5.6', '>=' ) ) {
$filter_excerpt_length = function( $length ) use ( $attributes ) {
return isset( $attributes['excerptLength'] ) ? $attributes['excerptLength'] : $length;
};
add_filter(
'excerpt_length',
$filter_excerpt_length,
100
);
if ( isset( $attributes['useThemeMoreLink'] ) && ! $attributes['useThemeMoreLink'] ) {
$filter_more_text = function() use ( $attributes ) {
if ( empty( $attributes['customMoreLink'] ) ) {
return ' ...';
}
return apply_filters(
'generate_excerpt_block_more_output',
sprintf(
' ... <a title="%1$s" class="dynamic-read-more read-more" href="%2$s" aria-label="%4$s">%3$s</a>',
the_title_attribute( 'echo=0' ),
esc_url( get_permalink( get_the_ID() ) ),
wp_kses_post( $attributes['customMoreLink'] ),
sprintf(
/* translators: Aria-label describing the read more button */
_x( 'More on %s', 'more on post title', 'gp-premium' ),
the_title_attribute( 'echo=0' )
)
)
);
};
add_filter(
'excerpt_more',
$filter_more_text,
100
);
}
}
if ( 'gp_elements' === get_post_type() || is_admin() ) {
$post = get_posts(
array(
'post_type' => 'post',
'numberposts' => 1,
)
);
if ( ! empty( $post[0] ) ) {
return sprintf(
'<div class="dynamic-entry-excerpt">%s</div>',
apply_filters( 'the_excerpt', get_the_excerpt( $post[0]->ID ) ) // phpcs:ignore -- Core filter.
);
} else {
return sprintf(
'<div class="dynamic-entry-excerpt"><p>%s</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed pulvinar ligula augue, quis bibendum tellus scelerisque venenatis. Pellentesque porta nisi mi. In hac habitasse platea dictumst. Etiam risus elit, molestie non volutpat ac, pellentesque sed eros. Nunc leo odio, sodales non tortor at, porttitor posuere dui.</p></div>',
__( 'This is a placeholder for your content.', 'gp-premium' )
);
}
}
$excerpt = apply_filters( 'the_excerpt', get_the_excerpt() ); // phpcs:ignore -- Core filter.
if ( isset( $filter_excerpt_length ) ) {
remove_filter(
'excerpt_length',
$filter_excerpt_length,
100
);
}
if ( isset( $filter_more_text ) ) {
remove_filter(
'excerpt_more',
$filter_more_text,
100
);
}
return sprintf(
'<div class="dynamic-entry-excerpt">%s</div>',
$excerpt
);
}
/**
* Build our dynamic image block.
*
* @param array $attributes The block attributes.
*/
public function do_dynamic_image_block( $attributes ) {
if ( empty( $attributes['imageType'] ) ) {
return;
}
if ( 'featured-image' === $attributes['imageType'] ) {
$image_source = ! empty( $attributes['imageSource'] ) ? $attributes['imageSource'] : 'current-post';
$id = $this->get_source_id( $image_source, $attributes );
if ( ! $id ) {
return;
}
if ( has_post_thumbnail( $id ) ) {
$size = ! empty( $attributes['imageSize'] ) ? $attributes['imageSize'] : 'full';
$featured_image_classes = array( 'dynamic-featured-image' );
if ( ! empty( $attributes['className'] ) ) {
$featured_image_classes[] = $attributes['className'];
}
$featured_image = get_the_post_thumbnail( $id, $size, array( 'class' => implode( ' ', $featured_image_classes ) ) );
// We can't alter the width/height generated by get_the_post_thumbnail(), so we need to resort to this.
if ( ! empty( $attributes['imageWidth'] ) ) {
$featured_image = preg_replace( '/width=[\"\'][0-9]+[\"\']/i', 'width="' . absint( $attributes['imageWidth'] ) . '"', $featured_image );
}
if ( ! empty( $attributes['imageHeight'] ) ) {
$featured_image = preg_replace( '/height=[\"\'][0-9]+[\"\']/i', 'height="' . absint( $attributes['imageHeight'] ) . '"', $featured_image );
}
if ( $featured_image ) {
if ( ! empty( $attributes['linkTo'] ) ) {
if ( 'single-post' === $attributes['linkTo'] ) {
$featured_image = sprintf(
'<a href="%s">%s</a>',
esc_url( get_permalink( $id ) ),
$featured_image
);
}
if ( 'custom-field' === $attributes['linkTo'] ) {
$custom_field = get_post_meta( $id, $attributes['linkToCustomField'], true );
if ( $custom_field ) {
$featured_image = sprintf(
'<a href="%s">%s</a>',
esc_url( $custom_field ),
$featured_image
);
}
}
}
return $featured_image;
}
}
}
if ( 'post-meta' === $attributes['imageType'] ) {
$image_source = ! empty( $attributes['imageSource'] ) ? $attributes['imageSource'] : 'current-post';
$id = $this->get_source_id( $image_source, $attributes );
if ( ! $id ) {
return;
}
$image_field_name = ! empty( $attributes['customField'] ) ? $attributes['customField'] : '';
if ( $image_field_name ) {
$image = get_post_meta( $id, $image_field_name, true );
if ( ctype_digit( $image ) ) {
$size = ! empty( $attributes['imageSize'] ) ? $attributes['imageSize'] : 'full';
$image_output = wp_get_attachment_image( $image, $size, false, array( 'class' => 'dynamic-meta-image' ) );
// We can't alter the width/height generated by get_the_post_thumbnail(), so we need to resort to this.
if ( ! empty( $attributes['imageWidth'] ) ) {
$image_output = preg_replace( '/width=[\"\'][0-9]+[\"\']/i', 'width="' . absint( $attributes['imageWidth'] ) . '"', $image_output );
}
if ( ! empty( $attributes['imageHeight'] ) ) {
$image_output = preg_replace( '/height=[\"\'][0-9]+[\"\']/i', 'height="' . absint( $attributes['imageHeight'] ) . '"', $image_output );
}
} else {
$image_output = apply_filters(
'generate_dynamic_custom_field_image',
sprintf(
'<img src="%1$s" class="dynamic-meta-image" alt="" width="%2$s" height="%3$s" />',
$image,
! empty( $attributes['imageWidth'] ) ? absint( $attributes['imageWidth'] ) : '',
! empty( $attributes['imageHeight'] ) ? absint( $attributes['imageHeight'] ) : ''
)
);
}
if ( ! empty( $image_output ) ) {
if ( ! empty( $attributes['linkTo'] ) ) {
if ( 'single-post' === $attributes['linkTo'] ) {
$image_output = sprintf(
'<a href="%s">%s</a>',
esc_url( get_permalink( $id ) ),
$image_output
);
}
if ( 'custom-field' === $attributes['linkTo'] ) {
$custom_field = get_post_meta( $id, $attributes['linkToCustomField'], true );
if ( $custom_field ) {
$image_output = sprintf(
'<a href="%s">%s</a>',
esc_url( $custom_field ),
$image_output
);
}
}
}
return $image_output;
}
}
}
if ( 'author-avatar' === $attributes['imageType'] ) {
global $post;
$author_id = $post->post_author;
$size = ! empty( $attributes['avatarSize'] ) ? $attributes['avatarSize'] : 30;
$image_alt = apply_filters( 'generate_dynamic_author_image_alt', __( 'Photo of author', 'gp-premium' ) );
$classes = array(
'dynamic-author-image',
);
if ( ! empty( $attributes['avatarRounded'] ) ) {
$classes[] = 'dynamic-author-image-rounded';
}
$avatar = get_avatar(
$author_id,
$size,
'',
esc_attr( $image_alt ),
array(
'class' => implode( ' ', $classes ),
)
);
if ( $avatar ) {
return $avatar;
}
}
}
/**
* Get our dynamic URL.
*
* @param string $link_type The kind of link to add.
* @param string $source The source of the dynamic data.
* @param array $block The block we're working with.
*/
public function get_dynamic_url( $link_type, $source, $block ) {
$id = $this->get_source_id( $source, $block['attrs'] );
$author_id = $this->get_author_id( $source, $block['attrs'] );
$url = '';
if ( 'single-post' === $link_type ) {
$url = get_permalink( $id );
}
if ( isset( $block['attrs']['gpDynamicLinkCustomField'] ) ) {
if ( 'post-meta' === $link_type ) {
$url = get_post_meta( $id, $block['attrs']['gpDynamicLinkCustomField'], true );
}
if ( 'user-meta' === $link_type ) {
$url = $this->get_user_data( $author_id, $block['attrs']['gpDynamicLinkCustomField'] );
}
if ( 'term-meta' === $link_type ) {
$url = get_term_meta( get_queried_object_id(), $block['attrs']['gpDynamicLinkCustomField'], true );
}
}
if ( 'author-archives' === $link_type ) {
$url = get_author_posts_url( $author_id );
}
if ( 'comments' === $link_type ) {
$url = get_comments_link( $id );
}
if ( 'next-posts' === $link_type ) {
global $paged, $wp_query;
$max_page = 0;
if ( ! $max_page ) {
$max_page = $wp_query->max_num_pages;
}
$paged_num = isset( $paged ) && $paged ? $paged : 1;
$nextpage = (int) $paged_num + 1;
if ( ! is_single() && ( $nextpage <= $max_page ) ) {
$url = next_posts( $max_page, false );
}
}
if ( 'previous-posts' === $link_type ) {
global $paged;
if ( ! is_single() && (int) $paged > 1 ) {
$url = previous_posts( false );
}
}
return apply_filters( 'generate_dynamic_element_url', $url, $link_type, $source, $block );
}
/**
* Wrap our dynamic text in a link.
*
* @param string $text The text to wrap.
* @param string $link_type The kind of link to add.
* @param string $source The source of the dynamic data.
* @param array $block The block we're working with.
*/
public function add_dynamic_link( $text, $link_type, $source, $block ) {
if ( 'generateblocks/headline' === $block['blockName'] ) {
$url = $this->get_dynamic_url( $link_type, $source, $block );
if ( ! $url ) {
return $text;
}
return sprintf(
'<a href="%s">%s</a>',
esc_url( $url ),
$text
);
}
if ( 'generateblocks/button' === $block['blockName'] ) {
$url = $this->get_dynamic_url( $link_type, $source, $block );
// Since this is a button, we want to scrap the whole block if we don't have a link.
if ( ! $url ) {
return '';
}
$dynamic_url = sprintf(
'href="%s"',
esc_url( $url )
);
return str_replace( 'href="#"', $dynamic_url, $text );
}
}
/**
* Get user data.
*
* @since 2.0.0
* @param int $author_id The ID of the user.
* @param string $field The field to look up.
*/
public function get_user_data( $author_id, $field ) {
$data = get_user_meta( $author_id, $field, true );
if ( ! $data ) {
$user_data_names = array(
'user_nicename',
'user_email',
'user_url',
'display_name',
);
if ( in_array( $field, $user_data_names ) ) {
$user_data = get_userdata( $author_id );
if ( $user_data ) {
switch ( $field ) {
case 'user_nicename':
$data = $user_data->user_nicename;
break;
case 'user_email':
$data = $user_data->user_email;
break;
case 'user_url':
$data = $user_data->user_url;
break;
case 'display_name':
$data = $user_data->display_name;
break;
}
}
}
}
return $data;
}
/**
* Add the dynamic bits to our blocks.
*
* @param string $block_content The block content.
* @param array $block The block info.
*/
public function render_blocks( $block_content, $block ) {
if ( 'gp_elements' === get_post_type() || is_admin() ) {
return $block_content;
}
if ( 'generateblocks/headline' === $block['blockName'] || 'generateblocks/button' === $block['blockName'] ) {
if ( ! empty( $block['attrs']['gpDynamicTextType'] ) && ! empty( $block['attrs']['gpDynamicTextReplace'] ) ) {
$text_to_replace = $block['attrs']['gpDynamicTextReplace'];
$text_type = $block['attrs']['gpDynamicTextType'];
$link_type = ! empty( $block['attrs']['gpDynamicLinkType'] ) ? $block['attrs']['gpDynamicLinkType'] : '';
$source = ! empty( $block['attrs']['gpDynamicSource'] ) ? $block['attrs']['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $block['attrs'] );
if ( ! $id ) {
return '';
}
if ( 'title' === $text_type ) {
$post_title = get_the_title( $id );
if ( ! in_the_loop() ) {
if ( is_tax() || is_category() || is_tag() ) {
$post_title = get_queried_object()->name;
} elseif ( is_post_type_archive() ) {
$post_title = post_type_archive_title( '', false );
} elseif ( is_archive() && function_exists( 'get_the_archive_title' ) ) {
$post_title = get_the_archive_title();
if ( is_author() ) {
$post_title = get_the_author();
}
} elseif ( is_home() ) {
$page_for_posts = get_option( 'page_for_posts' );
if ( ! empty( $page_for_posts ) ) {
$post_title = get_the_title( $page_for_posts );
} else {
$post_title = __( 'Blog', 'gp-premium' );
}
}
}
$post_title = apply_filters( 'generate_dynamic_element_text', $post_title, $block );
if ( $link_type ) {
$post_title = $this->add_dynamic_link( $post_title, $link_type, $source, $block );
}
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$post_title = $block['attrs']['gpDynamicTextBefore'] . $post_title;
}
$post_title = apply_filters( 'generate_dynamic_element_text_output', $post_title, $block );
$block_content = str_replace( $text_to_replace, $post_title, $block_content );
}
if ( 'post-date' === $text_type ) {
$updated_time = get_the_modified_time( 'U', $id );
$published_time = get_the_time( 'U', $id ) + 1800;
$post_date = sprintf(
'<time class="entry-date published" datetime="%1$s">%2$s</time>',
esc_attr( get_the_date( 'c', $id ) ),
esc_html( get_the_date( '', $id ) )
);
$is_updated_date = isset( $block['attrs']['gpDynamicDateType'] ) && 'updated-date' === $block['attrs']['gpDynamicDateType'];
if ( ! empty( $block['attrs']['gpDynamicDateUpdated'] ) || $is_updated_date ) {
if ( $updated_time > $published_time ) {
$post_date = sprintf(
'<time class="entry-date updated-date" datetime="%1$s">%2$s</time>',
esc_attr( get_the_modified_date( 'c', $id ) ),
esc_html( get_the_modified_date( '', $id ) )
);
} elseif ( $is_updated_date ) {
// If we're showing the updated date but no updated date exists, don't display anything.
return '';
}
}
$post_date = apply_filters( 'generate_dynamic_element_text', $post_date, $block );
if ( $link_type ) {
$post_date = $this->add_dynamic_link( $post_date, $link_type, $source, $block );
}
$before_text = '';
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$before_text = $block['attrs']['gpDynamicTextBefore'];
}
// Use the updated date before text if we're set to replace the published date with updated date.
if ( ! empty( $block['attrs']['gpDynamicUpdatedDateBefore'] ) && ! empty( $block['attrs']['gpDynamicDateUpdated'] ) && $updated_time > $published_time ) {
$before_text = $block['attrs']['gpDynamicUpdatedDateBefore'];
}
if ( ! empty( $before_text ) ) {
$post_date = $before_text . $post_date;
}
$post_date = apply_filters( 'generate_dynamic_element_text_output', $post_date, $block );
$block_content = str_replace( $text_to_replace, $post_date, $block_content );
}
if ( 'post-author' === $text_type ) {
$author_id = $this->get_author_id( $source, $block['attrs'] );
$post_author = get_the_author_meta( 'display_name', $author_id );
$post_author = apply_filters( 'generate_dynamic_element_text', $post_author, $block );
if ( empty( $post_author ) ) {
return '';
}
if ( $link_type ) {
$post_author = $this->add_dynamic_link( $post_author, $link_type, $source, $block );
}
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$post_author = $block['attrs']['gpDynamicTextBefore'] . $post_author;
}
$post_author = apply_filters( 'generate_dynamic_element_text_output', $post_author, $block );
$block_content = str_replace( $text_to_replace, $post_author, $block_content );
}
if ( 'terms' === $text_type && 'generateblocks/headline' === $block['blockName'] ) {
if ( ! empty( $block['attrs']['gpDynamicTextTaxonomy'] ) ) {
$terms = get_the_terms( $id, $block['attrs']['gpDynamicTextTaxonomy'] );
if ( is_wp_error( $terms ) ) {
return $block_content;
}
$term_items = array();
foreach ( (array) $terms as $term ) {
if ( ! isset( $term->name ) ) {
continue;
}
if ( 'term-archives' === $link_type ) {
$term_link = get_term_link( $term, $block['attrs']['gpDynamicTextTaxonomy'] );
if ( ! is_wp_error( $term_link ) ) {
$term_items[] = sprintf(
'<span class="post-term-item term-%3$s"><a href="%1$s">%2$s</a></span>',
esc_url( get_term_link( $term, $block['attrs']['gpDynamicTextTaxonomy'] ) ),
$term->name,
$term->slug
);
}
} else {
$term_items[] = sprintf(
'<span class="post-term-item term-%2$s">%1$s</span>',
$term->name,
$term->slug
);
}
}
if ( empty( $term_items ) ) {
return '';
}
$sep = isset( $block['attrs']['gpDynamicTextTaxonomySeparator'] ) ? $block['attrs']['gpDynamicTextTaxonomySeparator'] : ', ';
$term_output = implode( $sep, $term_items );
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$term_output = $block['attrs']['gpDynamicTextBefore'] . $term_output;
}
$term_output = apply_filters( 'generate_dynamic_element_text_output', $term_output, $block );
$block_content = str_replace( $text_to_replace, $term_output, $block_content );
} else {
return '';
}
}
if ( 'comments-number' === $text_type ) {
if ( ! post_password_required( $id ) && ( comments_open( $id ) || get_comments_number( $id ) ) ) {
if ( ! isset( $block['attrs']['gpDynamicNoCommentsText'] ) ) {
$block['attrs']['gpDynamicNoCommentsText'] = __( 'No Comments', 'gp-premium' );
}
if ( '' === $block['attrs']['gpDynamicNoCommentsText'] && get_comments_number( $id ) < 1 ) {
return '';
}
$comments_text = get_comments_number_text(
$block['attrs']['gpDynamicNoCommentsText'],
! empty( $block['attrs']['gpDynamicSingleCommentText'] ) ? $block['attrs']['gpDynamicSingleCommentText'] : __( '1 Comment', 'gp-premium' ),
! empty( $block['attrs']['gpDynamicMultipleCommentsText'] ) ? $block['attrs']['gpDynamicMultipleCommentsText'] : __( '% Comments', 'gp-premium' )
);
$comments_text = apply_filters( 'generate_dynamic_element_text', $comments_text, $block );
if ( '' === $comments_text ) {
return '';
}
if ( $link_type ) {
$comments_text = $this->add_dynamic_link( $comments_text, $link_type, $source, $block );
}
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$comments_text = $block['attrs']['gpDynamicTextBefore'] . $comments_text;
}
$comments_text = apply_filters( 'generate_dynamic_element_text_output', $comments_text, $block );
$block_content = str_replace( $text_to_replace, $comments_text, $block_content );
} else {
return '';
}
}
if ( 'post-meta' === $text_type || 'term-meta' === $text_type || 'user-meta' === $text_type ) {
if ( ! empty( $block['attrs']['gpDynamicTextCustomField'] ) ) {
$custom_field = get_post_meta( $id, $block['attrs']['gpDynamicTextCustomField'], true );
if ( 'term-meta' === $text_type ) {
$custom_field = get_term_meta( get_queried_object_id(), $block['attrs']['gpDynamicTextCustomField'], true );
}
if ( 'user-meta' === $text_type ) {
$author_id = $this->get_author_id( $source, $block['attrs'] );
$custom_field = $this->get_user_data( $author_id, $block['attrs']['gpDynamicTextCustomField'] );
}
$custom_field = apply_filters( 'generate_dynamic_element_text', $custom_field, $block );
if ( $custom_field ) {
if ( $link_type ) {
$custom_field = $this->add_dynamic_link( $custom_field, $link_type, $source, $block );
}
if ( ! empty( $block['attrs']['gpDynamicTextBefore'] ) ) {
$custom_field = $block['attrs']['gpDynamicTextBefore'] . $custom_field;
}
add_filter( 'wp_kses_allowed_html', [ 'GeneratePress_Elements_Helper', 'expand_allowed_html' ], 10, 2 );
$custom_field = wp_kses_post( $custom_field );
remove_filter( 'wp_kses_allowed_html', [ 'GeneratePress_Elements_Helper', 'expand_allowed_html' ], 10, 2 );
$custom_field = apply_filters( 'generate_dynamic_element_text_output', $custom_field, $block );
$block_content = str_replace( $text_to_replace, $custom_field, $block_content );
} else {
$block_content = '';
}
} else {
$block_content = '';
}
}
}
}
if ( 'generateblocks/button' === $block['blockName'] ) {
$link_type = ! empty( $block['attrs']['gpDynamicLinkType'] ) ? $block['attrs']['gpDynamicLinkType'] : '';
if ( ! empty( $link_type ) && 'term-archives' !== $link_type ) {
$source = ! empty( $block['attrs']['gpDynamicSource'] ) ? $block['attrs']['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $block['attrs'] );
if ( ! $id ) {
return '';
}
if ( $link_type ) {
$block_content = $this->add_dynamic_link( $block_content, $link_type, $source, $block );
}
}
if ( ! empty( $block['attrs']['gpDynamicTextType'] ) && ! empty( $block['attrs']['gpDynamicTextReplace'] ) ) {
$text_to_replace = $block['attrs']['gpDynamicTextReplace'];
$text_type = $block['attrs']['gpDynamicTextType'];
$link_type = ! empty( $block['attrs']['gpDynamicLinkType'] ) ? $block['attrs']['gpDynamicLinkType'] : '';
$source = ! empty( $block['attrs']['gpDynamicSource'] ) ? $block['attrs']['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $block['attrs'] );
if ( ! $id ) {
return '';
}
if ( 'terms' === $text_type ) {
if ( ! empty( $block['attrs']['gpDynamicTextTaxonomy'] ) ) {
$terms = get_the_terms( $id, $block['attrs']['gpDynamicTextTaxonomy'] );
if ( is_wp_error( $terms ) ) {
return '';
}
$term_buttons = array();
foreach ( (array) $terms as $term ) {
if ( ! isset( $term->name ) ) {
continue;
}
$term_button = str_replace( $text_to_replace, $term->name, $block_content );
if ( isset( $term->slug ) ) {
$term_button = str_replace( 'dynamic-term-class', 'post-term-item term-' . $term->slug, $term_button );
}
if ( 'term-archives' === $link_type ) {
$term_link = get_term_link( $term, $block['attrs']['gpDynamicTextTaxonomy'] );
if ( ! is_wp_error( $term_link ) ) {
$term_url = sprintf(
'href="%s"',
esc_url( $term_link )
);
$term_button = str_replace( 'href="#"', $term_url, $term_button );
}
}
$term_buttons[] = $term_button;
}
if ( empty( $term_buttons ) ) {
return '';
}
$block_content = implode( '', $term_buttons );
} else {
return '';
}
}
}
}
if ( 'generateblocks/container' === $block['blockName'] ) {
if ( ! empty( $block['attrs']['gpRemoveContainerCondition'] ) ) {
$in_same_term = ! empty( $block['attrs']['gpAdjacentPostInSameTerm'] ) ? true : false;
$term_taxonomy = ! empty( $block['attrs']['gpAdjacentPostInSameTermTax'] ) ? $block['attrs']['gpAdjacentPostInSameTermTax'] : 'category';
if ( 'no-next-post' === $block['attrs']['gpRemoveContainerCondition'] ) {
$next_post = get_next_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $next_post ) ) {
if ( ! empty( $block['attrs']['isGrid'] ) && ! empty( $block['attrs']['uniqueId'] ) ) {
return '<div class="gb-grid-column gb-grid-column-' . $block['attrs']['uniqueId'] . '"></div>';
} else {
return '';
}
}
}
if ( 'no-previous-post' === $block['attrs']['gpRemoveContainerCondition'] ) {
$previous_post = get_previous_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $previous_post ) ) {
if ( ! empty( $block['attrs']['isGrid'] ) && ! empty( $block['attrs']['uniqueId'] ) ) {
return '<div class="gb-grid-column gb-grid-column-' . $block['attrs']['uniqueId'] . '"></div>';
} else {
return '';
}
}
}
if ( 'no-featured-image' === $block['attrs']['gpRemoveContainerCondition'] ) {
if ( ! has_post_thumbnail() ) {
return '';
}
}
if ( 'no-post-meta' === $block['attrs']['gpRemoveContainerCondition'] && ! empty( $block['attrs']['gpRemoveContainerConditionPostMeta'] ) ) {
$post_meta_check = get_post_meta( get_the_ID(), $block['attrs']['gpRemoveContainerConditionPostMeta'], true );
if ( ! $post_meta_check ) {
return '';
}
}
} elseif ( ! empty( $block['attrs']['url'] ) && ! empty( $block['attrs']['gpDynamicLinkType'] ) ) {
$source = ! empty( $block['attrs']['gpDynamicSource'] ) ? $block['attrs']['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $block['attrs'] );
if ( ! $id ) {
return '';
}
}
}
return $block_content;
}
/**
* Set the featured image as a GB background.
*
* @param string $url The current URL.
* @param array $settings The current settings.
*/
public function set_background_image_url( $url, $settings ) {
if ( ! empty( $settings['gpDynamicImageBg'] ) ) {
$custom_field = '';
$source = ! empty( $settings['gpDynamicSource'] ) ? $settings['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $settings );
if ( ! $id ) {
return '';
}
if ( 'post-meta' === $settings['gpDynamicImageBg'] ) {
$custom_field = get_post_meta( $id, $settings['gpDynamicImageCustomField'], true );
}
if ( 'term-meta' === $settings['gpDynamicImageBg'] ) {
$custom_field = get_term_meta( get_queried_object_id(), $settings['gpDynamicImageCustomField'], true );
}
if ( 'user-meta' === $settings['gpDynamicImageBg'] ) {
$author_id = $this->get_author_id( $source, $settings );
$custom_field = $this->get_user_data( $author_id, $settings['gpDynamicImageCustomField'] );
}
if ( 'featured-image' === $settings['gpDynamicImageBg'] && has_post_thumbnail( $id ) ) {
$image_size = ! empty( $settings['bgImageSize'] ) ? $settings['bgImageSize'] : 'full';
$url = get_the_post_thumbnail_url( $id, $image_size );
} elseif ( ! empty( $custom_field ) ) {
if ( is_numeric( $custom_field ) ) {
$image_size = ! empty( $settings['bgImageSize'] ) ? $settings['bgImageSize'] : 'full';
$url = wp_get_attachment_image_url( $custom_field, $image_size );
} else {
$url = $custom_field;
}
} elseif ( empty( $settings['gpUseFallbackImageBg'] ) ) {
$url = '';
}
}
return $url;
}
/**
* Set the attributes for our main Container wrapper.
*
* @param array $attributes The existing attributes.
* @param array $settings The settings for the block.
*/
public function set_container_attributes( $attributes, $settings ) {
if ( ! empty( $settings['bgImage'] ) && in_the_loop() ) {
if ( ! empty( $settings['gpDynamicImageBg'] ) ) {
$custom_field = '';
$source = ! empty( $settings['gpDynamicSource'] ) ? $settings['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $settings );
if ( ! $id ) {
return $attributes;
}
if ( 'post-meta' === $settings['gpDynamicImageBg'] ) {
$custom_field = get_post_meta( $id, $settings['gpDynamicImageCustomField'], true );
}
if ( 'term-meta' === $settings['gpDynamicImageBg'] ) {
$custom_field = get_term_meta( get_queried_object_id(), $settings['gpDynamicImageCustomField'], true );
}
if ( 'user-meta' === $settings['gpDynamicImageBg'] ) {
$author_id = $this->get_author_id( $source, $settings );
$custom_field = $this->get_user_data( $author_id, $settings['gpDynamicImageCustomField'] );
}
if ( 'featured-image' === $settings['gpDynamicImageBg'] && has_post_thumbnail( $id ) ) {
$image_size = ! empty( $settings['bgImageSize'] ) ? $settings['bgImageSize'] : 'full';
$url = get_the_post_thumbnail_url( $id, $image_size );
} elseif ( ! empty( $custom_field ) ) {
if ( is_numeric( $custom_field ) ) {
$image_size = ! empty( $settings['bgImageSize'] ) ? $settings['bgImageSize'] : 'full';
$url = wp_get_attachment_image_url( $custom_field, $image_size );
} else {
$url = $custom_field;
}
} elseif ( ! empty( $settings['gpUseFallbackImageBg'] ) ) {
if ( isset( $settings['bgImage']['id'] ) ) {
$image_size = ! empty( $settings['bgImageSize'] ) ? $settings['bgImageSize'] : 'full';
$image_src = wp_get_attachment_image_src( $settings['bgImage']['id'], $image_size );
if ( is_array( $image_src ) ) {
$url = $image_src[0];
} else {
$url = $settings['bgImage']['image']['url'];
}
} else {
$url = $settings['bgImage']['image']['url'];
}
}
if ( ! empty( $url ) ) {
$attributes['style'] = '--background-url:url(' . esc_url( $url ) . ')';
$attributes['class'] .= ' gb-has-dynamic-bg';
} else {
$attributes['class'] .= ' gb-no-dynamic-bg';
}
}
}
if ( ! empty( $settings['gpInlinePostMeta'] ) ) {
$attributes['class'] .= ' inline-post-meta-area';
}
return $attributes;
}
/**
* Set GenerateBlocks defaults.
*
* @param array $defaults The current defaults.
*/
public function set_defaults( $defaults ) {
$defaults['container']['gpInlinePostMeta'] = false;
$defaults['container']['gpInlinePostMetaJustify'] = '';
$defaults['container']['gpInlinePostMetaJustifyTablet'] = '';
$defaults['container']['gpInlinePostMetaJustifyMobile'] = '';
$defaults['container']['gpDynamicImageBg'] = '';
$defaults['container']['gpDynamicImageCustomField'] = '';
$defaults['container']['gpDynamicLinkType'] = '';
$defaults['container']['gpDynamicSource'] = 'current-post';
$defaults['container']['gpDynamicSourceInSameTerm'] = false;
$defaults['headline']['gpDynamicTextTaxonomy'] = '';
$defaults['headline']['gpDynamicTextTaxonomySeparator'] = ', ';
return $defaults;
}
/**
* Generate our CSS for our options.
*
* @param string $name Name of the block.
* @param array $settings Our available settings.
* @param object $css Current desktop CSS object.
* @param object $desktop_css Current desktop-only CSS object.
* @param object $tablet_css Current tablet CSS object.
* @param object $tablet_only_css Current tablet-only CSS object.
* @param object $mobile_css Current mobile CSS object.
*/
public function generate_css( $name, $settings, $css, $desktop_css, $tablet_css, $tablet_only_css, $mobile_css ) {
if ( 'container' === $name ) {
if ( ! empty( $settings['bgImage'] ) ) {
if ( 'element' === $settings['bgOptions']['selector'] ) {
$css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.gb-has-dynamic-bg' );
} elseif ( 'pseudo-element' === $settings['bgOptions']['selector'] ) {
$css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.gb-has-dynamic-bg:before' );
}
$css->add_property( 'background-image', 'var(--background-url)' );
if ( 'element' === $settings['bgOptions']['selector'] ) {
$css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.gb-no-dynamic-bg' );
} elseif ( 'pseudo-element' === $settings['bgOptions']['selector'] ) {
$css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.gb-no-dynamic-bg:before' );
}
$css->add_property( 'background-image', 'none' );
}
if ( ! empty( $settings['gpInlinePostMeta'] ) ) {
$css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.inline-post-meta-area > .gb-inside-container' );
$css->add_property( 'display', 'flex' );
$css->add_property( 'align-items', 'center' );
$css->add_property( 'justify-content', $settings['gpInlinePostMetaJustify'] );
$tablet_css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.inline-post-meta-area > .gb-inside-container' );
$tablet_css->add_property( 'justify-content', $settings['gpInlinePostMetaJustifyTablet'] );
$mobile_css->set_selector( '.gb-container-' . $settings['uniqueId'] . '.inline-post-meta-area > .gb-inside-container' );
$mobile_css->add_property( 'justify-content', $settings['gpInlinePostMetaJustifyMobile'] );
}
}
}
/**
* Set the attributes for our main Container wrapper.
*
* @param array $attributes The existing attributes.
* @param array $settings The settings for the block.
*/
public function set_dynamic_container_url( $attributes, $settings ) {
$link_type = ! empty( $settings['gpDynamicLinkType'] ) ? $settings['gpDynamicLinkType'] : '';
if (
$link_type &&
isset( $settings['url'] ) &&
isset( $settings['linkType'] ) &&
'' !== $settings['url'] &&
( 'wrapper' === $settings['linkType'] || 'hidden-link' === $settings['linkType'] )
) {
if ( ! empty( $link_type ) ) {
$source = ! empty( $settings['gpDynamicSource'] ) ? $settings['gpDynamicSource'] : 'current-post';
$id = $this->get_source_id( $source, $settings );
if ( ! $id ) {
return $attributes;
}
if ( 'post' === $link_type ) {
$attributes['href'] = esc_url( get_permalink( $id ) );
}
if ( 'post-meta' === $link_type ) {
if ( ! empty( $settings['gpDynamicLinkCustomField'] ) ) {
$custom_field = get_post_meta( $id, $settings['gpDynamicLinkCustomField'], true );
if ( $custom_field ) {
$attributes['href'] = esc_url( $custom_field );
}
}
}
}
}
return $attributes;
}
/**
* Get our needed source ID.
*
* @param string $source The source attribute.
* @param array $attributes All block attributes.
*/
public function get_source_id( $source, $attributes = array() ) {
$id = get_the_ID();
if ( 'next-post' === $source ) {
$in_same_term = ! empty( $attributes['gpDynamicSourceInSameTerm'] ) ? true : false;
$term_taxonomy = ! empty( $attributes['gpDynamicSourceInSameTermTaxonomy'] ) ? $attributes['gpDynamicSourceInSameTermTaxonomy'] : 'category';
$next_post = get_next_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $next_post ) ) {
return false;
}
$id = $next_post->ID;
}
if ( 'previous-post' === $source ) {
$in_same_term = ! empty( $attributes['gpDynamicSourceInSameTerm'] ) ? true : false;
$term_taxonomy = ! empty( $attributes['gpDynamicSourceInSameTermTaxonomy'] ) ? $attributes['gpDynamicSourceInSameTermTaxonomy'] : 'category';
$previous_post = get_previous_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $previous_post ) ) {
return false;
}
$id = $previous_post->ID;
}
return apply_filters( 'generate_dynamic_element_source_id', $id, $source, $attributes );
}
/**
* Get our author ID.
*
* @param string $source The source attribute.
* @param array $attributes All block attributes.
*/
public function get_author_id( $source, $attributes ) {
global $post;
$post_info = $post;
if ( 'next-post' === $source ) {
$in_same_term = ! empty( $attributes['gpDynamicSourceInSameTerm'] ) ? true : false;
$term_taxonomy = ! empty( $attributes['gpDynamicSourceInSameTermTaxonomy'] ) ? $attributes['gpDynamicSourceInSameTermTaxonomy'] : 'category';
$next_post = get_next_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $next_post ) ) {
return '';
}
$post_info = $next_post;
}
if ( 'previous-post' === $source ) {
$in_same_term = ! empty( $attributes['gpDynamicSourceInSameTerm'] ) ? true : false;
$term_taxonomy = ! empty( $attributes['gpDynamicSourceInSameTermTaxonomy'] ) ? $attributes['gpDynamicSourceInSameTermTaxonomy'] : 'category';
$previous_post = get_previous_post( $in_same_term, '', $term_taxonomy );
if ( ! is_object( $previous_post ) ) {
return '';
}
$post_info = $previous_post;
}
if ( isset( $post_info->post_author ) ) {
return $post_info->post_author;
}
}
/**
* Register our post meta.
*/
public function register_meta() {
register_meta(
'post',
'_generate_block_element_editor_width',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_int' ),
)
);
register_meta(
'post',
'_generate_block_element_editor_width_unit',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => 'sanitize_text_field',
)
);
register_meta(
'post',
'_generate_block_type',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => 'sanitize_text_field',
)
);
register_meta(
'post',
'_generate_hook',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => 'sanitize_text_field',
)
);
register_meta(
'post',
'_generate_custom_hook',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_custom_hook' ),
)
);
register_meta(
'post',
'_generate_hook_priority',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_int' ),
)
);
register_meta(
'post',
'_generate_post_meta_location',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
register_meta(
'post',
'_generate_post_loop_item_tagname',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
register_meta(
'post',
'_generate_disable_primary_post_meta',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_disable_secondary_post_meta',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_disable_title',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_disable_featured_image',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_use_theme_post_container',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_use_archive_navigation_container',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_disable_post_navigation',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_disable_archive_navigation',
array(
'object_subtype' => 'gp_elements',
'type' => 'boolean',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'rest_sanitize_boolean' ),
)
);
register_meta(
'post',
'_generate_post_loop_item_display',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
register_meta(
'post',
'_generate_post_loop_item_display_tax',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
register_meta(
'post',
'_generate_post_loop_item_display_term',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
register_meta(
'post',
'_generate_post_loop_item_display_post_meta',
array(
'object_subtype' => 'gp_elements',
'type' => 'string',
'show_in_rest' => true,
'auth_callback' => '__return_true',
'single' => true,
'sanitize_callback' => array( $this, 'sanitize_text_field' ),
)
);
}
/**
* Sanitize our custom hook field.
*
* @param string $value The value to sanitize.
*/
public function sanitize_custom_hook( $value ) {
$not_allowed = array(
'muplugins_loaded',
'registered_taxonomy',
'plugins_loaded',
'setup_theme',
'after_setup_theme',
'init',
'widgets_init',
'wp_loaded',
'pre_get_posts',
'wp',
'template_redirect',
'get_header',
'wp_enqueue_scripts',
'the_post',
'dynamic_sidebar',
'get_footer',
'get_sidebar',
'wp_print_footer_scripts',
'shutdown',
);
if ( in_array( $value, $not_allowed ) ) {
return '';
}
return sanitize_key( $value );
}
/**
* Sanitize number values that can be empty.
*
* @param int $value The value to sanitize.
*/
public function sanitize_int( $value ) {
if ( ! is_numeric( $value ) ) {
return '';
}
return absint( $value );
}
/**
* Get our image size names and dimensions.
*/
public function get_image_sizes() {
global $_wp_additional_image_sizes;
$default_image_sizes = get_intermediate_image_sizes();
foreach ( $default_image_sizes as $size ) {
$image_sizes[ $size ]['width'] = intval( get_option( "{$size}_size_w" ) );
$image_sizes[ $size ]['height'] = intval( get_option( "{$size}_size_h" ) );
$image_sizes[ $size ]['crop'] = get_option( "{$size}_crop" ) ? get_option( "{$size}_crop" ) : false;
}
if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) ) {
$image_sizes = array_merge( $image_sizes, $_wp_additional_image_sizes );
}
return $image_sizes;
}
/**
* Add front-end CSS.
*/
public function frontend_css() {
require_once GP_LIBRARY_DIRECTORY . 'class-make-css.php';
$css = new GeneratePress_Pro_CSS();
$css->set_selector( '.dynamic-author-image-rounded' );
$css->add_property( 'border-radius', '100%' );
$css->set_selector( '.dynamic-featured-image, .dynamic-author-image' );
$css->add_property( 'vertical-align', 'middle' );
$css->set_selector( '.one-container.blog .dynamic-content-template:not(:last-child), .one-container.archive .dynamic-content-template:not(:last-child)' );
$css->add_property( 'padding-bottom', '0px' );
$css->set_selector( '.dynamic-entry-excerpt > p:last-child' );
$css->add_property( 'margin-bottom', '0px' );
wp_add_inline_style( 'generate-style', $css->css_output() );
}
}
GeneratePress_Block_Elements::get_instance();