*/ class MenuDuplicator { public function __construct() { add_action( 'admin_footer', [ $this, 'jltwp_adminify_add_duplicate_button' ], 11 ); add_action( 'admin_footer', [ $this, 'jltwp_adminify_creating_menu_duplicate' ], 6 ); // Duplicate Nav Menu Item add_action( 'admin_footer', [ $this, 'jltwp_adminify_duplicate_nav_menu_item' ], 12 ); } /** * Duplicate Menu Button * * @return void */ public function jltwp_adminify_add_duplicate_button() { $current_screen = get_current_screen(); $current_menu = get_user_option( 'nav_menu_recently_edited' ); if ( $current_screen->id == 'nav-menus' && $_GET['menu'] != '0' ) { $return = ''; $return .= '
' . __( 'Duplicate Menu', 'adminify' ) . ''; ?> id == 'nav-menus' ) { if ( isset( $_GET['adminify-menu-duplicate'] ) ) { $id = intval( wp_unslash( $_GET['adminify-menu-duplicate'] ) ); $source = wp_get_nav_menu_object( $id ); $duplicate = $this->render_menu_duplicate( sanitize_text_field( wp_unslash( $_GET['adminify-menu-duplicate'] ) ), $source->name . ' ' . __( '(Copy)', 'adminify' ) ); if ( $duplicate ) { ?> render_menu_duplicate( $id, $name . ' ' . __( '(Copy)', 'adminify' ) ); } if ( ! $new_id || is_array( $new_id ) ) { return false; } // Key is the original db ID, val is the new $rel = []; $i = 1; foreach ( $source_items as $menu_item ) { $args = [ 'menu-item-db-id' => $menu_item->db_id, 'menu-item-object-id' => $menu_item->object_id, 'menu-item-object' => $menu_item->object, 'menu-item-position' => $i, 'menu-item-type' => $menu_item->type, 'menu-item-title' => $menu_item->title, 'menu-item-url' => $menu_item->url, 'menu-item-description' => $menu_item->description, 'menu-item-attr-title' => $menu_item->attr_title, 'menu-item-target' => $menu_item->target, 'menu-item-classes' => implode( ' ', $menu_item->classes ), 'menu-item-xfn' => $menu_item->xfn, 'menu-item-status' => $menu_item->post_status, ]; $parent_id = wp_update_nav_menu_item( $new_id, 0, $args ); $rel[ $menu_item->db_id ] = $parent_id; // did it have a parent? if so, we need to update with the NEW ID if ( $menu_item->menu_item_parent ) { $args['menu-item-parent-id'] = $rel[ $menu_item->menu_item_parent ]; $parent_id = wp_update_nav_menu_item( $new_id, $parent_id, $args ); } // allow developers to run any custom functionality they'd like do_action( 'duplicate_menu_item', $menu_item, $args ); $i++; } return $new_id; } /** * Duplicate Nav Menu Item * * @return void */ public function jltwp_adminify_duplicate_nav_menu_item() { global $pagenow; if ( $pagenow != 'nav-menus.php' || ! current_user_can( 'edit_theme_options' ) ) { return; } ?>