set_query_templates_filters(); } /** * Get the class instance. * * @since 4.9.8 * * @return ET_Builder_Block_Templates */ public static function instance() { if ( ! self::$_instance ) { self::$_instance = new self(); } return self::$_instance; } /** * Set query templates filters to override block templates. * * @since 4.9.8 */ public function set_query_templates_filters() { // Bail early if current active builder is not DBP. if ( ! et_is_builder_plugin_active() ) { return; } // Bail early if `locate_block_template` function doesn't exists (WP 5.8). if ( ! function_exists( 'locate_block_template' ) ) { return; } // Add those filters only when current active theme supports `block-templates` or // has block templates index HTML. if ( ! current_theme_supports( 'block-templates' ) && ! is_readable( get_stylesheet_directory() . '/block-templates/index.html' ) ) { return; } /** * List of possible hook names: * - `404_template` * - `archive_template` * - `attachment_template` (Not Included) * - `author_template` * - `category_template` * - `date_template` * - `embed_template` (Not Included) * - `frontpage_template` * - `home_template` * - `index_template` * - `page_template` * - `paged_template` * - `privacypolicy_template` * - `search_template` * - `single_template` * - `singular_template` * - `tag_template` * - `taxonomy_template` * * However we don't include `attachment`, `paged`, and `embed` because they are not * modified or attached to TB tempates. */ $template_types = array( '404_template', 'archive_template', 'author_template', 'category_template', 'date_template', 'frontpage_template', 'home_template', 'index_template', 'page_template', 'privacypolicy_template', 'search_template', 'single_template', 'singular_template', 'tag_template', 'taxonomy_template', ); foreach ( $template_types as $template ) { add_filter( $template, array( $this, 'get_custom_query_template' ), 30, 3 ); } } /** * Get pre-defined query template to override block template (modified default template * or custom template). * * @since 4.9.8 * * @param string $template Path to the template. See locate_template(). * @param string $type Sanitized filename without extension. * @param array $templates A list of template candidates, in descending order of priority. * * @return string Modified path to the template. */ public function get_custom_query_template( $template, $type, $templates ) { // Bail early if there is no TB templates for current page request. if ( empty( et_theme_builder_get_template_layouts() ) ) { return $template; } // 1. Restore - Get pre-defined query template. $original_template = $template; $template = locate_template( $templates ); // If the `locate_template` return empty path because there is no template or theme // theme compat found, use builder block template canvas. if ( empty( $template ) && 'template-canvas.php' === basename( $original_template ) ) { $template = ET_BUILDER_DIR . 'templates/block-template-canvas.php'; } // 2. Remove hooks added for template canvas (block template). // Remove viewport meta tag. if ( function_exists( '_block_template_viewport_meta_tag' ) ) { remove_action( 'wp_head', '_block_template_viewport_meta_tag', 0 ); } // Render conditional title tag for `title-tag` support. add_action( 'wp_head', '_wp_render_title_tag', 1 ); // Remove unconditional title tag. if ( function_exists( '_block_template_render_title_tag' ) ) { remove_action( 'wp_head', '_block_template_render_title_tag', 1 ); } return $template; } } ET_Builder_Block_Templates::instance();