Files
WooBC/woo-business-central/woo-business-central.php
Malin b64397dcd3 feat: WooCommerce Business Central integration plugin
Native PHP plugin (no Composer) that syncs:
- Product stock and pricing from BC to WooCommerce (scheduled cron)
- Orders from WooCommerce to BC (on payment received)
- Auto-creates customers in BC from WooCommerce billing data

Product matching: WooCommerce SKU → BC Item Number, fallback to GTIN (EAN).
OAuth2 client credentials auth with encrypted secret storage.
Admin settings page with connection test, manual sync, and log viewer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:59:53 +01:00

169 lines
4.9 KiB
PHP

<?php
/**
* Plugin Name: WooCommerce Business Central Integration
* Plugin URI: https://example.com/woo-business-central
* Description: Syncs stock, pricing, orders, and customers between WooCommerce and Microsoft Dynamics 365 Business Central.
* Version: 1.0.0
* Author: Your Name
* Author URI: https://example.com
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
* Text Domain: woo-business-central
* Domain Path: /languages
* Requires at least: 5.8
* Requires PHP: 7.4
* WC requires at least: 5.0
* WC tested up to: 8.0
*/
// Prevent direct access
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// Plugin constants
define( 'WBC_VERSION', '1.0.0' );
define( 'WBC_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'WBC_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'WBC_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
/**
* Check if WooCommerce is active
*/
function wbc_check_woocommerce() {
if ( ! class_exists( 'WooCommerce' ) ) {
add_action( 'admin_notices', 'wbc_woocommerce_missing_notice' );
return false;
}
return true;
}
/**
* Admin notice for missing WooCommerce
*/
function wbc_woocommerce_missing_notice() {
?>
<div class="notice notice-error">
<p><?php esc_html_e( 'WooCommerce Business Central Integration requires WooCommerce to be installed and active.', 'woo-business-central' ); ?></p>
</div>
<?php
}
/**
* Plugin activation hook
*/
function wbc_activate() {
// Check WooCommerce dependency
if ( ! class_exists( 'WooCommerce' ) ) {
deactivate_plugins( plugin_basename( __FILE__ ) );
wp_die(
esc_html__( 'WooCommerce Business Central Integration requires WooCommerce to be installed and active.', 'woo-business-central' ),
'Plugin dependency check',
array( 'back_link' => true )
);
}
// Create logs table
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-logger.php';
WBC_Logger::create_table();
// Set default options
$defaults = array(
'wbc_sync_frequency' => 'daily',
'wbc_enable_stock_sync' => 'yes',
'wbc_enable_price_sync' => 'yes',
'wbc_enable_order_sync' => 'yes',
'wbc_environment' => 'production',
);
foreach ( $defaults as $option => $value ) {
if ( get_option( $option ) === false ) {
add_option( $option, $value );
}
}
// Schedule cron event
if ( ! wp_next_scheduled( 'wbc_product_sync_event' ) ) {
$frequency = get_option( 'wbc_sync_frequency', 'daily' );
wp_schedule_event( time(), $frequency, 'wbc_product_sync_event' );
}
// Flush rewrite rules
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'wbc_activate' );
/**
* Plugin deactivation hook
*/
function wbc_deactivate() {
// Clear scheduled cron events
$timestamp = wp_next_scheduled( 'wbc_product_sync_event' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wbc_product_sync_event' );
}
// Flush rewrite rules
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'wbc_deactivate' );
/**
* Load plugin text domain
*/
function wbc_load_textdomain() {
load_plugin_textdomain( 'woo-business-central', false, dirname( WBC_PLUGIN_BASENAME ) . '/languages' );
}
add_action( 'plugins_loaded', 'wbc_load_textdomain' );
/**
* Initialize the plugin
*/
function wbc_init() {
// Check WooCommerce dependency
if ( ! wbc_check_woocommerce() ) {
return;
}
// Load required files
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-loader.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-logger.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-oauth.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-api-client.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-product-sync.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-customer-sync.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-order-sync.php';
require_once WBC_PLUGIN_DIR . 'includes/class-wbc-cron.php';
// Load admin files
if ( is_admin() ) {
require_once WBC_PLUGIN_DIR . 'admin/class-wbc-admin.php';
}
// Initialize the loader
$loader = new WBC_Loader();
$loader->run();
}
add_action( 'plugins_loaded', 'wbc_init', 20 );
/**
* Add custom cron schedules
*/
function wbc_cron_schedules( $schedules ) {
$schedules['twice_daily'] = array(
'interval' => 12 * HOUR_IN_SECONDS,
'display' => __( 'Twice Daily', 'woo-business-central' ),
);
return $schedules;
}
add_filter( 'cron_schedules', 'wbc_cron_schedules' );
/**
* HPOS compatibility declaration
*/
add_action( 'before_woocommerce_init', function() {
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
} );