/** * Move a term before the a given element of its hierarchy level. * * @param int $the_term * @param int $next_id the id of the next sibling element in save hierarchy level * @param string $taxonomy * @param int $index (default: 0) * @param mixed $terms (default: null) * @return int */ function wc_reorder_terms($the_term, $next_id, $taxonomy, $index = 0, $terms = null) { if (!$terms) { $terms = get_terms($taxonomy, 'menu_order=ASC&hide_empty=0&parent=0'); } if (empty($terms)) { return $index; } $id = $the_term->term_id; $term_in_level = false; // flag: is our term to order in this level of terms foreach ($terms as $term) { if ($term->term_id == $id) { // our term to order, we skip $term_in_level = true; continue; // our term to order, we skip } // the nextid of our term to order, lets move our term here if (null !== $next_id && $term->term_id == $next_id) { $index++; $index = wc_set_term_order($id, $index, $taxonomy, true); } // set order $index++; $index = wc_set_term_order($term->term_id, $index, $taxonomy); // if that term has children we walk through them $children = get_terms($taxonomy, "parent={$term->term_id}&menu_order=ASC&hide_empty=0"); if (!empty($children)) { $index = wc_reorder_terms($the_term, $next_id, $taxonomy, $index, $children); } } // no nextid meaning our term is in last position if ($term_in_level && null === $next_id) { $index = wc_set_term_order($id, $index + 1, $taxonomy, true); } return $index; }
/** * Ajax request handling for categories ordering */ public function term_ordering() { global $wpdb; $id = (int) $_POST['id']; $next_id = isset($_POST['nextid']) && (int) $_POST['nextid'] ? (int) $_POST['nextid'] : null; $taxonomy = isset($_POST['thetaxonomy']) ? esc_attr($_POST['thetaxonomy']) : null; $term = get_term_by('id', $id, $taxonomy); if (!$id || !$term || !$taxonomy) { die(0); } wc_reorder_terms($term, $next_id, $taxonomy); $children = get_terms($taxonomy, "child_of={$id}&menu_order=ASC&hide_empty=0"); if ($term && sizeof($children)) { echo 'children'; die; } }
/** * Ajax request handling for categories ordering */ public static function term_ordering() { // check permissions again and make sure we have what we need if (!current_user_can('edit_products') || empty($_POST['id'])) { die(-1); } $id = (int) $_POST['id']; $next_id = isset($_POST['nextid']) && (int) $_POST['nextid'] ? (int) $_POST['nextid'] : null; $taxonomy = isset($_POST['thetaxonomy']) ? esc_attr($_POST['thetaxonomy']) : null; $term = get_term_by('id', $id, $taxonomy); if (!$id || !$term || !$taxonomy) { die(0); } wc_reorder_terms($term, $next_id, $taxonomy); $children = get_terms($taxonomy, "child_of={$id}&menu_order=ASC&hide_empty=0"); if ($term && sizeof($children)) { echo 'children'; die; } }
/** * @deprecated */ function woocommerce_order_terms($the_term, $next_id, $taxonomy, $index = 0, $terms = null) { return wc_reorder_terms($the_term, $next_id, $taxonomy, $index, $terms); }