1765 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1765 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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-alpha-1', '<' ) ) {
 | |
| 			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(
 | |
| 			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&plugin=generateblocks/plugin.php&plugin_status=all&paged=1&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() {
 | |
| 		if ( 'gp_elements' !== get_post_type() && ! is_admin() ) {
 | |
| 			return sprintf(
 | |
| 				'<div class="dynamic-entry-content">%s</div>',
 | |
| 				apply_filters( 'the_content', str_replace( ']]>', ']]>', 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 ( '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']['gpDynamicTextCustomField'], 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();
 | |
| 						} 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;
 | |
| 							}
 | |
| 
 | |
| 							$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, $block['attrs'] );
 | |
| 				$custom_field = $this->get_user_data( $author_id, $block['attrs']['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, $block['attrs'] );
 | |
| 					$custom_field = $this->get_user_data( $author_id, $block['attrs']['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 && '' !== $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();
 |