PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.3
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 13.7.2 13.8.3 All 506 releases
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules / class-menus.php

class-menus.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.3, at jetpack_vendor/automattic/jetpack-sync/src/modules/class-menus.php

151 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
151