Skip to content

Commit 5cceae7

Browse files
committed
Ajaxify pagination requests in menu boxes. Props filosofo. fixes #13204
git-svn-id: https://develop.svn.wordpress.org/trunk@14943 602fd350-edb4-49c9-b593-d223f7449a82
1 parent f333c16 commit 5cceae7

4 files changed

Lines changed: 84 additions & 23 deletions

File tree

wp-admin/admin-ajax.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,45 @@ function _wp_ajax_add_hierarchical_term() {
10911091

10921092
die('1');
10931093
break;
1094+
case 'menu-get-metabox' :
1095+
if ( ! current_user_can( 'edit_theme_options' ) )
1096+
die('-1');
1097+
1098+
require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
1099+
1100+
if ( isset( $_POST['item-type'] ) && 'post_type' == $_POST['item-type'] ) {
1101+
$type = 'posttype';
1102+
$callback = 'wp_nav_menu_item_post_type_meta_box';
1103+
$items = (array) get_post_types( array( 'show_in_nav_menus' => true ), 'object' );
1104+
} elseif ( isset( $_POST['item-type'] ) && 'taxonomy' == $_POST['item-type'] ) {
1105+
$type = 'taxonomy';
1106+
$callback = 'wp_nav_menu_item_taxonomy_meta_box';
1107+
$items = (array) get_taxonomies( array( 'show_ui' => true ), 'object' );
1108+
}
1109+
1110+
if ( ! empty( $_POST['item-object'] ) && isset( $items[$_POST['item-object']] ) ) {
1111+
$item = apply_filters( 'nav_menu_meta_box_object', $items[ $_POST['item-object'] ] );
1112+
ob_start();
1113+
call_user_func_array($callback, array(
1114+
null,
1115+
array(
1116+
'id' => 'add-' . $item->name,
1117+
'title' => $item->labels->name,
1118+
'callback' => $callback,
1119+
'args' => $item,
1120+
)
1121+
));
1122+
1123+
$markup = ob_get_clean();
1124+
1125+
echo json_encode(array(
1126+
'replace-id' => $type . '-' . $item->name,
1127+
'markup' => $markup,
1128+
));
1129+
}
1130+
1131+
exit;
1132+
break;
10941133
case 'menu-quick-search':
10951134
if ( ! current_user_can( 'edit_theme_options' ) )
10961135
die('-1');

wp-admin/includes/nav-menu.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ function wp_nav_menu_item_link_meta_box() {
455455
);
456456

457457
?>
458-
<div class="customlinkdiv">
458+
<div class="customlinkdiv" id="customlinkdiv">
459459

460460
<input type="hidden" value="custom" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-type]" />
461461
<p id="menu-item-url-wrap">
@@ -478,7 +478,7 @@ function wp_nav_menu_item_link_meta_box() {
478478
</span>
479479
<span class="add-to-menu">
480480
<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
481-
<input type="submit" class="button-secondary" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-custom-menu-item" />
481+
<input type="submit" class="button-secondary submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-custom-menu-item" id="submit-customlinkdiv" />
482482
</span>
483483
</p>
484484

@@ -533,6 +533,8 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) {
533533
array(
534534
$post_type_name . '-tab' => 'all',
535535
'paged' => '%#%',
536+
'item-type' => 'post_type',
537+
'item-object' => $post_type_name,
536538
)
537539
),
538540
'format' => '',
@@ -662,7 +664,7 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) {
662664

663665
<span class="add-to-menu">
664666
<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
665-
<input type="submit" class="button-secondary" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-post-type-menu-item" />
667+
<input type="submit" class="button-secondary submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-post-type-menu-item" id="submit-posttype-<?php echo $post_type_name; ?>" />
666668
</span>
667669
</p>
668670

@@ -707,13 +709,15 @@ function wp_nav_menu_item_taxonomy_meta_box( $object, $taxonomy ) {
707709
return;
708710
}
709711

710-
$num_pages = ceil( count($terms) / $per_page );
712+
$num_pages = ceil( wp_count_terms( $taxonomy_name , array_merge( $args, array('number' => '', 'offset' => '') ) ) / $per_page );
711713

712714
$page_links = paginate_links( array(
713715
'base' => add_query_arg(
714716
array(
715717
$taxonomy_name . '-tab' => 'all',
716718
'paged' => '%#%',
719+
'item-type' => 'taxonomy',
720+
'item-object' => $taxonomy_name,
717721
)
718722
),
719723
'format' => '',
@@ -831,7 +835,7 @@ function wp_nav_menu_item_taxonomy_meta_box( $object, $taxonomy ) {
831835

832836
<span class="add-to-menu">
833837
<img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
834-
<input type="submit" class="button-secondary" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-taxonomy-menu-item" />
838+
<input type="submit" class="button-secondary submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-taxonomy-menu-item" id="submit-taxonomy-<?php echo $taxonomy_name; ?>" />
835839
</span>
836840
</p>
837841

wp-admin/js/nav-menu.dev.js

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ var wpNavMenu;
3333
this.attachMenuEditListeners();
3434

3535
this.setupInputWithDefaultTitle();
36-
this.attachAddMenuItemListeners();
3736
this.attachQuickSearchListeners();
3837
this.attachThemeLocationsListeners();
3938

@@ -412,22 +411,6 @@ var wpNavMenu;
412411
});
413412
},
414413

415-
attachAddMenuItemListeners : function() {
416-
var form = $('#nav-menu-meta');
417-
418-
form.find('.add-to-menu input').click(function(){
419-
api.registerChange();
420-
$(this).trigger('wp-add-menu-item', [api.addMenuItemToBottom]);
421-
return false;
422-
});
423-
form.find('.customlinkdiv').bind('wp-add-menu-item', function(e, processMethod) {
424-
api.addCustomLink( processMethod );
425-
});
426-
form.find('.posttypediv, .taxonomydiv').bind('wp-add-menu-item', function(e, processMethod) {
427-
$(this).addSelectedToMenu( processMethod );
428-
});
429-
},
430-
431414
attachThemeLocationsListeners : function() {
432415
var loc = $('#nav-menu-theme-locations'), params = {};
433416
params['action'] = 'menu-locations-save';
@@ -618,6 +601,41 @@ var wpNavMenu;
618601
items.attr('checked', 'checked');
619602
return false;
620603
}
604+
} else if ( target.hasClass('submit-add-to-menu') ) {
605+
api.registerChange();
606+
607+
if ( e.target.id && 'submit-customlinkdiv' == e.target.id )
608+
api.addCustomLink( api.addMenuItemToBottom );
609+
else if ( e.target.id && -1 != e.target.id.indexOf('submit-') )
610+
$('#' + e.target.id.replace(/submit-/, '')).addSelectedToMenu( api.addMenuItemToBottom );
611+
return false;
612+
} else if ( target.hasClass('page-numbers') ) {
613+
$.post( ajaxurl, e.target.href.replace(/.*\?/, '').replace(/action=([^&]*)/, '') + '&action=menu-get-metabox',
614+
function( resp ) {
615+
if ( -1 == resp.indexOf('replace-id') )
616+
return;
617+
618+
var metaBoxData = $.parseJSON(resp),
619+
toReplace = document.getElementById(metaBoxData['replace-id']),
620+
placeholder = document.createElement('div'),
621+
wrap = document.createElement('div');
622+
623+
if ( ! metaBoxData['markup'] || ! toReplace )
624+
return;
625+
626+
wrap.innerHTML = metaBoxData['markup'] ? metaBoxData['markup'] : '';
627+
628+
toReplace.parentNode.insertBefore( placeholder, toReplace );
629+
placeholder.parentNode.removeChild( toReplace );
630+
631+
placeholder.parentNode.insertBefore( wrap, placeholder );
632+
633+
placeholder.parentNode.removeChild( placeholder );
634+
635+
}
636+
);
637+
638+
return false;
621639
}
622640
});
623641
},

0 commit comments

Comments
 (0)