init
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
/**
|
||||
* Block editor (Gutenberg)
|
||||
*
|
||||
* @author UX Themes
|
||||
* @category Gutenberg
|
||||
* @package Flatsome\Admin
|
||||
* @since 3.7.0
|
||||
*/
|
||||
|
||||
namespace Flatsome\Admin;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Class Gutenberg
|
||||
*
|
||||
* @package Flatsome\Admin
|
||||
*/
|
||||
class Gutenberg {
|
||||
|
||||
/**
|
||||
* Current version
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* Holds assets directory.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $assets;
|
||||
|
||||
/**
|
||||
* Gutenberg constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$theme = wp_get_theme( get_template() );
|
||||
|
||||
$this->version = $theme->get( 'Version' );
|
||||
$this->assets = get_template_directory_uri() . '/inc/admin/gutenberg/assets';
|
||||
|
||||
$this->init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise
|
||||
*/
|
||||
private function init() {
|
||||
if ( $this->is_block_editor_available() ) {
|
||||
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
|
||||
add_action( 'enqueue_block_editor_assets', [ $this, 'add_edit_button' ], 11 );
|
||||
add_action( 'enqueue_block_editor_assets', [ $this, 'add_block_settings' ] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if block editor is available.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_block_editor_available() {
|
||||
return function_exists( 'register_block_type' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a post type should display the Gutenberg/block editor.
|
||||
*
|
||||
* @param string $post_type The name of the post type.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_post_type_gutenberg( $post_type ) {
|
||||
if ( function_exists( 'use_block_editor_for_post_type' ) ) {
|
||||
// WP 5.0 or greater.
|
||||
return use_block_editor_for_post_type( $post_type );
|
||||
} elseif ( function_exists( 'gutenberg_can_edit_post_type' ) ) {
|
||||
// Lower then WP 5.0 and Gutenberg plugin is installed.
|
||||
return gutenberg_can_edit_post_type( $post_type );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register and enqueue main styles.
|
||||
*/
|
||||
public function enqueue_styles() {
|
||||
wp_register_style( 'flatsome-gutenberg', $this->assets . '/css/style.css', [], $this->version );
|
||||
wp_enqueue_style( 'flatsome-gutenberg' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add 'Edit with UX Builder' inside gutenberg editor header.
|
||||
*/
|
||||
public function add_edit_button() {
|
||||
global $typenow;
|
||||
if ( ! $this->is_post_type_gutenberg( $typenow ) ) {
|
||||
return;
|
||||
}
|
||||
wp_enqueue_script( 'flatsome-gutenberg-edit-button', $this->assets . '/js/edit-button.js', array( 'wp-edit-post' ), $this->version, true );
|
||||
|
||||
$page_id = get_the_ID();
|
||||
|
||||
$params = [
|
||||
'edit_button' => [
|
||||
'enabled' => $this->is_edit_button_visible( $page_id ),
|
||||
'text' => __( 'Edit with UX Builder', 'flatsome' ),
|
||||
'url' => ux_builder_edit_url( $page_id ),
|
||||
],
|
||||
];
|
||||
|
||||
wp_localize_script( 'flatsome-gutenberg-edit-button', 'flatsome_gutenberg', $params );
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the `window.flatsomeBlockSettings` object.
|
||||
*/
|
||||
public function add_block_settings() {
|
||||
$blocks_js = $this->assets . '/js/blocks.js';
|
||||
$blocks_deps = array(
|
||||
'wp-data',
|
||||
'wp-blocks',
|
||||
'wp-element',
|
||||
'wp-edit-post',
|
||||
'wp-components',
|
||||
'wp-block-editor',
|
||||
);
|
||||
$block_settings = array_filter(
|
||||
get_block_editor_server_block_settings(),
|
||||
function( $block, $name ) {
|
||||
return strpos( $name, 'flatsome/' ) === 0;
|
||||
},
|
||||
ARRAY_FILTER_USE_BOTH
|
||||
);
|
||||
|
||||
wp_enqueue_script( 'flatsome-blocks', $blocks_js, $blocks_deps, $this->version, true );
|
||||
wp_localize_script( 'flatsome-blocks', 'flatsomeBlockSettings', $block_settings );
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines when the edit button should be visible or not.
|
||||
*
|
||||
* @param int $page_id The ID of the current post.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_edit_button_visible( $page_id ) {
|
||||
// Do not show UX Builder link on Shop page.
|
||||
if ( function_exists( 'is_woocommerce' ) && $page_id == wc_get_page_id( 'shop' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not show UX Builder link on Posts Page.
|
||||
$page_for_posts = get_option( 'page_for_posts' );
|
||||
if ( $page_id == $page_for_posts ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
new Gutenberg();
|
Reference in New Issue
Block a user