[Back] <?php
/**
* Gutenberg Compatibility File.
*
* @since 1.0.4
* @package Spexo
*/
class Tmpcoder_Gutenberg {
/**
* Constructor
*/
public function __construct() {
add_action( 'wp', array( $this, 'is_layout_with_blocks' ), 1 );
add_action( 'enqueue_block_editor_assets', array( $this, 'gutenberg_assets' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'gutenberg_assets' ) );
add_filter( 'render_block_core/group', array( $this, 'add_inherit_width_group_class' ), 10, 2 );
}
/**
* Check if blocks has been used on the layout. Adding it for making moder compatibility CSS target specific.
*
* @since 1.0.4
* @return void
*/
public function is_layout_with_blocks() {
// @codingStandardsIgnoreStart
global $post;
$post_id = 0;
if ( is_home() ) {
$post_id = get_option( 'page_for_posts' );
} elseif ( is_archive() ) {
global $wp_query;
$post_id = $wp_query->get_queried_object_id();
} elseif ( isset( $post->ID ) && ! is_search() && ! is_category() ) {
$post_id = $post->ID;
}
/** @psalm-suppress RedundantConditionGivenDocblockType */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( $post_id ) {
/** @psalm-suppress RedundantConditionGivenDocblockType */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$current_post = get_post( absint( $post_id ) );
/** @psalm-suppress TooManyArguments */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$enable_block_editor_attr = apply_filters( 'tmpcoder_disable_block_content_attr', true, $post_id );
/** @psalm-suppress TooManyArguments */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
/** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( has_blocks( $current_post ) && $enable_block_editor_attr ) {
/** @psalm-suppress PossiblyInvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
add_filter( 'body_class', array( $this, 'add_tmpcoder_body_classes') );
}
}
// @codingStandardsIgnoreEnd
}
function gutenberg_assets(){
/* Directory and Extension */
$rtl = '';
if ( is_rtl() ) {
$rtl = '-rtl';
}
$tmpcoder_js_uri = get_template_directory_uri() . '/assets/js/tmpcoder-block-editor-script.js';
/** @psalm-suppress InvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
wp_enqueue_script( 'tmpcoder-block-editor-script', $tmpcoder_js_uri, false, TMPCODER_THEME_CORE_VERSION, 'all' );
/** @psalm-suppress InvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$css_uri = get_template_directory_uri() . '/assets/css/tmpcoder-block-editor-styles' . $rtl . '.css';
/** @psalm-suppress InvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
wp_enqueue_style( 'tmpcoder-block-editor-styles', $css_uri, false, TMPCODER_THEME_CORE_VERSION, 'all' );
/** @psalm-suppress InvalidArgument */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
}
function add_tmpcoder_body_classes( $classes ) {
$classes[] = 'tmpcoder-block-builder tmpcoder-plain-container tmpcoder-no-sidebar';
return $classes;
}
/**
* Add Group block custom class when "Inherit default layout" toggle enabled.
*
* @since 1.0.4
*
* @param string $block_content Rendered block content.
* @param array $block Block object.
*
* @return string Filtered block content.
*/
public function add_inherit_width_group_class( $block_content, $block ) {
if (
isset( $block['blockName'] ) && isset( $block['attrs']['layout']['inherit'] ) && $block['attrs']['layout']['inherit']
) {
$block_content = preg_replace(
'/' . preg_quote( 'class="', '/' ) . '/',
'class="tmpcoder-default-layout inherit-container-width ',
$block_content,
1
);
}
return $block_content;
}
/**
* Update the block content with inner div.
*
* @since 1.0.4
*
* @param mixed $matches block content.
*
* @return string New block content.
*/
public function group_block_replace_regex( $matches ) {
return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
}
}
new Tmpcoder_Gutenberg();