PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | jetpack_vendor/automattic/jetpack-sync/src/modules/class-menus.php +150 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,150 @@
1 +<?php
2 +/**
3 + * Menus sync module.
4 + *
5 + * @package automattic/jetpack-sync
6 + */
7 +
8 +namespace Automattic\Jetpack\Sync\Modules;
9 +
10 +if ( ! defined( 'ABSPATH' ) ) {
11 + exit( 0 );
12 +}
13 +
14 +/**
15 + * Class to handle sync for menus.
16 + */
17 +class Menus extends Module {
18 + /**
19 + * Navigation menu items that were added but not synced yet.
20 + *
21 + * @access private
22 + *
23 + * @var array
24 + */
25 + private $nav_items_just_added = array();
26 +
27 + /**
28 + * Sync module name.
29 + *
30 + * @access public
31 + *
32 + * @return string
33 + */
34 + public function name() {
35 + return 'menus';
36 + }
37 +
38 + /**
39 + * Initialize menus action listeners.
40 + *
41 + * @access public
42 + *
43 + * @param callable $callable Action handler callable.
44 + */
45 + public function init_listeners( $callable ) {
46 + add_action( 'wp_create_nav_menu', $callable, 10, 2 );
47 + add_action( 'wp_update_nav_menu', array( $this, 'update_nav_menu' ), 10, 2 );
48 + add_action( 'wp_add_nav_menu_item', array( $this, 'update_nav_menu_add_item' ), 10, 3 );
49 + add_action( 'wp_update_nav_menu_item', array( $this, 'update_nav_menu_update_item' ), 10, 3 );
50 + add_action( 'post_updated', array( $this, 'remove_just_added_menu_item' ), 10, 2 );
51 +
52 + add_action( 'jetpack_sync_updated_nav_menu', $callable, 10, 2 );
53 + add_action( 'jetpack_sync_updated_nav_menu_add_item', $callable, 10, 4 );
54 + add_action( 'jetpack_sync_updated_nav_menu_update_item', $callable, 10, 4 );
55 + add_action( 'delete_nav_menu', $callable, 10, 3 );
56 + }
57 +
58 + /**
59 + * Nav menu update handler.
60 + *
61 + * @access public
62 + *
63 + * @param int $menu_id ID of the menu.
64 + * @param array $menu_data An array of menu data.
65 + */
66 + public function update_nav_menu( $menu_id, $menu_data = array() ) {
67 + if ( empty( $menu_data ) ) {
68 + return;
69 + }
70 + /**
71 + * Helps sync log that a nav menu was updated.
72 + *
73 + * @since 1.6.3
74 + * @since-jetpack 5.0.0
75 + *
76 + * @param int $menu_id ID of the menu.
77 + * @param array $menu_data An array of menu data.
78 + */
79 + do_action( 'jetpack_sync_updated_nav_menu', $menu_id, $menu_data );
80 + }
81 +
82 + /**
83 + * Nav menu item addition handler.
84 + *
85 + * @access public
86 + *
87 + * @param int $menu_id ID of the menu.
88 + * @param int $nav_item_id ID of the new menu item.
89 + * @param array $nav_item_args Arguments used to add the menu item.
90 + */
91 + public function update_nav_menu_add_item( $menu_id, $nav_item_id, $nav_item_args ) {
92 + $menu_data = wp_get_nav_menu_object( $menu_id );
93 + $this->nav_items_just_added[] = $nav_item_id;
94 + /**
95 + * Helps sync log that a new menu item was added.
96 + *
97 + * @since 1.6.3
98 + * @since-jetpack 5.0.0
99 + *
100 + * @param int $menu_id ID of the menu.
101 + * @param array $menu_data An array of menu data.
102 + * @param int $nav_item_id ID of the new menu item.
103 + * @param array $nav_item_args Arguments used to add the menu item.
104 + */
105 + do_action( 'jetpack_sync_updated_nav_menu_add_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
106 + }
107 +
108 + /**
109 + * Nav menu item update handler.
110 + *
111 + * @access public
112 + *
113 + * @param int $menu_id ID of the menu.
114 + * @param int $nav_item_id ID of the new menu item.
115 + * @param array $nav_item_args Arguments used to update the menu item.
116 + */
117 + public function update_nav_menu_update_item( $menu_id, $nav_item_id, $nav_item_args ) {
118 + if ( in_array( $nav_item_id, $this->nav_items_just_added, true ) ) {
119 + return;
120 + }
121 + $menu_data = wp_get_nav_menu_object( $menu_id );
122 + /**
123 + * Helps sync log that an update to the menu item happened.
124 + *
125 + * @since 1.6.3
126 + * @since-jetpack 5.0.0
127 + *
128 + * @param int $menu_id ID of the menu.
129 + * @param array $menu_data An array of menu data.
130 + * @param int $nav_item_id ID of the new menu item.
131 + * @param array $nav_item_args Arguments used to update the menu item.
132 + */
133 + do_action( 'jetpack_sync_updated_nav_menu_update_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
134 + }
135 +
136 + /**
137 + * Remove menu items that have already been saved from the "just added" list.
138 + *
139 + * @access public
140 + *
141 + * @param int $nav_item_id ID of the new menu item.
142 + * @param \WP_Post $post_after Nav menu item post object after the update.
143 + */
144 + public function remove_just_added_menu_item( $nav_item_id, $post_after ) {
145 + if ( ! $post_after instanceof \WP_Post || 'nav_menu_item' !== $post_after->post_type ) {
146 + return;
147 + }
148 + $this->nav_items_just_added = array_diff( $this->nav_items_just_added, array( $nav_item_id ) );
149 + }
150 +}