PluginProbe ʕ •ᴥ•ʔ
Nested Pages / 3.2.15
Nested Pages v3.2.15
3.2.15 3.2.14 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 trunk 1.0 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.3.0 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.2 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.3.1 1.6.3.2 1.6.4 1.6.5 1.6.5.1 1.6.5.2 1.6.6 1.6.7 1.6.8 1.7.0 1.7.1 2.0.1 2.0.2 2.0.3 2.0.4 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.21 3.1.22 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7
wp-nested-pages / app / Entities / NavMenu / NavMenuRepository.php
wp-nested-pages / app / Entities / NavMenu Last commit date
NavMenuActions.php 4 years ago NavMenuFrontEnd.php 3 years ago NavMenuRemoveItem.php 8 years ago NavMenuRepository.php 4 years ago NavMenuSync.php 3 years ago NavMenuSyncListing.php 5 days ago NavMenuSyncMenu.php 8 years ago NavMenuTrashActions.php 7 years ago
NavMenuRepository.php
178 lines
1 <?php
2 namespace NestedPages\Entities\NavMenu;
3
4 class NavMenuRepository
5 {
6 /**
7 * Get the Menu ID
8 * @since 1.3.4
9 * @return int
10 */
11 public function getMenuID()
12 {
13 $term = $this->getMenuTermObject();
14 return $term->term_id;
15 }
16
17 /**
18 * Get Menu Item ID
19 * @since 1.3.4
20 * @param int $id - Post ID
21 * @param string $query - xfn/object_id
22 * @return int
23 */
24 public function getMenuItem($id, $query = 'xfn')
25 {
26 global $wpdb;
27 $post_id = 0;
28
29 if ( $query == 'xfn' ){
30 $prefix = $wpdb->prefix;
31 $meta_table = $prefix . 'postmeta';
32 $sql = "SELECT post_id FROM `$meta_table` WHERE meta_value = '$id' AND meta_key = '_menu_item_xfn'";
33 $post_id = $wpdb->get_var($sql);
34 return ( $post_id ) ? $post_id : 0;
35 }
36
37 if ( $query == 'description' ){
38 $prefix = $wpdb->prefix;
39 $post_table = $prefix . 'posts';
40 $sql = "SELECT post_content FROM `$post_table` WHERE ID = '$id'";
41 $description = $wpdb->get_var($sql);
42 return ( $description ) ? $description : ' ';
43 }
44
45 if ( $query == 'object_id' ){
46 $menu_id = $this->getMenuID();
47 $prefix = $wpdb->prefix;
48 $meta_table = $prefix . 'postmeta';
49 $term_relationships_table = $prefix . 'term_relationships';
50 $term_taxonomy_table = $prefix . 'term_taxonomy';
51 $terms_table = $prefix . 'terms';
52 $sql = $wpdb->prepare("SELECT
53 pm.post_id,
54 t.term_id,
55 t.name,
56 pmx.meta_value AS xfn_type
57 FROM $meta_table AS pm
58 LEFT JOIN $term_relationships_table AS tr
59 ON tr.object_id = pm.post_id
60 LEFT JOIN $term_taxonomy_table AS tt
61 ON tt.term_taxonomy_id = tr.term_taxonomy_id
62 LEFT JOIN $terms_table AS t
63 ON t.term_id = tt.term_id
64 LEFT JOIN $meta_table AS pmx
65 ON pmx.post_id = pm.post_id AND pmx.meta_key = '_menu_item_xfn'
66 WHERE pm.meta_value = %d AND pm.meta_key = '_menu_item_object_id'
67 ", $id);
68 $results = $wpdb->get_results($sql);
69 foreach($results as $result){
70 if ( $result->term_id == $menu_id && $result->xfn_type == 'page' ) $post_id = $result->post_id;
71 }
72 return $post_id;
73 }
74 }
75
76 private function getMenuItemFromXFN($id)
77 {
78 global $wpdb;
79 $prefix = $wpdb->prefix;
80 $meta_table = $prefix . 'postmeta';
81 $sql = $wpdb->prepare("SELECT post_id FROM `$meta_table` WHERE meta_value = %d AND meta_key = '_menu_item_xfn'", $id);
82 $post_id = $wpdb->get_var($sql);
83
84 $wpdb = $original_wpdb;
85 return ( $post_id ) ? $post_id : 0;
86 }
87
88 /**
89 * Get the Menu Term Object
90 * @since 1.3.4
91 * @return object - WP Term Object
92 */
93 public function getMenuTermObject()
94 {
95 $menu_id = get_option('nestedpages_menu');
96 $term = ( is_numeric($menu_id) ) ? get_term_by('id', $menu_id, 'nav_menu') : false;
97 if ( $term ) return $term;
98
99 // No Menu Yet
100 $this->createNewMenu();
101 return $this->getMenuTermObject();
102 }
103
104 /**
105 * Get the Menu ID from the title
106 * @since 1.3.5
107 * @return int
108 */
109 public function getMenuIDFromTitle($title)
110 {
111 $term = get_term_by('name', $title, 'nav_menu');
112 return ( $term ) ? $term->term_id : false;
113 }
114
115 /**
116 * Create Empty Menu if one doesn't exist
117 * @since 1.3.4
118 */
119 private function createNewMenu()
120 {
121 $menu_id = wp_create_nav_menu('Nested Pages');
122 if ( is_wp_error($menu_id) ){
123 $name = 'Nested Pages ' . rand(1, 5);
124 $menu_id = wp_create_nav_menu($name);
125 }
126 update_option('nestedpages_menu', $menu_id);
127 }
128
129 /**
130 * Clear out the menu
131 */
132 public function clearMenu($menu_id)
133 {
134 $menu_items = wp_get_nav_menu_items($menu_id);
135 foreach ( $menu_items as $i ){
136 wp_delete_post($i->ID, true);
137 }
138 }
139
140 /**
141 * Is the provided post a nav menu item
142 * @return boolean
143 * @param int $id - post id
144 */
145 public function isNavMenuItem($id)
146 {
147 if ( get_post_type($id) == 'nav_menu_item' ) return true;
148 return false;
149 }
150
151 /**
152 * Get the Link post id from a title
153 */
154 public function getLinkfromTitle($title)
155 {
156 $post = get_page_by_title($title, OBJECT, 'np-redirect');
157 return $post->ID;
158 }
159
160 /**
161 * Get an array of pages not hidden in nav menu
162 * WP_Query won't return pages with empty meta values, so sql is used
163 * @return array
164 */
165 public function getPagesInMenu()
166 {
167 global $wpdb;
168 $post_table = $wpdb->prefix . 'posts';
169 $meta_table = $wpdb->prefix . 'postmeta';
170 $sql = "SELECT p.ID AS nav_status FROM $post_table AS p LEFT JOIN $meta_table AS m ON p.ID = m.post_id AND m.meta_key = 'np_nav_status' WHERE p.post_type = 'page' AND (m.meta_value = 'show' OR m.meta_value IS NULL)";
171 $results = $wpdb->get_results($sql, ARRAY_N);
172 if ( !$results ) return [];
173 foreach($results as $key => $result){
174 $visible[$key] = $result[0];
175 }
176 return $visible;
177 }
178 }