Ticket #14134: 14134.diff
File 14134.diff, 2.6 KB (added by , 9 years ago) |
---|
-
src/wp-admin/js/nav-menu.js
43 43 44 44 this.attachQuickSearchListeners(); 45 45 this.attachThemeLocationsListeners(); 46 this.attachMenuSaveSubmitListeners(); 46 47 47 48 this.attachTabsPanelListeners(); 48 49 … … 834 835 }); 835 836 }, 836 837 838 attachMenuSaveSubmitListeners : function() { 839 /* 840 * When a navigation menu is saved, store a JSON representation of all form data 841 * in a single input to avoid PHP max_post_vars limitations. See #14134. 842 */ 843 $('#update-nav-menu').submit(function() { 844 var navMenuData = {}; 845 $('#update-nav-menu input').each(function(index, element) { 846 var name = $(element).attr('name'); 847 var regex = /(.*)(?:\[(\d+)\])/; 848 if ( regex.test( name ) ) { 849 var matches = regex.exec(name); 850 if ( ! navMenuData[matches[1]] ) { 851 navMenuData[matches[1]] = []; 852 } 853 navMenuData[matches[1]][matches[2]] = $(element).val(); 854 } else { 855 navMenuData[name] = $(element).val(); 856 } 857 }); 858 $('[name="nav-menu-data"]').val( JSON.stringify( navMenuData ) ); 859 }); 860 }, 861 837 862 attachThemeLocationsListeners : function() { 838 863 var loc = $('#nav-menu-theme-locations'), params = {}; 839 864 params.action = 'menu-locations-save'; -
src/wp-admin/nav-menus.php
49 49 // Allowed actions: add, update, delete 50 50 $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'edit'; 51 51 52 /* 53 * If a JSON blob of navigation menu data is found, expand it and fill PHP $_POST 54 * vars to avoid PHP max_post_vars limitations. See #14134. 55 */ 56 if ( isset( $_POST['nav-menu-data'] ) ) { 57 $data = json_decode( stripslashes( $_POST['nav-menu-data'] ) ); 58 foreach ( $data as $post_var => $post_data ) { 59 $_POST[$post_var] = $post_data; 60 } 61 } 52 62 switch ( $action ) { 53 63 case 'add-menu-item': 54 64 check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' ); … … 731 741 <div id="menu-management"> 732 742 <form id="update-nav-menu" method="post" enctype="multipart/form-data"> 733 743 <div class="menu-edit <?php if ( $add_new_screen ) echo 'blank-slate'; ?>"> 744 <input type="hidden" name="nav-menu-data"> 734 745 <?php 735 746 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); 736 747 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );