public function test_has_moves() { $tracker = new BU_Navigation_Reorder_Tracker('page'); $this->assertFalse($tracker->has_moves()); // Check against post that has moved $post = get_post($this->posts['grandchild_one']); wp_update_post(array('ID' => $post->ID, 'menu_order' => 2)); $moved = get_post($this->posts['grandchild_one']); $tracker->mark_post_as_moved($moved); $this->assertTrue($tracker->has_moves()); }
/** * Update navigation related meta data on post save * * WordPress will handle updating of post_parent and menu_order prior to this callback being run * The post property of stored in this object will hold the post data prior to update * * @todo don't hard code meta keys */ public function save($post_id, $post) { if (!in_array($post->post_type, $this->plugin->supported_post_types())) { return; } if ('auto-draft' == $post->post_status) { return; } if (array_key_exists('nav_label', $_POST)) { // update the navigation meta data $nav_label = wp_kses_post($_POST['nav_label']); $exclude = array_key_exists('nav_display', $_POST) ? 0 : 1; update_post_meta($post_id, BU_NAV_META_PAGE_LABEL, $nav_label); update_post_meta($post_id, BU_NAV_META_PAGE_EXCLUDE, $exclude); } // Perform reordering if post parent or menu order has changed $reorder = new BU_Navigation_Reorder_Tracker($post->post_type); // Reorder old and new section if parent has changed if ($this->post->post_parent != $post->post_parent) { $reorder->mark_post_as_moved($post); $reorder->mark_section_for_reordering($this->post->post_parent); } else { if ($this->post->menu_order != $post->menu_order) { $reorder->mark_post_as_moved($post); } } // Reorder if ($reorder->has_moves()) { $reorder->run(); } }