__( 'Canvas Layouts', 'canvas' ), 'public' => false, 'publicly_queryable' => false, 'has_archive' => false, 'show_ui' => true, 'exclude_from_search' => true, 'show_in_nav_menus' => false, 'rewrite' => false, 'menu_icon' => 'dashicons-editor-table', 'hierarchical' => false, 'show_in_menu' => false, 'show_in_admin_bar' => false, 'show_in_rest' => true, 'capability_type' => 'post', 'supports' => array( 'title', 'editor', 'thumbnail', ), ) ); } /** * Get layouts data. * * @return array */ public function get_layouts_data() { // Predefined layouts. $layouts = apply_filters( 'canvas_register_layouts', array() ); $categories = apply_filters( 'canvas_register_layouts_categories', array() ); if ( $layouts ) { // Parse layouts JSON. foreach ( $layouts as $k => $data ) { $json = file_get_contents( $data['json'] ); $json = json_decode( $json, true ); if ( isset( $json['content'] ) ) { $layouts[ $k ]['content'] = $json['content']; } } // Get layouts from DB. global $post; $backup_global_post = $post; $local_layouts_query = new WP_Query( array( 'post_type' => 'canvas_layout', 'posts_per_page' => -1, 'showposts' => -1, 'paged' => -1, ) ); while ( $local_layouts_query->have_posts() ) { $local_layouts_query->the_post(); $db_template = get_post(); $image_id = get_post_thumbnail_id( $db_template->ID ); $image_data = wp_get_attachment_image_src( $image_id, 'large' ); $layouts[ 'db-layout-' . $db_template->ID ] = array( 'title' => $db_template->post_title, 'content' => $db_template->post_content, 'thumbnail' => isset( $image_data[0] ) ? $image_data[0] : false, 'category' => array( 'db-layouts' ), ); // add category. if ( ! isset( $categories['db-layouts'] ) ) { $categories['db-layouts'] = esc_html__( 'User Layouts', 'canvas' ); } } wp_reset_postdata(); $post = $backup_global_post; } return array( 'layouts' => $layouts, 'categories' => $categories, ); } /** * Enqueue block editor specific scripts. */ public function enqueue_block_editor_assets() { wp_enqueue_script( 'canvas-layouts', CNVS_URL . 'layouts/extension/index.js', array( 'wp-editor', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-edit-post', 'wp-compose', 'wp-components' ), filemtime( CNVS_PATH . 'layouts/extension/index.js' ) ); wp_localize_script( 'jquery-ui-core', 'canvasLayouts', $this->get_layouts_data() ); } /** * Enqueue admin layouts list scripts. */ public function admin_enqueue_scripts() { $screen = get_current_screen(); if ( isset( $screen->id ) && 'edit-canvas_layout' === $screen->id ) { wp_enqueue_style( 'wp-components' ); wp_enqueue_script( 'canvas-layouts', CNVS_URL . 'layouts/admin-list/index.js', array( 'wp-editor', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-edit-post', 'wp-compose', 'wp-components', 'wp-api-fetch', 'lodash' ), filemtime( CNVS_PATH . 'layouts/admin-list/index.js' ), true ); } } } new CNVS_Layouts();