| |
| <?php
|
| if (!defined('ABSPATH')) {
|
| exit;
|
| }
|
|
|
| add_action('init', function () {
|
| $post_types = array('page', 'post', 'elementor_library');
|
|
|
| foreach ($post_types as $pt) {
|
| register_post_meta($pt, '_elementor_data', array(
|
| 'show_in_rest' => true,
|
| 'single' => true,
|
| 'type' => 'string',
|
| 'auth_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| ));
|
|
|
| register_post_meta($pt, '_elementor_page_settings', array(
|
| 'show_in_rest' => true,
|
| 'single' => true,
|
| 'type' => 'string',
|
| 'auth_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| ));
|
|
|
| register_post_meta($pt, '_elementor_edit_mode', array(
|
| 'show_in_rest' => true,
|
| 'single' => true,
|
| 'type' => 'string',
|
| 'auth_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| ));
|
|
|
| register_post_meta($pt, '_elementor_template_type', array(
|
| 'show_in_rest' => true,
|
| 'single' => true,
|
| 'type' => 'string',
|
| 'auth_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| ));
|
|
|
| register_post_meta($pt, '_elementor_css', array(
|
| 'show_in_rest' => true,
|
| 'single' => true,
|
| 'type' => 'string',
|
| 'auth_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| ));
|
| }
|
| });
|
|
|
| add_action('rest_api_init', function () {
|
| register_rest_route('elementor-bridge/v1', '/regenerate-css/(?P<id>\d+)', array(
|
| 'methods' => 'POST',
|
| 'permission_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| 'callback' => function ($request) {
|
| $post_id = $request['id'];
|
|
|
| if (!get_post($post_id)) {
|
| return new WP_Error('not_found', 'Post not found', array('status' => 404));
|
| }
|
|
|
| delete_post_meta($post_id, '_elementor_css');
|
|
|
| if (class_exists('\\Elementor\\Plugin')) {
|
| $document = \Elementor\Plugin::$instance->documents->get($post_id);
|
| if ($document) {
|
| $css_file = \Elementor\Core\Files\CSS\Post::create($post_id);
|
| $css_file->update();
|
| return array('success' => true, 'message' => 'CSS regenerated via Elementor');
|
| }
|
| }
|
|
|
| return array('success' => true, 'message' => 'CSS cache cleared');
|
| },
|
| ));
|
|
|
| register_rest_route('elementor-bridge/v1', '/pages', array(
|
| 'methods' => 'GET',
|
| 'permission_callback' => function () {
|
| return current_user_can('edit_posts');
|
| },
|
| 'callback' => function () {
|
| $pages = get_posts(array(
|
| 'post_type' => array('page', 'post', 'elementor_library'),
|
| 'posts_per_page' => -1,
|
| 'meta_key' => '_elementor_edit_mode',
|
| 'meta_value' => 'builder',
|
| ));
|
|
|
| $result = array();
|
| foreach ($pages as $page) {
|
| $data = get_post_meta($page->ID, '_elementor_data', true);
|
| $element_count = 0;
|
| if ($data) {
|
| $decoded = json_decode($data, true);
|
| if (is_array($decoded)) {
|
| $element_count = count_elementor_bridge_elements($decoded);
|
| }
|
| }
|
|
|
| $result[] = array(
|
| 'id' => $page->ID,
|
| 'title' => $page->post_title,
|
| 'slug' => $page->post_name,
|
| 'status' => $page->post_status,
|
| 'type' => $page->post_type,
|
| 'template_type' => get_post_meta($page->ID, '_elementor_template_type', true),
|
| 'element_count' => $element_count,
|
| 'modified' => $page->post_modified,
|
| 'url' => get_permalink($page->ID),
|
| );
|
| }
|
|
|
| return $result;
|
| },
|
| ));
|
| });
|
|
|
| function count_elementor_bridge_elements($elements) {
|
| $count = count($elements);
|
| foreach ($elements as $el) {
|
| if (!empty($el['elements'])) {
|
| $count += count_elementor_bridge_elements($el['elements']);
|
| }
|
| }
|
| return $count;
|
| }
|
| |
| |
Comments