mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-29 21:20:18 +00:00
New menu UI. Props filosofo. see #12713
git-svn-id: https://develop.svn.wordpress.org/trunk@14248 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
+66
-1
@@ -126,11 +126,21 @@ case 'imgedit-preview' :
|
||||
check_ajax_referer( "image_editor-$post_id" );
|
||||
|
||||
include_once( ABSPATH . 'wp-admin/includes/image-edit.php' );
|
||||
if ( !stream_preview_image($post_id) )
|
||||
if ( ! stream_preview_image($post_id) )
|
||||
die('-1');
|
||||
|
||||
die();
|
||||
break;
|
||||
case 'menu-quick-search':
|
||||
if ( ! current_user_can( 'switch_themes' ) )
|
||||
die('-1');
|
||||
|
||||
require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
|
||||
|
||||
_wp_ajax_menu_quick_search( $_REQUEST );
|
||||
|
||||
exit;
|
||||
break;
|
||||
case 'oembed-cache' :
|
||||
$return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0';
|
||||
die( $return );
|
||||
@@ -386,6 +396,17 @@ case 'delete-link' :
|
||||
else
|
||||
die('0');
|
||||
break;
|
||||
case 'delete-menu-item' :
|
||||
$menu_item_id = (int) $_POST['menu-item'];
|
||||
check_admin_referer( 'delete-menu_item_' . $menu_item_id );
|
||||
if ( ! current_user_can( 'switch_themes' ) )
|
||||
die('-1');
|
||||
|
||||
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) )
|
||||
die('1');
|
||||
else
|
||||
die('0');
|
||||
break;
|
||||
case 'delete-meta' :
|
||||
check_ajax_referer( "delete-meta_$id" );
|
||||
if ( !$meta = get_post_meta_by_id( $id ) )
|
||||
@@ -795,6 +816,40 @@ case 'edit-comment' :
|
||||
|
||||
$x->send();
|
||||
break;
|
||||
case 'add-menu-item' :
|
||||
if ( ! current_user_can( 'switch_themes' ) )
|
||||
die('-1');
|
||||
|
||||
check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' );
|
||||
|
||||
require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
|
||||
|
||||
$menu_id = (int) $_POST['menu'];
|
||||
if ( isset( $_POST['menu-item'] ) ) {
|
||||
$item_ids = wp_save_nav_menu_item( $menu_id, $_POST['menu-item'] );
|
||||
} else {
|
||||
$item_ids = array();
|
||||
}
|
||||
|
||||
foreach ( (array) $item_ids as $menu_item_id ) {
|
||||
$menu_obj = get_post( $menu_item_id );
|
||||
if ( ! empty( $menu_obj->ID ) ) {
|
||||
$menu_items[] = wp_setup_nav_menu_item( $menu_obj );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $menu_items ) ) {
|
||||
$args = array(
|
||||
'after' => '',
|
||||
'before' => '',
|
||||
'context' => 'backend',
|
||||
'link_after' => '',
|
||||
'link_before' => '',
|
||||
'walker' => new Walker_Nav_Menu_Edit,
|
||||
);
|
||||
echo walk_nav_menu_tree( $menu_items, 0, (object) $args );
|
||||
}
|
||||
break;
|
||||
case 'add-meta' :
|
||||
check_ajax_referer( 'add-meta' );
|
||||
$c = 0;
|
||||
@@ -1033,6 +1088,16 @@ case 'hidden-columns' :
|
||||
|
||||
die('1');
|
||||
break;
|
||||
case 'menu-quick-search':
|
||||
if ( ! current_user_can( 'switch_themes' ) )
|
||||
die('-1');
|
||||
|
||||
require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
|
||||
|
||||
_wp_ajax_menu_quick_search( $_REQUEST );
|
||||
|
||||
exit;
|
||||
break;
|
||||
case 'meta-box-order':
|
||||
check_ajax_referer( 'meta-box-order' );
|
||||
$order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -110,11 +110,13 @@ div.dashboard-widget-submit {
|
||||
}
|
||||
|
||||
div.tabs-panel,
|
||||
ul.category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs,
|
||||
ul.add-menu-item-tabs li.tabs {
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
ul.category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs,
|
||||
ul.add-menu-item-tabs li.tabs {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
@@ -380,7 +382,8 @@ div.dashboard-widget-submit input:hover,
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
#side-sortables .category-tabs .tabs a {
|
||||
#side-sortables .category-tabs .tabs a,
|
||||
#side-sortables .add-menu-item-tabs .tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
@@ -1467,7 +1470,8 @@ fieldset.inline-edit-col-right .inline-edit-col {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a,
|
||||
#post-body ul.add-menu-item-tabs li.tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -110,11 +110,13 @@ div.dashboard-widget-submit {
|
||||
}
|
||||
|
||||
div.tabs-panel,
|
||||
ul.category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs,
|
||||
ul.add-menu-item-tabs li.tabs {
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
ul.category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs,
|
||||
ul.add-menu-item-tabs li.tabs {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
|
||||
@@ -379,7 +381,8 @@ div.dashboard-widget-submit input:hover,
|
||||
border-color: #dfdfdf;
|
||||
}
|
||||
|
||||
#side-sortables .category-tabs .tabs a {
|
||||
#side-sortables .category-tabs .tabs a,
|
||||
#side-sortables .add-menu-item-tabs .tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
@@ -490,7 +493,9 @@ a,
|
||||
}
|
||||
|
||||
/* Because we don't want visited on these links */
|
||||
body.press-this .tabs a,
|
||||
body.press-this .tabs a:hover {
|
||||
background-color: #fff;
|
||||
border-color: #c6d9e9;
|
||||
border-bottom-color: #fff;
|
||||
color: #d54e21;
|
||||
@@ -1460,7 +1465,8 @@ fieldset.inline-edit-col-right .inline-edit-col {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a,
|
||||
#post-body ul.add-menu-item-tabs li.tabs a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
#menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-controls{float:left;}.add-to-menu{float:right;}.button-controls{margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#create-menu-name{width:159px;}#manage-menu .inside{padding:0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{float:right;width:220px;}.howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;margin-bottom:10px;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .menu-item-title{margin-left:14px;}.list li ul li ul li .menu-item-title{margin-left:28px;}.list li ul li ul li ul li .menu-item-title{margin-left:42px;}.list li ul li ul li ul li ul li .menu-item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .menu-item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl dt{-webkit-border-radius:6px;border-radius:6px;-moz-border-radius:6px;border:1px solid #E6E6E6;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}.menu li dl dt:hover{cursor:move;}.menu li ul li{margin-left:20px;opacity:.7;}.menu li ul li ul li{opacity:.9;}.menu li ul li ul li ul li{opacity:.9;}.menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .menu-item-delete:hover{color:#f00;}#menu-item-settings{display:none;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.button-controls:after,#menu-item-url-wrap:after,#menu-item-name-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;}
|
||||
.nav-edit-wrap{clear:both;}#menu-settings-column{display:block;float:left;width:281px;}#menu-settings-column .inside{padding:0 10px;}#menu-management{float:left;margin-left:15px;}#menu-management .menu-edit{background-color:#fff;border-color:#dfdfdf;border-width:1px;border-style:solid;margin-bottom:20px;padding:0 10px 10px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;-khtml-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;-khtml-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;-khtml-border-top-right-radius:6px;border-top-right-radius:6px;}#menu-management .menu-add-new abbr{font-weight:bold;}#menu-management .menu-tabs{background-color:#fff;border-color:#dfdfdf;border-bottom-color:#fff;}#menu-management .menu-tab-inactive{background-color:#fafafa;border-bottom-color:#fafafa;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-controls{float:left;}.add-to-menu{float:right;}form.processing .add-to-menu{background:url("../images/wpspin_light.gif") no-repeat top center;display:block;height:20px;overflow:hidden;text-align:left;text-indent:-999em;width:20px;}.button-controls{margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#create-menu-name{width:159px;}#manage-menu .inside{padding:0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{float:right;width:220px;}.howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;margin-bottom:10px;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .menu-item-title{margin-left:14px;}.list li ul li ul li .menu-item-title{margin-left:28px;}.list li ul li ul li ul li .menu-item-title{margin-left:42px;}.list li ul li ul li ul li ul li .menu-item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .menu-item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu{padding-top:1em;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl{clear:both;line-height:1.5em;position:relative;}.menu li dl dt{-webkit-border-radius:6px;border-radius:6px;-moz-border-radius:6px;border:1px solid #E6E6E6;clear:both;cursor:move;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}.menu li.deleting dl dt{background-color:#faa;}.menu li .item-title{display:block;height:1em;margin-right:18em;}.menu li div.sortable-placeholder{background:#f5f5f5;border:1px dashed #bbb;margin:10px 0;padding-top:40px;}.menu li dl.sortable-placeholder{background:#f5f5f5;padding-bottom:40px;}.menu li ul li{margin-left:20px;opacity:.7;}.menu li ul li ul li{opacity:.9;}.menu li ul li ul li ul li{opacity:.9;}.menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-order a{font-weight:bold;}body.js .item-order{display:none;}.item-controls .menu-item-delete:hover{color:#f00;}.menu-item-edit-active{display:block;}.menu-item-edit-inactive{display:none;}.add-menu-item-pagelinks{margin:.5em auto;text-align:center;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.button-controls:after,#menu-item-url-wrap:after,#menu-item-name-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;}
|
||||
@@ -8,8 +8,61 @@
|
||||
* @subpackage Administration
|
||||
*/
|
||||
|
||||
.nav-edit-wrap {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
#menu-settings-column {
|
||||
display:block;
|
||||
float:left;
|
||||
width:281px;
|
||||
}
|
||||
|
||||
#menu-settings-column .inside {
|
||||
padding:0 10px;
|
||||
}
|
||||
|
||||
/* Menu Container */
|
||||
#menu-management { clear: both; }
|
||||
#menu-management {
|
||||
float:left;
|
||||
margin-left:15px;
|
||||
}
|
||||
#menu-management .menu-edit {
|
||||
background-color:#fff;
|
||||
border-color: #dfdfdf;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
margin-bottom: 20px;
|
||||
padding:0 10px 10px;
|
||||
-moz-border-radius-bottomleft: 6px;
|
||||
-webkit-border-bottom-left-radius: 6px;
|
||||
-khtml-border-bottom-left-radius: 6px;
|
||||
border-bottom-left-radius: 6px;
|
||||
-moz-border-radius-bottomright: 6px;
|
||||
-webkit-border-bottom-right-radius: 6px;
|
||||
-khtml-border-bottom-right-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
-moz-border-radius-topright: 6px;
|
||||
-webkit-border-top-right-radius: 6px;
|
||||
-khtml-border-top-right-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
|
||||
#menu-management .menu-add-new abbr {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
#menu-management .menu-tabs {
|
||||
background-color:#fff;
|
||||
border-color:#dfdfdf;
|
||||
border-bottom-color:#fff;
|
||||
}
|
||||
|
||||
#menu-management .menu-tab-inactive {
|
||||
background-color:#fafafa;
|
||||
border-bottom-color:#fafafa;
|
||||
}
|
||||
|
||||
#menu-management .inside { padding: 0 10px; }
|
||||
|
||||
/* Button Primary Actions */
|
||||
@@ -21,7 +74,20 @@
|
||||
|
||||
/* Button Secondary Actions */
|
||||
.list-controls { float: left; }
|
||||
.add-to-menu { float: right; }
|
||||
.add-to-menu {
|
||||
float: right;
|
||||
}
|
||||
|
||||
form.processing .add-to-menu {
|
||||
background: url("../images/wpspin_light.gif") no-repeat top center;
|
||||
display:block;
|
||||
height:20px;
|
||||
overflow:hidden;
|
||||
text-align:left;
|
||||
text-indent:-999em;
|
||||
width:20px;
|
||||
}
|
||||
|
||||
.button-controls { margin: 10px 0; }
|
||||
.show-all, .hide-all { cursor: pointer; }
|
||||
.hide-all { display: none; }
|
||||
@@ -61,12 +127,58 @@
|
||||
/* Nav Menu */
|
||||
#menu-container .inside { padding-bottom: 10px; }
|
||||
|
||||
.menu {
|
||||
padding-top:1em;
|
||||
}
|
||||
|
||||
.menu ul { width: 100%; }
|
||||
.menu li { margin: 0; }
|
||||
.menu li dl dt { -webkit-border-radius: 6px; border-radius: 6px; -moz-border-radius: 6px; border: 1px solid #E6E6E6; position: relative; padding-left: 10px; background-color: #f1f1f1; height: 35px; line-height: 35px; }
|
||||
.menu li dl dt:hover { cursor: move; }
|
||||
.menu ul.sub-menu {
|
||||
}
|
||||
.menu li {
|
||||
margin: 0;
|
||||
}
|
||||
.menu li dl {
|
||||
clear:both;
|
||||
line-height:1.5em;
|
||||
position:relative;
|
||||
}
|
||||
.menu li dl dt {
|
||||
-webkit-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border: 1px solid #E6E6E6;
|
||||
clear:both;
|
||||
cursor: move;
|
||||
position: relative;
|
||||
padding-left: 10px;
|
||||
background-color: #f1f1f1;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
}
|
||||
.menu li dl dt:hover {
|
||||
}
|
||||
.menu li.deleting dl dt {
|
||||
background-color:#faa;
|
||||
}
|
||||
|
||||
.menu li .item-title {
|
||||
display:block;
|
||||
height:1em;
|
||||
margin-right:18em;
|
||||
}
|
||||
|
||||
.menu li div.sortable-placeholder {
|
||||
background: #f5f5f5;
|
||||
border: 1px dashed #bbb;
|
||||
margin: 10px 0px;
|
||||
padding-top:40px;
|
||||
}
|
||||
|
||||
.menu li dl.sortable-placeholder {
|
||||
background: #f5f5f5;
|
||||
padding-bottom:40px;
|
||||
}
|
||||
|
||||
.menu li .item-title { }
|
||||
.menu li ul li { margin-left: 20px; opacity: .7; }
|
||||
.menu li ul li ul li { opacity: .9; }
|
||||
.menu li ul li ul li ul li { opacity: .9; }
|
||||
@@ -81,10 +193,30 @@
|
||||
.item-controls { font-size: 11px; position: absolute; right: 15px; top: -1px; }
|
||||
.item-controls a { text-decoration: none; }
|
||||
.item-controls a:hover { cursor: pointer; }
|
||||
.item-controls .item-order a {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
body.js .item-order {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.item-controls .menu-item-delete:hover { color: #ff0000; }
|
||||
|
||||
/* Thickbox */
|
||||
#menu-item-settings { display: none; }
|
||||
/* Menu editing */
|
||||
.menu-item-edit-active {
|
||||
display:block;
|
||||
}
|
||||
|
||||
.menu-item-edit-inactive {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.add-menu-item-pagelinks {
|
||||
margin:.5em auto;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#cancel-save { cursor: pointer; }
|
||||
#cancel-save:hover { color: #fff !important; }
|
||||
#update-menu-item { color: #fff !important; }
|
||||
@@ -94,4 +226,4 @@
|
||||
|
||||
/* Clearfix */
|
||||
.button-controls:after, #menu-item-url-wrap:after, #menu-item-name-wrap:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.button-controls, #menu-item-url-wrap, #menu-item-name-wrap { display: block; }
|
||||
.button-controls, #menu-item-url-wrap, #menu-item-name-wrap { display: block; }
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -298,7 +298,8 @@ td.available-theme {
|
||||
margin-left: 0;
|
||||
margin-right: 120px;
|
||||
}
|
||||
#post-body ul.category-tabs li.tabs {
|
||||
#post-body ul.category-tabs li.tabs,
|
||||
#post-body ul.add-menu-item-tabs li.tabs {
|
||||
-moz-border-radius: 0 3px 3px 0;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
@@ -309,21 +310,25 @@ td.available-theme {
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
#post-body ul.category-tabs {
|
||||
#post-body ul.category-tabs,
|
||||
#post-body ul.add-menu-item-tabs {
|
||||
float: right;
|
||||
text-align: left;
|
||||
margin: 0 0 0 -120px;
|
||||
}
|
||||
#post-body .categorydiv div.tabs-panel,
|
||||
#post-body .taxonomy div.tabs-panel,
|
||||
#post-body #linkcategorydiv div.tabs-panel {
|
||||
margin: 0 120px 0 5px;
|
||||
}
|
||||
/* 1800 - 2000
|
||||
=================================== */
|
||||
#side-sortables .category-tabs li {
|
||||
#side-sortables .category-tabs li,
|
||||
#side-sortables .add-menu-item-tabs li {
|
||||
padding-left: 8px;
|
||||
}
|
||||
.categorydiv ul.categorychecklist ul,
|
||||
.taxonomydiv ul.categorychecklist ul,
|
||||
#linkcategorydiv ul.categorychecklist ul {
|
||||
margin-left: 0;
|
||||
margin-right: 18px;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1959,7 +1959,8 @@ input#link_url {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs {
|
||||
#post-body ul.category-tabs,
|
||||
#post-body ul.add-menu-item-tabs {
|
||||
float: left;
|
||||
width: 120px;
|
||||
text-align: right;
|
||||
@@ -1968,11 +1969,13 @@ input#link_url {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs li {
|
||||
#post-body ul.category-tabs li,
|
||||
#post-body ul.add-menu-item-tabs li {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs li.tabs {
|
||||
#post-body ul.category-tabs li.tabs,
|
||||
#post-body ul.add-menu-item-tabs li.tabs {
|
||||
-moz-border-radius: 3px 0 0 3px;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
-webkit-border-bottom-left-radius: 3px;
|
||||
@@ -1982,12 +1985,16 @@ input#link_url {
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
#post-body ul.category-tabs li.tabs a {
|
||||
#post-body ul.category-tabs li.tabs a,
|
||||
#post-body ul.add-menu-item-tabs li.tabs a {
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.categorydiv div.tabs-panel,
|
||||
.customlinkdiv div.tabs-panel,
|
||||
.posttypediv div.tabs-panel,
|
||||
.taxonomydiv div.tabs-panel,
|
||||
#linkcategorydiv div.tabs-panel {
|
||||
height: 200px;
|
||||
overflow: auto;
|
||||
@@ -1996,25 +2003,40 @@ input#link_url {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
div.tabs-panel-active {
|
||||
display:block;
|
||||
}
|
||||
|
||||
div.tabs-panel-inactive {
|
||||
display:none;
|
||||
}
|
||||
|
||||
#post-body .categorydiv div.tabs-panel,
|
||||
.taxonomy div.tabs-panel,
|
||||
#post-body #linkcategorydiv div.tabs-panel {
|
||||
margin: 0 5px 0 125px;
|
||||
}
|
||||
|
||||
#side-sortables .category-tabs li {
|
||||
#side-sortables .category-tabs li,
|
||||
#side-sortables .add-menu-item-tabs li {
|
||||
display: inline;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
#side-sortables .category-tabs a {
|
||||
#side-sortables .category-tabs a,
|
||||
#side-sortables .add-menu-item-tabs a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#side-sortables .category-tabs {
|
||||
#side-sortables .category-tabs,
|
||||
#side-sortables .add-menu-item-tabs {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.categorydiv ul,
|
||||
.customlinkdiv ul,
|
||||
.posttypediv ul,
|
||||
.taxonomydiv ul,
|
||||
#linkcategorydiv ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
@@ -2025,6 +2047,9 @@ input#link_url {
|
||||
#front-static-pages ul,
|
||||
.inline-editor ul.cat-checklist ul,
|
||||
.categorydiv ul.categorychecklist ul,
|
||||
.customlinkdiv ul.categorychecklist ul,
|
||||
.posttypediv ul.categorychecklist ul,
|
||||
.taxonomydiv ul.categorychecklist ul,
|
||||
#linkcategorydiv ul.categorychecklist ul {
|
||||
margin-left: 18px;
|
||||
}
|
||||
@@ -2040,27 +2065,34 @@ ul.categorychecklist li {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.categorydiv .tabs-panel {
|
||||
.categorydiv .tabs-panel,
|
||||
.customlinkdiv .tabs-panel,
|
||||
.posttypediv .tabs-panel,
|
||||
.taxonomydiv .tabs-panel {
|
||||
border-width: 3px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
ul.category-tabs {
|
||||
ul.category-tabs,
|
||||
ul.add-menu-item-tabs {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
ul.category-tabs li.tabs {
|
||||
ul.category-tabs li.tabs,
|
||||
ul.add-menu-item-tabs li.tabs {
|
||||
border-style: solid solid none;
|
||||
border-width: 1px 1px 0;
|
||||
}
|
||||
|
||||
#post-body .category-tabs li.tabs {
|
||||
#post-body .category-tabs li.tabs,
|
||||
#post-body .add-menu-item-tabs li.tabs {
|
||||
border-style: solid none solid solid;
|
||||
border-width: 1px 0 1px 1px;
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
ul.category-tabs li {
|
||||
ul.category-tabs li,
|
||||
ul.add-menu-item-tabs li {
|
||||
padding: 5px 8px;
|
||||
-moz-border-radius: 3px 3px 0 0;
|
||||
-webkit-border-top-left-radius: 3px;
|
||||
@@ -3705,4 +3737,4 @@ table#available-headers label img {
|
||||
border-width: 1px 1px 0;
|
||||
background-color: #fafafa;
|
||||
color: #c1c1c1;
|
||||
}
|
||||
}
|
||||
|
||||
+684
-250
File diff suppressed because it is too large
Load Diff
+590
-437
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+278
-192
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
/** Load WordPress Administration Bootstrap */
|
||||
require_once( './admin.php' );
|
||||
require_once( 'admin.php' );
|
||||
|
||||
// Load all the nav menu interface functions
|
||||
require_once( ABSPATH . 'wp-admin/includes/nav-menu.php' );
|
||||
@@ -37,9 +37,6 @@ wp_enqueue_script( 'common' );
|
||||
wp_enqueue_script( 'wp-lists' );
|
||||
wp_enqueue_script( 'postbox' );
|
||||
|
||||
// Thickbox
|
||||
add_thickbox();
|
||||
|
||||
// Container for any messages displayed to the user
|
||||
$messages_div = '';
|
||||
|
||||
@@ -53,10 +50,133 @@ $nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0
|
||||
$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'edit';
|
||||
|
||||
switch ( $action ) {
|
||||
case 'add-menu-item':
|
||||
if ( current_user_can( 'switch_themes' ) ) {
|
||||
check_admin_referer( 'add-menu_item', 'menu-settings-column-nonce' );
|
||||
if ( isset( $_REQUEST['menu-item'] ) ) {
|
||||
wp_save_nav_menu_item( $nav_menu_selected_id, $_REQUEST['menu-item'] );
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'move-down-menu-item' :
|
||||
// moving down a menu item is the same as moving up the next in order
|
||||
check_admin_referer( 'move-menu_item' );
|
||||
$menu_item_id = (int) $_REQUEST['menu-item'];
|
||||
$next_item_id = 0;
|
||||
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
|
||||
$menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
|
||||
if ( ! is_wp_error( $menus ) ) {
|
||||
foreach( (array) $menus as $menu_id ) {
|
||||
$move_down_ordered_menu_items = (array) wp_get_nav_menu_items( $menu_id );
|
||||
while ( $next = array_shift( $move_down_ordered_menu_items ) ) {
|
||||
if ( isset( $next->ID ) && $next->ID == $menu_item_id ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $following = array_shift( $move_down_ordered_menu_items ) ) {
|
||||
$next_item_id = (int) $following->ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// fall through to next case
|
||||
case 'move-up-menu-item' :
|
||||
check_admin_referer( 'move-menu_item' );
|
||||
$menu_item_id = empty( $next_item_id ) ? (int) $_REQUEST['menu-item'] : $next_item_id;
|
||||
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
|
||||
$menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
|
||||
if ( ! is_wp_error( $menus ) ) {
|
||||
foreach( (array) $menus as $menu_id ) {
|
||||
$ordered_menu_items = wp_get_nav_menu_items( $menu_id );
|
||||
$menu_item_data = get_post( $menu_item_id , ARRAY_A );
|
||||
|
||||
// setup the data we need in one pass through the array of menu items
|
||||
$dbids_to_orders = array();
|
||||
$orders_to_dbids = array();
|
||||
$objectids_to_dbids = array();
|
||||
$dbids_to_objectids = array();
|
||||
foreach( (array) $ordered_menu_items as $ordered_menu_item_object ) {
|
||||
if ( isset( $ordered_menu_item_object->ID ) ) {
|
||||
if ( isset( $ordered_menu_item_object->menu_order ) ) {
|
||||
$dbids_to_orders[$ordered_menu_item_object->ID] = $ordered_menu_item_object->menu_order;
|
||||
$orders_to_dbids[$ordered_menu_item_object->menu_order] = $ordered_menu_item_object->ID;
|
||||
}
|
||||
|
||||
$possible_object_id = (int) get_post_meta( $ordered_menu_item_object->ID, '_menu_item_object_id', true );
|
||||
if ( ! empty( $possible_object_id ) ) {
|
||||
$dbids_to_objectids[$ordered_menu_item_object->ID] = $possible_object_id;
|
||||
$objectids_to_dbids[$possible_object_id] = $ordered_menu_item_object->ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if this menu item is not first
|
||||
if ( ! empty( $dbids_to_orders[$menu_item_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) ) {
|
||||
|
||||
// if this menu item is a child of the previous
|
||||
if (
|
||||
! empty( $menu_item_data['post_parent'] ) &&
|
||||
isset( $objectids_to_dbids[$menu_item_data['post_parent']] ) &&
|
||||
isset( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) &&
|
||||
( $objectids_to_dbids[$menu_item_data['post_parent']] == $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] )
|
||||
) {
|
||||
|
||||
$parent_db_id = $objectids_to_dbids[$menu_item_data['post_parent']];
|
||||
$parent_data = get_post( $parent_db_id, ARRAY_A );
|
||||
|
||||
if ( ! is_wp_error( $parent_data ) ) {
|
||||
|
||||
// if there is something before the parent, make menu item a child of the parent's parent
|
||||
if ( ! empty( $dbids_to_orders[$parent_db_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$parent_db_id] - 1] ) ) {
|
||||
$menu_item_data['post_parent'] = $parent_data['post_parent'];
|
||||
|
||||
// else there isn't something before the parent
|
||||
} else {
|
||||
$menu_item_data['post_parent'] = 0;
|
||||
}
|
||||
|
||||
// set former parent's [menu_order] to that of menu-item's
|
||||
$parent_data['menu_order'] = $parent_data['menu_order'] + 1;
|
||||
|
||||
// set menu-item's [menu_order] to that of former parent
|
||||
$menu_item_data['menu_order'] = $menu_item_data['menu_order'] - 1;
|
||||
|
||||
// save changes
|
||||
wp_update_post($menu_item_data);
|
||||
wp_update_post($parent_data);
|
||||
}
|
||||
|
||||
// else this menu item is not a child of the previous
|
||||
} elseif ( isset($dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]] ) ) {
|
||||
// just make it a child of the previous; keep the order
|
||||
$menu_item_data['post_parent'] = (int) $dbids_to_objectids[$orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1]];
|
||||
wp_update_post($menu_item_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'delete-menu-item':
|
||||
$menu_item_id = (int) $_REQUEST['menu-item'];
|
||||
|
||||
check_admin_referer( 'delete-menu_item_' . $menu_item_id );
|
||||
|
||||
|
||||
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
|
||||
if ( wp_delete_post( $menu_item_id, true ) ) {
|
||||
|
||||
$messages_div = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>';
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'delete':
|
||||
check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id );
|
||||
|
||||
if ( is_nav_menu($nav_menu_selected_id) ) {
|
||||
if ( is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
$delete_nav_menu = wp_delete_nav_menu( $nav_menu_selected_id );
|
||||
|
||||
if ( is_wp_error($delete_nav_menu) ) {
|
||||
@@ -70,98 +190,73 @@ switch ( $action ) {
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
check_admin_referer( 'update-nav_menu' );
|
||||
check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' );
|
||||
|
||||
// Add Menu
|
||||
if ( isset($_POST['create-menu-button']) ) {
|
||||
if ( 0 == $nav_menu_selected_id ) {
|
||||
if ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) {
|
||||
$add_nav_menu = esc_html( $_POST['create-menu-name'] );
|
||||
$new_menu_title = esc_html( $_POST['menu-name'] );
|
||||
|
||||
if ( $add_nav_menu ) {
|
||||
$add_nav_menu = wp_create_nav_menu( $add_nav_menu );
|
||||
if ( $new_menu_title ) {
|
||||
$_nav_menu_selected_id = wp_update_nav_menu_object( 0, array('menu-name' => $new_menu_title) );
|
||||
|
||||
if ( is_wp_error( $add_nav_menu ) ) {
|
||||
$messages_div = '<div id="message" class="error"><p>' . $add_nav_menu->get_error_message() . '</p></div>';
|
||||
if ( is_wp_error( $_nav_menu_selected_id ) ) {
|
||||
$messages_div = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>';
|
||||
} else {
|
||||
$nav_menu_selected_id = $add_nav_menu->term_id;
|
||||
$nav_menu_selected_title = $add_nav_menu->name;
|
||||
$messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $add_nav_menu->name ) . '</p></div>';
|
||||
$_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id );
|
||||
$nav_menu_selected_id = $_nav_menu_selected_id;
|
||||
$nav_menu_selected_title = $_menu_object->name;
|
||||
$messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $nav_menu_selected_title ) . '</p></div>';
|
||||
}
|
||||
} else {
|
||||
$messages_div = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>';
|
||||
}
|
||||
unset( $add_nav_menu );
|
||||
}
|
||||
|
||||
// update existing menu
|
||||
} else {
|
||||
|
||||
// @todo wrap this into wp_update_nav_menu_object();
|
||||
if ( isset($_POST['menu-name']) ) {
|
||||
$old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A );
|
||||
$args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], );
|
||||
$new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args );
|
||||
$_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
|
||||
|
||||
if ( ! is_wp_error( $_menu_object ) ) {
|
||||
wp_update_nav_menu_object( $nav_menu_selected_id, array( 'menu-name' => $_POST['menu-name'] ) );
|
||||
$nav_menu_selected_title = $_menu_object->name;
|
||||
}
|
||||
|
||||
// Update menu items
|
||||
|
||||
// @todo: wrap update logic into wp_update_nav_menu();
|
||||
$update_count = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0;
|
||||
$update_nav_menu = is_nav_menu( $nav_menu_selected_id );
|
||||
|
||||
if ( !is_wp_error($update_nav_menu) ) {
|
||||
if ( ! is_wp_error( $_menu_object ) ) {
|
||||
$menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
|
||||
|
||||
// Loop through all POST variables
|
||||
for ( $k = 0; $k < $update_count; $k++ ) {
|
||||
// Loop through all the menu items' POST variables
|
||||
foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) {
|
||||
|
||||
// Menu item title can't be blank
|
||||
if ( '' == $_POST['menu-item-title'][$k] )
|
||||
if ( '' == $_POST['menu-item-title'][$_key] )
|
||||
continue;
|
||||
|
||||
$menu_item_db_id = isset( $_POST['menu-item-db-id'][$k] ) ? $_POST['menu-item-db-id'][$k] : 0;
|
||||
$menu_item_object_id = isset( $_POST['menu-item-object-id'][$k] ) ? $_POST['menu-item-object-id'][$k] : 0;
|
||||
$menu_item_object = isset( $_POST['menu-item-object'][$k] ) ? $_POST['menu-item-object'][$k] : '';
|
||||
$menu_item_parent_id = isset( $_POST['menu-item-parent-id'][$k] ) ? $_POST['menu-item-parent-id'][$k] : 0;
|
||||
$menu_item_position = isset( $_POST['menu-item-position'][$k] ) ? $_POST['menu-item-position'][$k] : 0;
|
||||
$menu_item_type = isset( $_POST['menu-item-type'][$k] ) ? $_POST['menu-item-type'][$k] : 'custom';
|
||||
$menu_item_append = isset( $_POST['menu-item-append'][$k] ) ? $_POST['menu-item-append'][$k] : 'custom';
|
||||
$menu_item_title = isset( $_POST['menu-item-title'][$k] ) ? $_POST['menu-item-title'][$k] : '';
|
||||
$menu_item_url = isset( $_POST['menu-item-url'][$k] ) ? $_POST['menu-item-url'][$k] : '';
|
||||
$menu_item_description = isset( $_POST['menu-item-description'][$k] ) ? $_POST['menu-item-description'][$k] : '';
|
||||
$menu_item_attr_title = isset( $_POST['menu-item-attr-title'][$k] ) ? $_POST['menu-item-attr-title'][$k] : '';
|
||||
$menu_item_target = isset( $_POST['menu-item-target'][$k] ) ? $_POST['menu-item-target'][$k] : '';
|
||||
$menu_item_classes = isset( $_POST['menu-item-classes'][$k] ) ? $_POST['menu-item-classes'][$k] : '';
|
||||
$menu_item_xfn = isset( $_POST['menu-item-xfn'][$k] ) ? $_POST['menu-item-xfn'][$k] : '';
|
||||
|
||||
// Populate the menu item object
|
||||
$post = array(
|
||||
'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'ping_status' => 0,
|
||||
'post_author' => $user_ID, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ),
|
||||
'post_title' => $menu_item_title, 'post_excerpt' => $menu_item_attr_title,
|
||||
'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position,
|
||||
'post_content' => $menu_item_description,
|
||||
|
||||
$args = array(
|
||||
'menu-item-db-id' => $_POST['menu-item-db-id'][$_key],
|
||||
'menu-item-object-id' => $_POST['menu-item-object-id'][$_key],
|
||||
'menu-item-object' => $_POST['menu-item-object'][$_key],
|
||||
'menu-item-parent-id' => $_POST['menu-item-parent-id'][$_key],
|
||||
'menu-item-position' => $_POST['menu-item-position'][$_key],
|
||||
'menu-item-type' => $_POST['menu-item-type'][$_key],
|
||||
'menu-item-append' => $_POST['menu-item-append'][$_key],
|
||||
'menu-item-title' => $_POST['menu-item-title'][$_key],
|
||||
'menu-item-url' => $_POST['menu-item-url'][$_key],
|
||||
'menu-item-description' => $_POST['menu-item-description'][$_key],
|
||||
'menu-item-attr-title' => $_POST['menu-item-attr-title'][$_key],
|
||||
'menu-item-target' => $_POST['menu-item-target'][$_key],
|
||||
'menu-item-classes' => $_POST['menu-item-classes'][$_key],
|
||||
'menu-item-xfn' => $_POST['menu-item-xfn'][$_key],
|
||||
);
|
||||
|
||||
// New menu item
|
||||
if ( $menu_item_db_id == 0 ) {
|
||||
$menu_item_db_id = wp_insert_post( $post );
|
||||
$menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args );
|
||||
|
||||
// Update existing menu item
|
||||
} elseif ( isset($menu_items[$menu_item_db_id]) || ( 'custom' == $menu_item_type && 0 != $menu_item_db_id ) ) {
|
||||
$post['ID'] = $menu_item_db_id;
|
||||
wp_update_post( $post );
|
||||
if ( ! is_wp_error( $menu_item_db_id ) && isset( $menu_items[$menu_item_db_id] ) ) {
|
||||
unset( $menu_items[$menu_item_db_id] );
|
||||
}
|
||||
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key($menu_item_type) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_object_id', (int) $menu_item_object_id );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($menu_item_object) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($menu_item_target) );
|
||||
// @todo handle sanitizing multiple classes separated by whitespace.
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_classes', sanitize_html_class($menu_item_classes) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_xfn', sanitize_html_class($menu_item_xfn) );
|
||||
|
||||
// @todo: only save custom link urls.
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw($menu_item_url) );
|
||||
}
|
||||
|
||||
// Remove menu items from the menu that weren't in $_POST
|
||||
@@ -173,8 +268,8 @@ switch ( $action ) {
|
||||
|
||||
do_action( 'wp_update_nav_menu', $nav_menu_selected_id );
|
||||
|
||||
$messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $update_nav_menu->name ) . '</p></div>';
|
||||
unset( $update_nav_menu, $update_count, $menu_items );
|
||||
$messages_div = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $nav_menu_selected_title ) . '</p></div>';
|
||||
unset( $menu_items );
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -184,48 +279,40 @@ switch ( $action ) {
|
||||
$nav_menus = wp_get_nav_menus();
|
||||
|
||||
// Get recently edited nav menu
|
||||
$recently_edited = get_user_option( 'nav_menu_recently_edited' );
|
||||
$recently_edited = (int) get_user_option( 'nav_menu_recently_edited' );
|
||||
|
||||
// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu.
|
||||
if ( !$recently_edited && is_nav_menu($nav_menu_selected_id) ) {
|
||||
if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
$recently_edited = $nav_menu_selected_id;
|
||||
|
||||
// Else if $nav_menu_selected_id is not a menu, but $recently_edited is, grab that one.
|
||||
} elseif ( 0 == $nav_menu_selected_id && is_nav_menu($recently_edited) ) {
|
||||
// Else if $nav_menu_selected_id is not a menu and not requesting that we create a new menu, but $recently_edited is a menu, grab that one.
|
||||
} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && is_nav_menu( $recently_edited ) ) {
|
||||
$nav_menu_selected_id = $recently_edited;
|
||||
|
||||
// Else try to grab the first menu from the menus list
|
||||
} elseif ( 0 == $nav_menu_selected_id && ! empty($nav_menus) ) {
|
||||
} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && ! empty($nav_menus) ) {
|
||||
$nav_menu_selected_id = $nav_menus[0]->term_id;
|
||||
}
|
||||
|
||||
// Update the user's setting
|
||||
if ( $nav_menu_selected_id != $recently_edited && is_nav_menu($nav_menu_selected_id) )
|
||||
if ( $nav_menu_selected_id != $recently_edited && is_nav_menu( $nav_menu_selected_id ) )
|
||||
update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id );
|
||||
|
||||
// If there's a menu, get it's name.
|
||||
if ( !$nav_menu_selected_title && $nav_menu_selected_title = is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
$nav_menu_selected_title = $nav_menu_selected_title->name;
|
||||
// If there's a menu, get its name.
|
||||
if ( ! $nav_menu_selected_title && is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
$_menu_object = wp_get_nav_menu_object( $nav_menu_selected_id );
|
||||
$nav_menu_selected_title = ! is_wp_error( $_menu_object ) ? $_menu_object->name : '';
|
||||
}
|
||||
|
||||
// Create Menu Metabox
|
||||
add_meta_box( 'create-menu', __('Create Menu'), 'wp_nav_menu_create_metabox', 'nav-menus', 'side', 'core' );
|
||||
|
||||
// The user has no menus.
|
||||
if ( !is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
$messages_div = '<div id="message" class="updated"><p>' . __('You do not have any menus. Create a new menu.') . '</p></div>';
|
||||
|
||||
// The theme supports menus
|
||||
} elseif ( current_theme_supports('nav-menus') ) {
|
||||
if ( current_theme_supports('nav-menus') ) {
|
||||
// Register nav menu metaboxes
|
||||
add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'nav-menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) );
|
||||
wp_nav_menu_metaboxes_setup();
|
||||
wp_nav_menu_meta_boxes_setup();
|
||||
|
||||
// The theme does not support menus but supports widgets
|
||||
} elseif ( current_theme_supports('widgets') ) {
|
||||
// Register nav menu metaboxes
|
||||
add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'nav-menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) );
|
||||
wp_nav_menu_metaboxes_setup();
|
||||
wp_nav_menu_meta_boxes_setup();
|
||||
$messages_div = '<div id="message" class="error"><p>' . __('The current theme does not natively support menus, but you can use the “Navigation Menu” widget to add any menus you create here to the theme’s sidebar.') . '</p></div>';
|
||||
|
||||
// The theme supports neither menus nor widgets.
|
||||
@@ -235,114 +322,113 @@ if ( !is_nav_menu( $nav_menu_selected_id ) ) {
|
||||
}
|
||||
|
||||
// Get the admin header
|
||||
require_once( './admin-header.php' );
|
||||
require_once( 'admin-header.php' );
|
||||
?>
|
||||
<div class="wrap">
|
||||
<div class="wrap nav-edit-wrap">
|
||||
<?php screen_icon(); ?>
|
||||
<h2><?php esc_html_e('Menus'); ?></h2>
|
||||
<?php /* OMGWTFBBQ */ ?><div class="error"><p><strong><?php _e('Beta Testers:') ?></strong> <?php _e('This feature is still under construction. You can try it out, but expect it to change in layout and functionality in the second beta release.'); ?></p></div>
|
||||
<?php echo $messages_div; ?>
|
||||
<div class="hide-if-js error"><p><?php _e('You do not have JavaScript enabled in your browser. Please enable it to access the Menus functionality.'); ?></p></div>
|
||||
|
||||
<?php if ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) : ?>
|
||||
<div id="menu-settings-column" class="metabox-holder">
|
||||
|
||||
<?php if ( !empty($nav_menus) && count($nav_menus) > 1 && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
|
||||
<ul class="subsubsub">
|
||||
<?php
|
||||
foreach ( $nav_menus as $_nav_menu ) {
|
||||
$sep = end( $nav_menus ) == $_nav_menu ? '' : ' | ';
|
||||
<form id="nav-menu-meta" action="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-menu-meta" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
|
||||
<input type="hidden" name="action" value="add-menu-item" />
|
||||
<?php wp_nonce_field( 'add-menu_item', 'menu-settings-column-nonce' ); ?>
|
||||
<?php do_meta_boxes( 'nav-menus', 'side', null ); ?>
|
||||
</form>
|
||||
|
||||
if ( $nav_menu_selected_id == $_nav_menu->term_id )
|
||||
echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&menu=' . esc_attr($_nav_menu->term_id) ) .'" class="current">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
|
||||
else
|
||||
echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&menu=' . esc_attr($_nav_menu->term_id) ) .'">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
</div><!-- /#menu-settings-column -->
|
||||
|
||||
<div id="menu-management" class="">
|
||||
<h2>
|
||||
<?php
|
||||
foreach( (array) $nav_menus as $_nav_menu ) :
|
||||
|
||||
?>
|
||||
<a href="<?php
|
||||
echo add_query_arg(
|
||||
array(
|
||||
'action' => 'edit',
|
||||
'menu' => $_nav_menu->term_id,
|
||||
),
|
||||
admin_url( 'nav-menus.php' )
|
||||
);
|
||||
?>" class="menu-tabs<?php
|
||||
if ( $nav_menu_selected_id != $_nav_menu->term_id )
|
||||
echo ' menu-tab-inactive';
|
||||
?>"><?php echo esc_html( $_nav_menu->name ); ?></a>
|
||||
|
||||
<div id="menu-management" class="metabox-holder has-right-sidebar">
|
||||
<form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
|
||||
<?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
|
||||
<?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
|
||||
<?php wp_nonce_field( 'update-nav_menu' ); ?>
|
||||
<input type="hidden" name="action" value="update" />
|
||||
<input type="hidden" name="li-count" id="li-count" value="-1" />
|
||||
<input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
|
||||
<input type="hidden" id="hidden-metaboxes" value="<?php echo wp_initial_nav_menu_meta_boxes(); ?>" />
|
||||
<div id="post-body">
|
||||
<div id="post-body-content">
|
||||
<?php if ( is_nav_menu($nav_menu_selected_id) && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
|
||||
<div id="menu-container" class="postbox">
|
||||
<h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3>
|
||||
<div class="inside">
|
||||
<?php wp_nav_menu( array( 'menu' => $nav_menu_selected_id, 'context' => 'backend' ) ); ?>
|
||||
</div><!-- /.inside -->
|
||||
<!-- /#nav-menu-canvas .postbox-->
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div><!-- /#post-body-content-->
|
||||
</div><!--- /#post-body -->
|
||||
<div id="menu-settings-column" class="inner-sidebar">
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
<a href="<?php
|
||||
echo add_query_arg(
|
||||
array(
|
||||
'action' => 'edit',
|
||||
'menu' => 0,
|
||||
),
|
||||
admin_url( 'nav-menus.php' )
|
||||
);
|
||||
?>" class="menu-tabs menu-add-new<?php
|
||||
if ( 0 != $nav_menu_selected_id )
|
||||
echo ' menu-tab-inactive';
|
||||
?>"><?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?></a>
|
||||
</h2>
|
||||
<div class="menu-edit">
|
||||
<form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
|
||||
<div id="submitpost" class="submitbox">
|
||||
<div id="minor-publishing">
|
||||
<div class="misc-pub-section misc-pub-section-last">
|
||||
<label class="howto" for="menu-name">
|
||||
<span><?php _e('Name'); ?></span>
|
||||
<input id="menu-name" name="menu-name" type="text" class="regular-text menu-item-textbox" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" />
|
||||
<br class="clear" />
|
||||
</label>
|
||||
</div><!--END .misc-pub-section misc-pub-section-last-->
|
||||
<br class="clear" />
|
||||
</div><!--END #misc-publishing-actions-->
|
||||
<div id="major-publishing-actions">
|
||||
|
||||
<?php do_meta_boxes( 'nav-menus', 'side', null ); ?>
|
||||
<?php if ( ! empty( $nav_menu_selected_id ) ) : ?>
|
||||
<div id="delete-action">
|
||||
<a class="submitdelete deletion menu-delete" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?action=delete&menu=' . $nav_menu_selected_id), 'delete-nav_menu-' . $nav_menu_selected_id ); ?>"><?php _e('Delete Menu'); ?></a>
|
||||
</div><!--END #delete-action-->
|
||||
<?php endif; ?>
|
||||
|
||||
</div><!-- /#menu-settings-column -->
|
||||
</form><!--/#update-nav-menu-->
|
||||
<br class="clear" />
|
||||
</div><!-- /.metabox-holder has-right-sidebar-->
|
||||
<div id="publishing-action">
|
||||
<input class="button-primary" name="save_menu" type="submit" value="<?php esc_attr_e('Save Menu'); ?>" />
|
||||
</div><!--END #publishing-action-->
|
||||
<br class="clear" />
|
||||
</div><!--END #major-publishing-actions-->
|
||||
</div><!--END #submitpost .submitbox-->
|
||||
<?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
|
||||
<?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
|
||||
<?php wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); ?>
|
||||
<input type="hidden" name="action" value="update" />
|
||||
<input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
|
||||
<input type="hidden" id="hidden-metaboxes" value="<?php echo wp_initial_nav_menu_meta_boxes(); ?>" />
|
||||
<div id="post-body">
|
||||
<div id="post-body-content">
|
||||
<?php if ( is_nav_menu( $nav_menu_selected_id ) && ( current_theme_supports('nav-menus') || current_theme_supports('widgets') ) ) : ?>
|
||||
<ul class="menu" id="menu-to-edit">
|
||||
<?php
|
||||
$edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id );
|
||||
if ( ! is_wp_error( $edit_markup ) ) {
|
||||
echo $edit_markup;
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
<br class="clear" />
|
||||
</div><!-- /#post-body-content-->
|
||||
</div><!--- /#post-body -->
|
||||
</form><!--/#update-nav-menu-->
|
||||
</div><!-- /.menu-edit -->
|
||||
</div><!-- /#menu-management -->
|
||||
<?php endif; // if menus supported in current theme ?>
|
||||
</div><!-- /.wrap-->
|
||||
|
||||
<div id="menu-item-settings">
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-title">
|
||||
<?php _e( 'Menu Title' ); ?><br />
|
||||
<input type="text" id="edit-menu-item-title" class="widefat" name="edit-menu-item-title" value="" tabindex="1" />
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-url">
|
||||
<?php _e( 'URL' ); ?><br />
|
||||
<input type="text" id="edit-menu-item-url" class="widefat code" name="edit-menu-item-url" value="" tabindex="2" />
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-attr-title">
|
||||
<?php _e( 'Title Attribute' ); ?><br />
|
||||
<input type="text" id="edit-menu-item-attr-title" class="widefat" name="edit-menu-item-attr-title" value="" tabindex="3" />
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-target">
|
||||
<?php _e( 'Link Target' ); ?><br />
|
||||
<select id="edit-menu-item-target" class="widefat" name="edit-menu-item-target" tabindex="4">
|
||||
<option value=""><?php _e('Same window or tab'); ?></option>
|
||||
<option value="_blank"><?php _e('New window or tab'); ?></option>
|
||||
</select>
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-classes">
|
||||
<?php _e( 'CSS Classes (optional)' ); ?><br />
|
||||
<input type="text" id="edit-menu-item-classes" class="widefat code" name="edit-menu-item-classes" value="" tabindex="5" />
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-xfn">
|
||||
<?php _e( 'Link Relationship (XFN) (optional)' ); ?><br />
|
||||
<input type="text" id="edit-menu-item-xfn" class="widefat code" name="edit-menu-item-xfn" value="" tabindex="6" />
|
||||
</label>
|
||||
</p>
|
||||
<p class="description">
|
||||
<label for="edit-menu-item-description">
|
||||
<?php _e( 'Description (optional)' ); ?><br />
|
||||
<textarea id="edit-menu-item-description" class="widefat" rows="3" name="edit-menu-item-description" tabindex="7" /></textarea>
|
||||
<span class="description"><?php _e('The description will be displayed in the menu if the current theme supports it.'); ?></span>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<a id="update-menu-item" class="save button-primary" tabindex="8"><?php _e('Save Changes'); ?></a>
|
||||
<a id="cancel-save" class="submitdelete deletion" tabindex="9"><?php _e('Cancel'); ?></a>
|
||||
</p>
|
||||
<input type="hidden" id="edit-menu-item-id" name="edit-item-id" value="" />
|
||||
</div><!-- /#menu-item-settings-->
|
||||
|
||||
<?php include( './admin-footer.php' ); ?>
|
||||
<?php include( 'admin-footer.php' ); ?>
|
||||
|
||||
@@ -1123,102 +1123,6 @@ class Walker {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create HTML list of nav menu items.
|
||||
*
|
||||
* @package WordPress
|
||||
* @since 3.0.0
|
||||
* @uses Walker
|
||||
*/
|
||||
class Walker_Nav_Menu extends Walker {
|
||||
/**
|
||||
* @see Walker::$tree_type
|
||||
* @since 3.0.0
|
||||
* @var string
|
||||
*/
|
||||
var $tree_type = array( 'post_type', 'taxonomy', 'custom' );
|
||||
|
||||
/**
|
||||
* @see Walker::$db_fields
|
||||
* @since 3.0.0
|
||||
* @todo Decouple this.
|
||||
* @var array
|
||||
*/
|
||||
var $db_fields = array( 'parent' => 'post_parent', 'id' => 'object_id' );
|
||||
|
||||
/**
|
||||
* @see Walker::start_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
*/
|
||||
function start_lvl(&$output, $depth) {
|
||||
$indent = str_repeat("\t", $depth);
|
||||
$output .= "\n$indent<ul class=\"sub-menu\">\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::end_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
*/
|
||||
function end_lvl(&$output, $depth) {
|
||||
$indent = str_repeat("\t", $depth);
|
||||
$output .= "$indent</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::start_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Menu item data object.
|
||||
* @param int $depth Depth of menu item. Used for padding.
|
||||
* @param int $current_page Menu item ID.
|
||||
* @param object $args
|
||||
*/
|
||||
function start_el(&$output, $item, $depth, $args) {
|
||||
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
|
||||
|
||||
$classes = $value = '';
|
||||
if ( 'frontend' == $args->context ) {
|
||||
global $wp_query;
|
||||
|
||||
$classes = array( 'menu-item', 'menu-item-type-'. $item->type, $item->classes );
|
||||
|
||||
if ( 'custom' != $item->object )
|
||||
$classes[] = 'menu-item-object-'. $item->object;
|
||||
|
||||
if ( $item->object_id == $wp_query->get_queried_object_id() )
|
||||
$classes[] = 'current-menu-item';
|
||||
|
||||
// @todo add classes for parent/child relationships
|
||||
|
||||
$classes = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
|
||||
$classes = ' class="' . esc_attr( $classes ) . '"';
|
||||
} else {
|
||||
$value = ' value="' . $item->ID . '"';
|
||||
}
|
||||
|
||||
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $classes .'>' . wp_get_nav_menu_item( $item, $args->context, $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::end_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Page data object. Not used.
|
||||
* @param int $depth Depth of page. Not Used.
|
||||
*/
|
||||
function end_el(&$output, $item, $depth) {
|
||||
$output .= "</li>\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create HTML list of pages.
|
||||
*
|
||||
|
||||
@@ -7,6 +7,160 @@
|
||||
* @since 3.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create HTML list of nav menu items.
|
||||
*
|
||||
* @package WordPress
|
||||
* @since 3.0.0
|
||||
* @uses Walker
|
||||
*/
|
||||
class Walker_Nav_Menu extends Walker {
|
||||
/**
|
||||
* @see Walker::$tree_type
|
||||
* @since 3.0.0
|
||||
* @var string
|
||||
*/
|
||||
var $tree_type = array( 'post_type', 'taxonomy', 'custom' );
|
||||
|
||||
/**
|
||||
* @see Walker::$db_fields
|
||||
* @since 3.0.0
|
||||
* @todo Decouple this.
|
||||
* @var array
|
||||
*/
|
||||
var $db_fields = array( 'parent' => 'post_parent', 'id' => 'object_id' );
|
||||
|
||||
/**
|
||||
* @see Walker::start_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
*/
|
||||
function start_lvl(&$output, $depth) {
|
||||
$indent = str_repeat("\t", $depth);
|
||||
$output .= "\n$indent<ul class=\"sub-menu\">\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::end_lvl()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param int $depth Depth of page. Used for padding.
|
||||
*/
|
||||
function end_lvl(&$output, $depth) {
|
||||
$indent = str_repeat("\t", $depth);
|
||||
$output .= "$indent</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::start_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Menu item data object.
|
||||
* @param int $depth Depth of menu item. Used for padding.
|
||||
* @param int $current_page Menu item ID.
|
||||
* @param object $args
|
||||
*/
|
||||
function start_el(&$output, $item, $depth, $args) {
|
||||
global $wp_query;
|
||||
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
|
||||
|
||||
$classes = $value = '';
|
||||
|
||||
$classes = array( 'menu-item', 'menu-item-type-'. $item->type, $item->classes );
|
||||
|
||||
if ( 'custom' != $item->object )
|
||||
$classes[] = 'menu-item-object-'. $item->object;
|
||||
|
||||
if ( $item->object_id == $wp_query->get_queried_object_id() )
|
||||
$classes[] = 'current-menu-item';
|
||||
|
||||
// @todo add classes for parent/child relationships
|
||||
|
||||
$classes = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
|
||||
$classes = ' class="' . esc_attr( $classes ) . '"';
|
||||
|
||||
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $classes .'>';
|
||||
|
||||
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
|
||||
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
|
||||
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
|
||||
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
|
||||
|
||||
$item_output = $args->before;
|
||||
$item_output .= '<a'. $attributes .'>';
|
||||
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title ) . $args->link_after;
|
||||
$item_output .= '</a>';
|
||||
$item_output .= $args->after;
|
||||
|
||||
$output .= apply_filters( 'wp_get_nav_menu_item', $item_output, $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Walker::end_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Page data object. Not used.
|
||||
* @param int $depth Depth of page. Not Used.
|
||||
*/
|
||||
function end_el(&$output, $item, $depth) {
|
||||
$output .= "</li>\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create HTML list of nav menu input items.
|
||||
*
|
||||
* @package WordPress
|
||||
* @since 3.0.0
|
||||
* @uses Walker_Nav_Menu
|
||||
*/
|
||||
class Walker_Nav_Menu_Checklist extends Walker_Nav_Menu {
|
||||
|
||||
/**
|
||||
* @see Walker::start_el()
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $output Passed by reference. Used to append additional content.
|
||||
* @param object $item Menu item data object.
|
||||
* @param int $depth Depth of menu item. Used for padding.
|
||||
* @param int $current_page Menu item ID.
|
||||
* @param object $args
|
||||
*/
|
||||
function start_el(&$output, $item, $depth, $args) {
|
||||
static $_placeholder;
|
||||
$_placeholder = 0 > $_placeholder ? $_placeholder - 1 : -1;
|
||||
$possible_object_id = isset( $item->post_type ) && 'nav_menu_item' == $item->post_type ? $item->object_id : $_placeholder;
|
||||
$possible_db_id = ( ! empty( $item->ID ) ) && ( 0 < $possible_object_id ) ? (int) $item->ID : 0;
|
||||
|
||||
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
|
||||
|
||||
$output .= $indent . '<li>';
|
||||
$output .= '<label class="menu-item-title">';
|
||||
$output .= '<input type="checkbox" name="menu-item[' . $possible_object_id . '][menu-item-object-id]" value="'. esc_attr( $item->object_id ) .'" />';
|
||||
$output .= $item->title .'</label>';
|
||||
|
||||
// Menu item hidden fields
|
||||
$output .= '<input type="hidden" class="menu-item-db-id" name="menu-item[' . $possible_object_id . '][menu-item-db-id]" value="' . $possible_db_id . '" />';
|
||||
$output .= '<input type="hidden" class="menu-item-object" name="menu-item[' . $possible_object_id . '][menu-item-object]" value="'. esc_attr( $item->object ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-parent-id" name="menu-item[' . $possible_object_id . '][menu-item-parent-id]" value="'. esc_attr( $item->post_parent ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-type" name="menu-item[' . $possible_object_id . '][menu-item-type]" value="'. esc_attr( $item->type ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-append" name="menu-item[' . $possible_object_id . '][menu-item-append]" value="'. esc_attr( $item->append ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-title" name="menu-item[' . $possible_object_id . '][menu-item-title]" value="'. esc_attr( $item->title ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-url" name="menu-item[' . $possible_object_id . '][menu-item-url]" value="'. esc_attr( $item->url ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-append" name="menu-item[' . $possible_object_id . '][menu-item-append]" value="'. esc_attr( $item->append ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-target" name="menu-item[' . $possible_object_id . '][menu-item-target]" value="'. esc_attr( $item->target ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-attr_title" name="menu-item[' . $possible_object_id . '][menu-item-attr_title]" value="'. esc_attr( $item->attr_title ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-description" name="menu-item[' . $possible_object_id . '][menu-item-description]" value="'. esc_attr( $item->description ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-classes" name="menu-item[' . $possible_object_id . '][menu-item-classes]" value="'. esc_attr( $item->classes ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-xfn" name="menu-item[' . $possible_object_id . '][menu-item-xfn]" value="'. esc_attr( $item->xfn ) .'" />';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a navigation menu.
|
||||
*
|
||||
@@ -17,9 +171,6 @@
|
||||
* menu_class - CSS class to use for the div container of the menu list. Defaults to 'menu'.
|
||||
* format - Whether to format the ul. Defaults to 'div'.
|
||||
* fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'.
|
||||
* container - Type of container tag. Avalible options div, p, or nav. Defaults to 'div'.
|
||||
* container_class - Chooses a class for the container.
|
||||
* container_id - Chooses an id for the container.
|
||||
* before - Text before the link text.
|
||||
* after - Text after the link text.
|
||||
* link_before - Text before the link.
|
||||
@@ -33,7 +184,7 @@
|
||||
* @param array $args Arguments
|
||||
*/
|
||||
function wp_nav_menu( $args = array() ) {
|
||||
$defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'echo' => true,
|
||||
$defaults = array( 'menu' => '', 'container' => 'div', 'container_class' => '', 'menu_class' => 'menu', 'echo' => true,
|
||||
'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '',
|
||||
'depth' => 0, 'walker' => '', 'context' => 'frontend' );
|
||||
|
||||
@@ -46,7 +197,7 @@ function wp_nav_menu( $args = array() ) {
|
||||
|
||||
// If we couldn't find a menu based off the name, id or slug,
|
||||
// get the first menu that has items.
|
||||
if ( !$menu ) {
|
||||
if ( ! $menu ) {
|
||||
$menus = wp_get_nav_menus();
|
||||
foreach ( $menus as $menu_maybe ) {
|
||||
if ( wp_get_nav_menu_items($menu_maybe->term_id) ) {
|
||||
@@ -56,9 +207,9 @@ function wp_nav_menu( $args = array() ) {
|
||||
}
|
||||
}
|
||||
|
||||
// If the menu exists, get it's items.
|
||||
if ( $menu && !is_wp_error($menu) )
|
||||
$menu_items = wp_get_nav_menu_items( $menu->term_id, $args->context );
|
||||
// If the menu exists, get its items.
|
||||
if ( $menu && ! is_wp_error($menu) )
|
||||
$menu_items = wp_get_nav_menu_items( $menu->term_id );
|
||||
|
||||
// If no menu was found or if the menu has no items, call the fallback_cb
|
||||
if ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) ) ) {
|
||||
@@ -73,15 +224,15 @@ function wp_nav_menu( $args = array() ) {
|
||||
|
||||
if ( in_array( $args->container, $container_allowedtags ) ) {
|
||||
$class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"';
|
||||
$container_id = $args->container_id ? ' id="' . esc_attr($args->container_id) . '"' : '' ;
|
||||
$nav_menu .= '<'. $args->container . $class . $container_id .'>';
|
||||
$nav_menu .= '<'. $args->container . $class .'>';
|
||||
}
|
||||
|
||||
// Set up the $menu_item variables
|
||||
$sorted_menu_items = array();
|
||||
foreach ( (array) $menu_items as $key => $menu_item )
|
||||
$menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item, 'frontend' );
|
||||
$sorted_menu_items[$menu_item->menu_order] = wp_setup_nav_menu_item( $menu_item );
|
||||
|
||||
$items .= walk_nav_menu_tree( $menu_items, $args->depth, $args );
|
||||
$items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );
|
||||
|
||||
// Attributes
|
||||
$attributes = ' id="menu-' . $menu->slug . '"';
|
||||
@@ -112,83 +263,17 @@ function wp_nav_menu( $args = array() ) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the menu item formatted based on it's context.
|
||||
* Retrieve the HTML list content for nav menu items.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $menu_item The menu item to format.
|
||||
* @param string $context The context to which the menu item will be formatted to.
|
||||
* @param string $args Optional. Args used for the 'template' context.
|
||||
* @return string $output The menu formatted menu item.
|
||||
* @uses Walker_Nav_Menu to create HTML list content.
|
||||
* @since 2.1.0
|
||||
* @see Walker::walk() for parameters and return description.
|
||||
*/
|
||||
function wp_get_nav_menu_item( $menu_item, $context = 'frontend', $args = array() ) {
|
||||
$output = '';
|
||||
switch ( $context ) {
|
||||
case 'frontend':
|
||||
$attributes = ! empty( $menu_item->attr_title ) ? ' title="' . esc_attr( $menu_item->attr_title ) .'"' : '';
|
||||
$attributes .= ! empty( $menu_item->target ) ? ' target="' . esc_attr( $menu_item->target ) .'"' : '';
|
||||
$attributes .= ! empty( $menu_item->xfn ) ? ' rel="' . esc_attr( $menu_item->xfn ) .'"' : '';
|
||||
$attributes .= ! empty( $menu_item->url ) ? ' href="' . esc_attr( $menu_item->url ) .'"' : '';
|
||||
function walk_nav_menu_tree( $items, $depth, $r ) {
|
||||
$walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker;
|
||||
$args = array( $items, $depth, $r );
|
||||
|
||||
$output .= $args->before;
|
||||
$output .= '<a'. $attributes .'>';
|
||||
$output .= $args->link_before . apply_filters( 'the_title', $menu_item->title ) . $args->link_after;
|
||||
$output .= '</a>';
|
||||
$output .= $args->after;
|
||||
|
||||
break;
|
||||
|
||||
case 'backend':
|
||||
$output .= '<dl><dt>';
|
||||
$output .= '<span class="item-title">'. esc_html( $menu_item->title ) .'</span>';
|
||||
$output .= '<span class="item-controls">';
|
||||
$output .= '<span class="item-type">'. esc_html( $menu_item->append ) .'</span>';
|
||||
|
||||
// Actions
|
||||
$output .= '<a class="item-edit thickbox" id="edit-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=540&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | ';
|
||||
$output .= '<a class="item-delete" id="delete-'. esc_attr( $menu_item->ID ) .'" value="'. esc_attr( $menu_item->ID ) .'">'. __('Delete') .'</a>';
|
||||
|
||||
$output .= '</span></dt></dl>';
|
||||
|
||||
// Menu Item Settings
|
||||
$output .= '<input type="hidden" name="menu-item-db-id[]" value="'. esc_attr( $menu_item->ID ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-object-id[]" value="'. esc_attr( $menu_item->object_id ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-object[]" value="'. esc_attr( $menu_item->object ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-parent-id[]" value="'. esc_attr( $menu_item->post_parent ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-position[]" value="'. esc_attr( $menu_item->menu_order ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-type[]" value="'. esc_attr( $menu_item->type ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-title[]" value="'. esc_attr( $menu_item->title ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-url[]" value="'. esc_attr( $menu_item->url ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-description[]" value="'. esc_attr( $menu_item->description ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-classes[]" value="'. esc_attr( $menu_item->classes ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-xfn[]" value="'. esc_attr( $menu_item->xfn ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-attr-title[]" value="'.esc_attr( $menu_item->post_excerpt ) .'" />';
|
||||
$output .= '<input type="hidden" name="menu-item-target[]" value="'. esc_attr( $menu_item->target ) .'" />';
|
||||
break;
|
||||
|
||||
case 'custom':
|
||||
case 'taxonomy':
|
||||
case 'post_type':
|
||||
$output .= '<label class="menu-item-title"><input type="checkbox" id="'. esc_attr( 'menu-item-' . $menu_item->object_id ) .'" value="'. esc_attr( $menu_item->url ) .'" />'. $menu_item->title .'</label>';
|
||||
|
||||
// Menu item hidden fields
|
||||
$output .= '<input type="hidden" class="menu-item-db-id" value="0" />';
|
||||
$output .= '<input type="hidden" class="menu-item-object-id" value="'. esc_attr( $menu_item->object_id ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-object" value="'. esc_attr( $menu_item->object ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-parent-id" value="'. esc_attr( $menu_item->post_parent ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-type" value="'. esc_attr( $menu_item->type ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-title" value="'. esc_attr( $menu_item->title ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-url" value="'. esc_attr( $menu_item->url ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-append" value="'. esc_attr( $menu_item->append ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-target" value="'. esc_attr( $menu_item->target ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-attr_title" value="'. esc_attr( $menu_item->attr_title ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-description" value="'. esc_attr( $menu_item->description ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-classes" value="'. esc_attr( $menu_item->classes ) .'" />';
|
||||
$output .= '<input type="hidden" class="menu-item-xfn" value="'. esc_attr( $menu_item->xfn ) .'" />';
|
||||
break;
|
||||
}
|
||||
|
||||
return apply_filters( 'wp_get_nav_menu_item', $output, $context, $args );
|
||||
return call_user_func_array( array(&$walker, 'walk'), $args );
|
||||
}
|
||||
?>
|
||||
|
||||
?>
|
||||
|
||||
+261
-93
@@ -16,7 +16,22 @@
|
||||
* @return mixed $menu|false Or WP_Error
|
||||
*/
|
||||
function wp_get_nav_menu_object( $menu ) {
|
||||
return is_nav_menu( $menu );
|
||||
if ( ! $menu )
|
||||
return false;
|
||||
|
||||
$menu_obj = get_term( $menu, 'nav_menu' );
|
||||
|
||||
if ( ! $menu_obj )
|
||||
$menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
|
||||
|
||||
if ( ! $menu_obj )
|
||||
$menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
|
||||
|
||||
if ( ! $menu_obj ) {
|
||||
$menu_obj = false;
|
||||
}
|
||||
|
||||
return $menu_obj;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -27,25 +42,18 @@ function wp_get_nav_menu_object( $menu ) {
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param int|string $menu The menu to check
|
||||
* @return mixed Menu Object, if it exists. Else, false or WP_Error
|
||||
* @return bool Whether the menu exists.
|
||||
*/
|
||||
function is_nav_menu( $menu ) {
|
||||
if ( !$menu )
|
||||
if ( ! $menu )
|
||||
return false;
|
||||
|
||||
$menu_obj = wp_get_nav_menu_object( $menu );
|
||||
|
||||
$menu_obj = get_term( $menu, 'nav_menu' );
|
||||
|
||||
if ( !$menu_obj )
|
||||
$menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
|
||||
|
||||
if ( !$menu_obj )
|
||||
$menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
|
||||
|
||||
if ( !$menu_obj ) {
|
||||
$menu_obj = false;
|
||||
}
|
||||
|
||||
return $menu_obj;
|
||||
if ( $menu_obj && ! is_wp_error( $menu_obj ) && ! empty( $menu_obj->term_id ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,7 +104,7 @@ function wp_create_nav_menu( $menu_name, $args = array() ) {
|
||||
*/
|
||||
function wp_delete_nav_menu( $menu ) {
|
||||
$menu = wp_get_nav_menu_object( $menu );
|
||||
if ( !$menu )
|
||||
if ( ! $menu )
|
||||
return false;
|
||||
|
||||
$menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
|
||||
@@ -116,6 +124,151 @@ function wp_delete_nav_menu( $menu ) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the properties of a menu or create a new menu with those properties.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param int $menu_id The ID of the menu
|
||||
* @param array $menu_data The array of menu data.
|
||||
* @return int The menu's ID.
|
||||
*/
|
||||
function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
|
||||
$menu_id = (int) $menu_id;
|
||||
|
||||
$_menu = wp_get_nav_menu_object( $menu_id );
|
||||
|
||||
// menu doesn't already exist
|
||||
if ( ! $_menu || is_wp_error( $_menu ) ) {
|
||||
$_menu = wp_create_nav_menu( $menu_data['menu-name'] );
|
||||
}
|
||||
|
||||
if ( $_menu && isset( $_menu->term_id ) && ! is_wp_error( $_menu ) ) {
|
||||
$args = array(
|
||||
'description' => ( isset( $menu_data['description'] ) ? $menu_data['description'] : '' ),
|
||||
'name' => ( isset( $menu_data['menu-name'] ) ? $menu_data['menu-name'] : '' ),
|
||||
'parent' => ( isset( $menu_data['parent'] ) ? (int) $menu_data['parent'] : 0 ),
|
||||
'slug' => null,
|
||||
);
|
||||
|
||||
$menu_id = (int) $_menu->term_id;
|
||||
|
||||
$update_response = wp_update_term( $menu_id, 'nav_menu', $args );
|
||||
|
||||
if ( ! is_wp_error( $update_response ) ) {
|
||||
return $menu_id;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the properties of a menu item or create a new one.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param int $menu_id The ID of the menu. Required.
|
||||
* @param int $menu_item_db_id The ID of the menu item. If "0", creates a new menu item.
|
||||
* @param array $menu_item_data The menu item's data.
|
||||
* @return int The menu item's database ID or WP_Error object on failure.
|
||||
*/
|
||||
function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array() ) {
|
||||
|
||||
$menu_id = (int) $menu_id;
|
||||
$menu_item_db_id = (int) $menu_item_db_id;
|
||||
|
||||
$menu = wp_get_nav_menu_object( $menu_id );
|
||||
|
||||
if ( ! $menu || is_wp_error( $menu ) ) {
|
||||
return $menu;
|
||||
}
|
||||
|
||||
$menu_items = (array) wp_get_nav_menu_items( $menu_id );
|
||||
|
||||
$count = count( $menu_items );
|
||||
|
||||
$defaults = array(
|
||||
'menu-item-db-id' => $menu_item_db_id,
|
||||
'menu-item-object-id' => 0,
|
||||
'menu-item-object' => '',
|
||||
'menu-item-parent-id' => 0,
|
||||
'menu-item-position' => 0,
|
||||
'menu-item-type' => 'custom',
|
||||
'menu-item-append' => 'custom',
|
||||
'menu-item-title' => '',
|
||||
'menu-item-url' => '',
|
||||
'menu-item-description' => '',
|
||||
'menu-item-attr-title' => '',
|
||||
'menu-item-target' => '',
|
||||
'menu-item-classes' => '',
|
||||
'menu-item-xfn' => '',
|
||||
);
|
||||
|
||||
$args = wp_parse_args( $menu_item_data, $defaults );
|
||||
|
||||
if ( 0 == (int) $args['menu-item-position'] ) {
|
||||
$last_item = array_pop( $menu_items );
|
||||
if ( $last_item && isset( $last_item->ID ) ) {
|
||||
$last_data = get_post( $last_item->ID );
|
||||
if ( ! is_wp_error( $last_data ) && isset( $last_data->menu_order ) ) {
|
||||
$args['menu-item-position'] = 1 + (int) $last_data->menu_order;
|
||||
}
|
||||
|
||||
} else {
|
||||
$args['menu-item-position'] = $count;
|
||||
}
|
||||
}
|
||||
|
||||
// Populate the menu item object
|
||||
$post = array(
|
||||
'menu_order' => $args['menu-item-position'],
|
||||
'ping_status' => 0,
|
||||
'post_content' => $args['menu-item-description'],
|
||||
'post_excerpt' => $args['menu-item-attr-title'],
|
||||
'post_parent' => $args['menu-item-parent-id'],
|
||||
'post_status' => 'publish',
|
||||
'post_title' => $args['menu-item-title'],
|
||||
'post_type' => 'nav_menu_item',
|
||||
'tax_input' => array( 'nav_menu' => $menu->name ),
|
||||
);
|
||||
|
||||
// New menu item
|
||||
if ( 0 == $menu_item_db_id ) {
|
||||
$menu_item_db_id = wp_insert_post( $post );
|
||||
|
||||
// Update existing menu item
|
||||
} else {
|
||||
$post['ID'] = $menu_item_db_id;
|
||||
wp_update_post( $post );
|
||||
}
|
||||
|
||||
if ( 'custom' == $args['menu-item-type'] ) {
|
||||
$args['menu-item-object-id'] = $menu_item_db_id;
|
||||
$args['menu-item-object'] = 'custom';
|
||||
}
|
||||
|
||||
if ( $menu_item_db_id && ! is_wp_error( $menu_item_db_id ) ) {
|
||||
|
||||
$menu_item_db_id = (int) $menu_item_db_id;
|
||||
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key($args['menu-item-type']) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_object_id', (int) $args['menu-item-object-id'] );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($args['menu-item-object']) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($args['menu-item-target']) );
|
||||
// @todo handle sanitizing multiple classes separated by whitespace.
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_classes', sanitize_html_class($args['menu-item-classes']) );
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_xfn', sanitize_html_class($args['menu-item-xfn']) );
|
||||
|
||||
// @todo: only save custom link urls.
|
||||
update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw($args['menu-item-url']) );
|
||||
|
||||
do_action('wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args );
|
||||
}
|
||||
|
||||
return $menu_item_db_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all navigation menu objects.
|
||||
*
|
||||
@@ -127,6 +280,43 @@ function wp_get_nav_menus() {
|
||||
return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sort menu items by the desired key.
|
||||
*
|
||||
* @since 3.0.0
|
||||
* @access private
|
||||
*
|
||||
* @param object $a The first object to compare
|
||||
* @param object $b The second object to compare
|
||||
* @return int -1, 0, or 1 if $a is considered to be respectively less than, equal to, or greater than $b.
|
||||
*/
|
||||
function _sort_nav_menu_items($a, $b) {
|
||||
global $_menu_item_sort_prop;
|
||||
|
||||
if ( empty( $_menu_item_sort_prop ) ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( isset( $a->$_menu_item_sort_prop ) && isset( $b->$_menu_item_sort_prop ) ) {
|
||||
$_a = (int) $a->$_menu_item_sort_prop;
|
||||
$_b = (int) $b->$_menu_item_sort_prop;
|
||||
|
||||
if ( $a->$_menu_item_sort_prop == $b->$_menu_item_sort_prop ) {
|
||||
return 0;
|
||||
} elseif (
|
||||
( $_a == $a->$_menu_item_sort_prop ) &&
|
||||
( $_b == $b->$_menu_item_sort_prop )
|
||||
) {
|
||||
return $_a < $_b ? -1 : 1;
|
||||
} else {
|
||||
return strcmp( $a->$_menu_item_sort_prop, $b->$_menu_item_sort_prop );
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all menu items of a navigation menu.
|
||||
*
|
||||
@@ -139,13 +329,13 @@ function wp_get_nav_menus() {
|
||||
function wp_get_nav_menu_items( $menu, $args = array() ) {
|
||||
$menu = wp_get_nav_menu_object( $menu );
|
||||
|
||||
if ( !$menu )
|
||||
if ( ! $menu )
|
||||
return false;
|
||||
|
||||
|
||||
$items = get_objects_in_term( $menu->term_id, 'nav_menu' );
|
||||
|
||||
if ( ! empty( $items ) ) {
|
||||
$defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' );
|
||||
$defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' );
|
||||
$args = wp_parse_args( $args, $defaults );
|
||||
if ( count( $items ) > 1 )
|
||||
$args['include'] = implode( ',', $items );
|
||||
@@ -155,50 +345,48 @@ function wp_get_nav_menu_items( $menu, $args = array() ) {
|
||||
$items = get_posts( $args );
|
||||
|
||||
if ( ARRAY_A == $args['output'] ) {
|
||||
$output = array();
|
||||
foreach ( $items as $item ) {
|
||||
$output[$item->$args['output_key']] = $item;
|
||||
$GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
|
||||
usort($items, '_sort_nav_menu_items');
|
||||
$i = 1;
|
||||
foreach( $items as $k => $item ) {
|
||||
$items[$k]->$args['output_key'] = $i++;
|
||||
}
|
||||
unset( $items );
|
||||
ksort( $output );
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the HTML list content for nav menu items.
|
||||
* Decorates a menu item object with the shared navigation menu item properties.
|
||||
*
|
||||
* @uses Walker_Nav_Menu to create HTML list content.
|
||||
* @since 2.1.0
|
||||
* @see Walker::walk() for parameters and return description.
|
||||
*/
|
||||
function walk_nav_menu_tree( $items, $depth, $r ) {
|
||||
$walker = ( empty($r->walker) ) ? new Walker_Nav_Menu : $r->walker;
|
||||
$args = array( $items, $depth, $r );
|
||||
|
||||
return call_user_func_array( array(&$walker, 'walk'), $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds all the navigation menu properties to the menu item.
|
||||
* Properties:
|
||||
* - db_id: The DB ID of the this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
|
||||
* - object_id: The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
|
||||
* - type: The family of objects originally represented, such as "post_type" or "taxonomy."
|
||||
* - object: The type of object originally represented, such as "category," "post", or "attachment."
|
||||
* - append: The singular label used to describe this type of menu item.
|
||||
* - parent: The DB ID of the original object's parent object, if any (0 otherwise).
|
||||
* - url: The URL to which this menu item points.
|
||||
* - title: The title of this menu item.
|
||||
* - target: The target attribute of the link element for this menu item.
|
||||
* - attr_title: The title attribute of the link element for this menu item.
|
||||
* - classes: The class attribute value for the link element of this menu item.
|
||||
* - xfn: The XFN relationship expressed in the link of this menu item.
|
||||
* - description: The description of this menu item.
|
||||
*
|
||||
* @since 3.0.0
|
||||
*
|
||||
* @param string $menu_item The menu item to modify
|
||||
* @param string $menu_item_type The menu item type (frontend, custom, post_type, taxonomy).
|
||||
* @param string $menu_item_object Optional. The menu item object type (post type or taxonomy).
|
||||
* @return object $menu_item The modified menu item.
|
||||
* @param object $menu_item The menu item to modify.
|
||||
* @return object $menu_item The menu item with standard menu item properties.
|
||||
*/
|
||||
function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_object = '' ) {
|
||||
switch ( $menu_item_type ) {
|
||||
case 'frontend':
|
||||
function wp_setup_nav_menu_item( $menu_item ) {
|
||||
if ( isset( $menu_item->post_type ) ) {
|
||||
if ( 'nav_menu_item' == $menu_item->post_type ) {
|
||||
$menu_item->db_id = (int) $menu_item->ID;
|
||||
$menu_item->object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
|
||||
$menu_item->object = get_post_meta( $menu_item->ID, '_menu_item_object', true );
|
||||
$menu_item->type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
|
||||
|
||||
|
||||
if ( 'post_type' == $menu_item->type ) {
|
||||
$object = get_post_type_object( $menu_item->object );
|
||||
$menu_item->append = $object->singular_label;
|
||||
@@ -213,7 +401,7 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_
|
||||
$menu_item->append = __('Custom');
|
||||
$menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
|
||||
}
|
||||
|
||||
|
||||
$menu_item->title = $menu_item->post_title;
|
||||
$menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
|
||||
|
||||
@@ -222,31 +410,12 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_
|
||||
|
||||
$menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_classes', true );
|
||||
$menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
|
||||
break;
|
||||
|
||||
case 'custom':
|
||||
} else {
|
||||
$menu_item->db_id = 0;
|
||||
$menu_item->object_id = (int) $menu_item->ID;
|
||||
$menu_item->object = 'custom';
|
||||
$menu_item->type = 'custom';
|
||||
$menu_item->append = __('custom');
|
||||
$menu_item->type = 'post_type';
|
||||
|
||||
$menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
|
||||
$menu_item->description = strip_tags( $menu_item->post_content );
|
||||
|
||||
$menu_item->title = $menu_item->post_title;
|
||||
$menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
|
||||
$menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
|
||||
$menu_item->classes = get_post_meta( $menu_item->ID, '_menu_item_target', true );
|
||||
$menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true );
|
||||
break;
|
||||
|
||||
case 'post_type':
|
||||
$menu_item->db_id = 0;
|
||||
$menu_item->object_id = (int) $menu_item->ID;
|
||||
$menu_item->type = $menu_item_type;
|
||||
|
||||
$object = get_post_type_object( $menu_item_object );
|
||||
$object = get_post_type_object( $menu_item->post_type );
|
||||
$menu_item->object = $object->name;
|
||||
$menu_item->append = strtolower( $object->singular_label );
|
||||
|
||||
@@ -254,33 +423,32 @@ function wp_setup_nav_menu_item( $menu_item, $menu_item_type = null, $menu_item_
|
||||
$menu_item->url = get_permalink( $menu_item->ID );
|
||||
$menu_item->target = '';
|
||||
|
||||
$menu_item->attr_title = '';
|
||||
$menu_item->attr_title = strip_tags( $menu_item->post_excerpt );
|
||||
$menu_item->description = strip_tags( $menu_item->post_content );
|
||||
$menu_item->classes = '';
|
||||
$menu_item->xfn = '';
|
||||
break;
|
||||
}
|
||||
} elseif ( isset( $menu_item->taxonomy ) ) {
|
||||
$menu_item->ID = $menu_item->term_id;
|
||||
$menu_item->db_id = 0;
|
||||
$menu_item->object_id = (int) $menu_item->term_id;
|
||||
$menu_item->post_parent = (int) $menu_item->parent;
|
||||
$menu_item->type = 'taxonomy';
|
||||
|
||||
case 'taxonomy':
|
||||
$menu_item->ID = $menu_item->term_id;
|
||||
$menu_item->db_id = 0;
|
||||
$menu_item->object_id = (int) $menu_item->term_id;
|
||||
$menu_item->post_parent = (int) $menu_item->parent;
|
||||
$menu_item->type = $menu_item_type;
|
||||
$object = get_taxonomy( $menu_item->taxonomy );
|
||||
$menu_item->object = $object->name;
|
||||
$menu_item->append = strtolower( $object->singular_label );
|
||||
|
||||
$object = get_taxonomy( $menu_item_object );
|
||||
$menu_item->object = $object->name;
|
||||
$menu_item->append = strtolower( $object->singular_label );
|
||||
$menu_item->title = $menu_item->name;
|
||||
$menu_item->url = get_term_link( $menu_item, $menu_item->taxonomy );
|
||||
$menu_item->target = '';
|
||||
$menu_item->attr_title = '';
|
||||
$menu_item->description = strip_tags( get_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy ) );
|
||||
$menu_item->classes = '';
|
||||
$menu_item->xfn = '';
|
||||
|
||||
$menu_item->title = $menu_item->name;
|
||||
$menu_item->url = get_term_link( $menu_item, $menu_item_object );
|
||||
$menu_item->target = '';
|
||||
$menu_item->attr_title = '';
|
||||
$menu_item->description = '';
|
||||
$menu_item->classes = '';
|
||||
$menu_item->xfn = '';
|
||||
break;
|
||||
}
|
||||
|
||||
return apply_filters( 'wp_setup_nav_menu_item', $menu_item, $menu_item_type, $menu_item_object );
|
||||
|
||||
return apply_filters( 'wp_setup_nav_menu_item', $menu_item );
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -2190,7 +2190,7 @@ function wp_insert_post($postarr = array(), $wp_error = false) {
|
||||
$data = stripslashes_deep( $data );
|
||||
$where = array( 'ID' => $post_ID );
|
||||
|
||||
if ($update) {
|
||||
if ( $update ) {
|
||||
do_action( 'pre_post_update', $post_ID );
|
||||
if ( false === $wpdb->update( $wpdb->posts, $data, $where ) ) {
|
||||
if ( $wp_error )
|
||||
@@ -2265,7 +2265,7 @@ function wp_insert_post($postarr = array(), $wp_error = false) {
|
||||
|
||||
wp_transition_post_status($data['post_status'], $previous_status, $post);
|
||||
|
||||
if ( $update)
|
||||
if ( $update )
|
||||
do_action('edit_post', $post_ID, $post);
|
||||
|
||||
do_action('save_post', $post_ID, $post);
|
||||
|
||||
@@ -393,12 +393,13 @@ function wp_default_scripts( &$scripts ) {
|
||||
) );
|
||||
|
||||
// Custom Navigation
|
||||
$scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", false, '20100403' );
|
||||
$scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", false, '20100426' );
|
||||
$scripts->localize( 'nav-menu', 'navMenuL10n', array(
|
||||
'custom' => _x('Custom', 'menu nav item type'),
|
||||
'thickbox' => _x('Edit Menu Item', 'Thickbox Title'),
|
||||
'edit' => _x('Edit', 'menu item edit text'),
|
||||
'warnDelete' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ),
|
||||
'warnDeleteMenu' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ),
|
||||
'warnDeleteMenuItem' => __( "You are about to permanently delete this menu item. \n 'Cancel' to stop, 'OK' to delete." ),
|
||||
) );
|
||||
|
||||
$scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array('farbtastic'), '20100321' );
|
||||
@@ -440,13 +441,13 @@ function wp_default_styles( &$styles ) {
|
||||
// Any rtl stylesheets that don't have a .dev version for ltr
|
||||
$no_suffix = array( 'farbtastic' );
|
||||
|
||||
$styles->add( 'wp-admin', "/wp-admin/css/wp-admin$suffix.css", array(), '20100424' );
|
||||
$styles->add( 'wp-admin', "/wp-admin/css/wp-admin$suffix.css", array(), '20100426' );
|
||||
|
||||
$styles->add( 'ie', "/wp-admin/css/ie$suffix.css", array(), '20100219' );
|
||||
$styles->add_data( 'ie', 'conditional', 'lte IE 7' );
|
||||
|
||||
// all colors stylesheets need to have the same query strings (cache manifest compat)
|
||||
$colors_version = '20100418';
|
||||
$colors_version = '20100426';
|
||||
|
||||
// Register "meta" stylesheet for admin colors. All colors-* style sheets should have the same version string.
|
||||
$styles->add( 'colors', true, array(), $colors_version );
|
||||
@@ -472,7 +473,7 @@ function wp_default_styles( &$styles ) {
|
||||
$styles->add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.2' );
|
||||
$styles->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' );
|
||||
$styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' );
|
||||
$styles->add( 'nav-menu', "/wp-admin/css/nav-menu$suffix.css", array(), '20100322' );
|
||||
$styles->add( 'nav-menu', "/wp-admin/css/nav-menu$suffix.css", array(), '20100426' );
|
||||
|
||||
foreach ( $rtl_styles as $rtl_style ) {
|
||||
$styles->add_data( $rtl_style, 'rtl', true );
|
||||
|
||||
Reference in New Issue
Block a user