install(); flush_rewrite_rules(); } register_activation_hook( __FILE__, 'block_ledger_activate' ); /** * Deactivation: clear scheduled events. */ function block_ledger_deactivate() { wp_clear_scheduled_hook( 'block_ledger_reindex' ); } register_deactivation_hook( __FILE__, 'block_ledger_deactivate' ); /** * Enqueue the editor control-plane assets. */ function block_ledger_enqueue_editor() { $asset_file = BLOCK_LEDGER_DIR . 'build/index.asset.php'; $asset = file_exists( $asset_file ) ? require $asset_file : array( 'dependencies' => array( 'wp-plugins', 'wp-edit-post', 'wp-components', 'wp-element', 'wp-blocks', 'wp-i18n', 'wp-data', 'wp-api-fetch', 'wp-hooks' ), 'version' => BLOCK_LEDGER_VERSION ); // Do NOT add wp-dom-ready — it may not be registered on all WP installs // and can prevent the entire script from loading. Use setTimeout polling instead. wp_enqueue_script( 'block-ledger-editor', BLOCK_LEDGER_URL . 'build/index.js', $asset['dependencies'], $asset['version'], true ); // Ensure window.wp exists before our bundle runs. wp_add_inline_script( 'block-ledger-editor', 'window.wp = window.wp || { plugins: { registerPlugin: function() {} }, editPost: {}, element: { createRoot: function(el){ return { render: function(){} }; } }, components: {}, i18n: {}, apiFetch: function() {}, hooks: {}, data: { select: function(){} } };', 'before' ); wp_set_script_translations( 'block-ledger-editor', 'block-ledger' ); wp_localize_script( 'block-ledger-editor', 'blockLedgerData', array( 'restRoot' => rest_url( BLOCK_LEDGER_REST_NS ), 'restNonce' => wp_create_nonce( 'wp_rest' ), 'canManage' => current_user_can( 'manage_options' ), 'i18nRetire' => __( 'Retire block', 'block-ledger' ), 'i18nRestore' => __( 'Restore', 'block-ledger' ), ) ); } add_action( 'enqueue_block_editor_assets', 'block_ledger_enqueue_editor' ); // Standalone admin page under Tools. add_action( 'admin_menu', function() { add_menu_page( esc_html__( 'Block Ledger', 'block-ledger' ), esc_html__( 'Block Ledger', 'block-ledger' ), 'edit_posts', 'block-ledger', 'block_ledger_admin_page', 'dashicons-schedule', null ); } ); // Enqueue the React bundle on the Block Ledger admin page. add_action( 'admin_enqueue_scripts', function( $hook ) { if ( 'toplevel_page_block-ledger' !== $hook ) { return; } // React/ReactDOM are needed for the standalone admin page wp_enqueue_script( 'react' ); wp_enqueue_script( 'react-dom' ); wp_enqueue_script( 'block-ledger-editor', plugins_url( 'build/index.js', __FILE__ ), array( 'react', 'react-dom' ), BLOCK_LEDGER_VERSION, true ); wp_localize_script( 'block-ledger-editor', 'blockLedgerData', array( 'restRoot' => rest_url( BLOCK_LEDGER_REST_NS ), 'restNonce' => wp_create_nonce( 'wp_rest' ), 'canManage' => current_user_can( 'manage_options' ), 'i18nRetire' => __( 'Retire block', 'block-ledger' ), 'i18nRestore' => __( 'Restore', 'block-ledger' ), 'isAdminPage' => true, ) ); } ); function block_ledger_admin_page() { if ( ! current_user_can( 'edit_posts' ) ) { wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'block-ledger' ) ); } ?>

'; }, 1 );