NavMenuActions.php
11 years ago
NavMenuRemoveItem.php
11 years ago
NavMenuRepository.php
11 years ago
NavMenuSync.php
11 years ago
NavMenuSyncInterface.php
11 years ago
NavMenuSyncListing.php
11 years ago
NavMenuSyncMenu.php
11 years ago
NavMenuTrashActions.php
11 years ago
NavMenuRepository.php
150 lines
| 1 | <?php namespace NestedPages\Entities\NavMenu; |
| 2 | |
| 3 | class NavMenuRepository { |
| 4 | |
| 5 | /** |
| 6 | * Get the Menu ID |
| 7 | * @since 1.3.4 |
| 8 | * @return int |
| 9 | */ |
| 10 | public function getMenuID() |
| 11 | { |
| 12 | $term = $this->getMenuTermObject(); |
| 13 | return $term->term_id; |
| 14 | } |
| 15 | |
| 16 | |
| 17 | /** |
| 18 | * Get Menu Item ID |
| 19 | * @since 1.3.4 |
| 20 | * @param int $id - Post ID |
| 21 | * @return int |
| 22 | */ |
| 23 | public function getMenuItemID($id) |
| 24 | { |
| 25 | $meta_query = new \WP_Query(array( |
| 26 | 'post_type' => 'nav_menu_item', |
| 27 | 'posts_per_page' => 1, |
| 28 | 'meta_key' => '_menu_item_object_id', |
| 29 | 'meta_value' => $id, |
| 30 | )); |
| 31 | return ( $meta_query->have_posts() ) ? $meta_query->posts[0]->ID : $this->getLinkMenuItemXFN($id); |
| 32 | } |
| 33 | |
| 34 | |
| 35 | /** |
| 36 | * Get Link from XFN field |
| 37 | * Using XFN field to store original post ID |
| 38 | * Hack way of doing it, but no other way to tie custom menu items to post type and retain custom functionality |
| 39 | * @param int $id - Post ID |
| 40 | */ |
| 41 | public function getLinkMenuItemXFN($id) |
| 42 | { |
| 43 | $meta_query = new \WP_Query(array( |
| 44 | 'post_type' => 'nav_menu_item', |
| 45 | 'posts_per_page' => 1, |
| 46 | 'meta_key' => '_menu_item_xfn', |
| 47 | 'meta_value' => $id, |
| 48 | )); |
| 49 | return ( $meta_query->have_posts() ) ? $meta_query->posts[0]->ID : $this->getLinkMenuItemID($id); |
| 50 | } |
| 51 | |
| 52 | |
| 53 | /** |
| 54 | * Get Link Nav Menu from post ID using title |
| 55 | * Supporting legacy NP versions before XFN was saved |
| 56 | * @since 1.3.4 |
| 57 | * @param int $id |
| 58 | * @return int |
| 59 | */ |
| 60 | public function getLinkMenuItemID($id) |
| 61 | { |
| 62 | $post = get_page_by_title( get_the_title($id), OBJECT, 'nav_menu_item'); |
| 63 | if ( !$post ) return 0; |
| 64 | return $post->ID; |
| 65 | } |
| 66 | |
| 67 | |
| 68 | |
| 69 | /** |
| 70 | * Get the Menu Term Object |
| 71 | * @since 1.3.4 |
| 72 | * @return object - WP Term Object |
| 73 | */ |
| 74 | public function getMenuTermObject() |
| 75 | { |
| 76 | if ( get_option('nestedpages_menu') ){ |
| 77 | $menu_id = get_option('nestedpages_menu'); |
| 78 | return get_term_by('id', $menu_id, 'nav_menu'); |
| 79 | } else { |
| 80 | $this->createNewMenu(); |
| 81 | $this->getMenuTermObject(); |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | |
| 86 | /** |
| 87 | * Create Empty Menu if one doesn't exist |
| 88 | * @since 1.3.4 |
| 89 | */ |
| 90 | private function createNewMenu() |
| 91 | { |
| 92 | $menu_id = wp_create_nav_menu('Nested Pages'); |
| 93 | update_option('nestedpages_menu', $menu_id); |
| 94 | } |
| 95 | |
| 96 | |
| 97 | /** |
| 98 | * Clear out the menu |
| 99 | */ |
| 100 | public function clearMenu($menu_id) |
| 101 | { |
| 102 | $menu_items = wp_get_nav_menu_items($menu_id); |
| 103 | foreach ( $menu_items as $i ){ |
| 104 | wp_delete_post($i->ID, true); |
| 105 | } |
| 106 | } |
| 107 | |
| 108 | |
| 109 | /** |
| 110 | * Is the provided post a nav menu item |
| 111 | * @return boolean |
| 112 | * @param int $id - post id |
| 113 | */ |
| 114 | public function isNavMenuItem($id) |
| 115 | { |
| 116 | if ( get_post_type($id) == 'nav_menu_item' ) return true; |
| 117 | return false; |
| 118 | } |
| 119 | |
| 120 | |
| 121 | /** |
| 122 | * Get the Link post id from a title |
| 123 | */ |
| 124 | public function getLinkfromTitle($title) |
| 125 | { |
| 126 | $post = get_page_by_title($title, OBJECT, 'np-redirect'); |
| 127 | return $post->ID; |
| 128 | } |
| 129 | |
| 130 | |
| 131 | /** |
| 132 | * Get an array of pages not hidden in nav menu |
| 133 | * WP_Query won't return pages with empty meta values, so sql is used |
| 134 | * @return array |
| 135 | */ |
| 136 | public function getPagesInMenu() |
| 137 | { |
| 138 | global $wpdb; |
| 139 | $post_table = $wpdb->prefix . 'posts'; |
| 140 | $meta_table = $wpdb->prefix . 'postmeta'; |
| 141 | $sql = "SELECT p.ID AS nav_status FROM wp_posts AS p LEFT JOIN wp_postmeta 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)"; |
| 142 | $results = $wpdb->get_results($sql, ARRAY_N); |
| 143 | if ( !$results ) return; |
| 144 | foreach($results as $key => $result){ |
| 145 | $visible[$key] = $result[0]; |
| 146 | } |
| 147 | return $visible; |
| 148 | } |
| 149 | |
| 150 | } |