PluginProbe ʕ •ᴥ•ʔ
Nested Pages / 3.0.8
Nested Pages v3.0.8
3.3.1 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 8 years ago NavMenuFrontEnd.php 8 years ago NavMenuRemoveItem.php 9 years ago NavMenuRepository.php 8 years ago NavMenuSync.php 9 years ago NavMenuSyncListing.php 8 years ago NavMenuSyncMenu.php 8 years ago NavMenuTrashActions.php 7 years ago
NavMenuRepository.php
170 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 == 'object_id' ){
38 $menu_id = $this->getMenuID();
39 $prefix = $wpdb->prefix;
40 $meta_table = $prefix . 'postmeta';
41 $term_relationships_table = $prefix . 'term_relationships';
42 $term_taxonomy_table = $prefix . 'term_taxonomy';
43 $terms_table = $prefix . 'terms';
44 $sql = $wpdb->prepare("SELECT
45 pm.post_id,
46 t.term_id,
47 t.name,
48 pmx.meta_value AS xfn_type
49 FROM $meta_table AS pm
50 LEFT JOIN $term_relationships_table AS tr
51 ON tr.object_id = pm.post_id
52 LEFT JOIN $term_taxonomy_table AS tt
53 ON tt.term_taxonomy_id = tr.term_taxonomy_id
54 LEFT JOIN $terms_table AS t
55 ON t.term_id = tt.term_id
56 LEFT JOIN $meta_table AS pmx
57 ON pmx.post_id = pm.post_id AND pmx.meta_key = '_menu_item_xfn'
58 WHERE pm.meta_value = %d AND pm.meta_key = '_menu_item_object_id'
59 ", $id);
60 $results = $wpdb->get_results($sql);
61 foreach($results as $result){
62 if ( $result->term_id == $menu_id && $result->xfn_type == 'page' ) $post_id = $result->post_id;
63 }
64 return $post_id;
65 }
66 }
67
68 private function getMenuItemFromXFN($id)
69 {
70 global $wpdb;
71 $prefix = $wpdb->prefix;
72 $meta_table = $prefix . 'postmeta';
73 $sql = $wpdb->prepare("SELECT post_id FROM `$meta_table` WHERE meta_value = %d AND meta_key = '_menu_item_xfn'", $id);
74 $post_id = $wpdb->get_var($sql);
75
76 $wpdb = $original_wpdb;
77 return ( $post_id ) ? $post_id : 0;
78 }
79
80 /**
81 * Get the Menu Term Object
82 * @since 1.3.4
83 * @return object - WP Term Object
84 */
85 public function getMenuTermObject()
86 {
87 $menu_id = get_option('nestedpages_menu');
88 $term = ( is_numeric($menu_id) ) ? get_term_by('id', $menu_id, 'nav_menu') : false;
89 if ( $term ) return $term;
90
91 // No Menu Yet
92 $this->createNewMenu();
93 return $this->getMenuTermObject();
94 }
95
96 /**
97 * Get the Menu ID from the title
98 * @since 1.3.5
99 * @return int
100 */
101 public function getMenuIDFromTitle($title)
102 {
103 $term = get_term_by('name', $title, 'nav_menu');
104 return ( $term ) ? $term->term_id : false;
105 }
106
107 /**
108 * Create Empty Menu if one doesn't exist
109 * @since 1.3.4
110 */
111 private function createNewMenu()
112 {
113 $menu_id = wp_create_nav_menu('Nested Pages');
114 if ( is_wp_error($menu_id) ){
115 $name = 'Nested Pages ' . rand(1, 5);
116 $menu_id = wp_create_nav_menu($name);
117 }
118 update_option('nestedpages_menu', $menu_id);
119 }
120
121 /**
122 * Clear out the menu
123 */
124 public function clearMenu($menu_id)
125 {
126 $menu_items = wp_get_nav_menu_items($menu_id);
127 foreach ( $menu_items as $i ){
128 wp_delete_post($i->ID, true);
129 }
130 }
131
132 /**
133 * Is the provided post a nav menu item
134 * @return boolean
135 * @param int $id - post id
136 */
137 public function isNavMenuItem($id)
138 {
139 if ( get_post_type($id) == 'nav_menu_item' ) return true;
140 return false;
141 }
142
143 /**
144 * Get the Link post id from a title
145 */
146 public function getLinkfromTitle($title)
147 {
148 $post = get_page_by_title($title, OBJECT, 'np-redirect');
149 return $post->ID;
150 }
151
152 /**
153 * Get an array of pages not hidden in nav menu
154 * WP_Query won't return pages with empty meta values, so sql is used
155 * @return array
156 */
157 public function getPagesInMenu()
158 {
159 global $wpdb;
160 $post_table = $wpdb->prefix . 'posts';
161 $meta_table = $wpdb->prefix . 'postmeta';
162 $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)";
163 $results = $wpdb->get_results($sql, ARRAY_N);
164 if ( !$results ) return [];
165 foreach($results as $key => $result){
166 $visible[$key] = $result[0];
167 }
168 return $visible;
169 }
170 }