PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / EditorScopedSync / ForceUpdateEndpoint.php
woocommerce-multilingual / classes / EditorScopedSync Last commit date
EditorChangeTracker.php 1 month ago ForceUpdateEndpoint.php 1 month ago HooksFactory.php 1 month ago Mode.php 1 month ago Notices.php 1 month ago Settings.php 1 month ago SyncGate.php 1 month ago
ForceUpdateEndpoint.php
63 lines
1 <?php
2
3 namespace WCML\EditorScopedSync;
4
5 use WCML\Synchronization\Manager as SyncManager;
6 use function WPML\Container\make;
7
8 class ForceUpdateEndpoint implements \IWPML_Backend_Action {
9
10 const ACTION = 'wcml_force_full_variation_sync';
11 const NONCE = 'wcml_force_full_variation_sync';
12
13 const PRIORITY_OVERRIDE_SYNC_GATE = 100;
14
15 public function add_hooks() {
16 add_action( 'wp_ajax_' . self::ACTION, [ __CLASS__, 'handle' ] );
17 }
18
19 public static function handle() {
20 check_ajax_referer( self::NONCE, '_wpnonce' );
21 if ( ! current_user_can( 'edit_products' ) ) {
22 wp_send_json_error( [ 'message' => 'forbidden' ], 403 );
23 }
24
25 $productId = isset( $_POST['product_id'] ) ? absint( $_POST['product_id'] ) : 0;
26 if ( ! $productId ) {
27 wp_send_json_error( [ 'message' => 'missing product_id' ], 400 );
28 }
29
30 $product = get_post( $productId );
31 if ( ! $product || 'product' !== $product->post_type) {
32 wp_send_json_error( [ 'message' => 'invalid product' ], 404 );
33 }
34
35 add_filter( 'wcml_editor_scoped_variation_ids', '__return_null', self::PRIORITY_OVERRIDE_SYNC_GATE );
36
37 try {
38 do_action( 'wcml_force_full_product_sync_run', $productId, $product );
39 make( SyncManager::class )->run( $product );
40 $message = 'sync completed';
41 $success = true;
42 } catch ( \Throwable $e ) {
43 $message = 'error: ' . $e->getMessage();
44 $success = false;
45 }
46
47 remove_filter( 'wcml_editor_scoped_variation_ids', '__return_null', self::PRIORITY_OVERRIDE_SYNC_GATE );
48
49 wp_send_json(
50 [
51 'product_id' => $productId,
52 'message' => $message,
53 'success' => $success,
54 ],
55 200
56 );
57 }
58
59 public static function nonce() {
60 return wp_create_nonce( self::NONCE );
61 }
62 }
63