true ), 'object' );
if ( !$post_types )
return false;
$allowed_types = apply_filters('post_types_allowed_in_menus', array('page'));
foreach ( $post_types as $post_type ) {
if ( !in_array($post_type->name, $allowed_types) )
continue;
$id = sanitize_title_with_dashes( $post_type->label );
// delete_transient( "nav_menu_items_{$post_type->name}" );
// delete_transient( "nav_menu_sub_items_{$post_type->name}" );
add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'menus', 'side', 'default', $post_type );
}
}
/**
* Creates metaboxes for any taxonomy menu item.
*
* @since 3.0.0
*/
function wp_nav_menu_taxonomy_metaboxes() {
$taxonomies = get_taxonomies( array( 'show_ui' => true ), 'object' );
if ( !$taxonomies )
return false;
$allowed_types = apply_filters('taxonomies_allowed_in_menus', array('category'));
foreach ( $taxonomies as $tax ) {
if ( !in_array($tax->name, $allowed_types) )
continue;
$id = sanitize_title_with_dashes( $tax->label );
// delete_transient( "nav_menu_items_{$tax->name}" );
// delete_transient( "nav_menu_sub_items_{$tax->name}" );
add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'menus', 'side', 'default', $tax );
}
}
/**
* Displays a metabox for managing the active menu being edited.
*
* @since 3.0.0
*/
function wp_nav_menu_manage_menu_metabox( $object, $menu ) { ?>
'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' );
// Cache the query for a day. @todo: Make sure to flush transient when links are updated.
$query = get_transient( 'menu_item_query_custom_links' );
if ( false == $query ) {
$query = new WP_Query( $args );
set_transient( 'menu_item_query_custom_links', $query, 86400 );
}
?>
$post_type['args']->name, 'post_status' => 'publish' );
if ( 'attachment' == $post_type['args']->name )
$args['post_status'] = 'any';
// Cache the query for a day. @todo: Make sure to flush transient when objects are updated.
$query = get_transient( "nav_menu_items_{$post_type['args']->name}" );
if ( false == $query ) {
$query = new WP_Query( $args );
set_transient( "nav_menu_items_{$post_type['args']->name}", $query, 86400 );
}
if ( !$query->posts )
$error = ''. sprintf( __( 'No %s exists' ), $post_type['args']->label ) .'';
$pt_names = '';
if ( is_array($query->posts) ) {
foreach ( $query->posts as $post ) {
if ( $post->post_title ) {
$pt_names .= htmlentities( $post->post_title ) .'|';
} else {
$pt_names = sprintf( __('No %s exists'), $post_type['args']->label );
}
}
}
$id = sanitize_title_with_dashes( $post_type['args']->label );
?>
posts, 'post_type', $post_type['args']->name ); ?>
0, 'orderby' => 'name', 'order' => 'ASC',
'hide_empty' => false, 'include_last_update_time' => false, 'hierarchical' => 1, 'exclude' => '',
'include' => '', 'number' => '', 'pad_counts' => false
);
// Cache the query for a day. @todo: Make sure to flush transient when terms are updated.
$terms = get_transient( "nav_menu_items_{$taxonomy['args']->name}" );
if ( false == $terms ) {
$terms = get_terms( $taxonomy['args']->name, $args );
set_transient( "nav_menu_items_{$taxonomy['args']->name}", $terms, 86400 );
}
if ( !$terms )
$error = ''. sprintf( __( 'No %s exists' ), $taxonomy['args']->label ) .'';
$term_names = '';
if ( is_array($terms) ) {
foreach ( $terms as $term ) {
if ( $term->name ) {
$term_names .= htmlentities( $term->name ) .'|';
} else {
$term_names = sprintf( __('No %s exists'), $taxonomy['args']->label );
}
}
}
$id = sanitize_title_with_dashes( $taxonomy['args']->label );
?>
post_parent) )
$menu_item->post_parent = $menu_item->parent;
// Cleanest way to get all attachements
if ( 'attachment' == $object )
$menu_item->post_parent = 0;
if ( 0 == $menu_item->post_parent ) {
// Setup the menu item
$menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object );
$attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : '';
$output .= '';
$output .= wp_get_nav_menu_item( $menu_item, $object_type, $object );
$output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object, $context );
$output .= '';
++$i;
}
}
return $output;
}
/**
* Recursive function to retrieve sub menu items.
*
* @since 3.0.0
*
* @param string $childof The Parent ID.
* @param string $object_type The object type.
* @param string $object The object name.
* @return string $output sub menu items.
*/
function wp_get_nav_menu_sub_items( $childof, $object_type, $object = null, $context = 'frontend' ) {
$args = array( 'child_of' => $childof, 'parent' => $childof, 'hide_empty' => false, );
switch ( $object_type ) {
case 'post_type':
$hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) );
if ( in_array( $object, $hierarchical_post_types ) ) {
$args['post_type'] = $object;
$sub_menu_items = get_pages( $args );
} else {
$sub_menu_items = array();
}
break;
case 'taxonomy':
if ( is_taxonomy_hierarchical( $object ) ) {
$sub_menu_items = get_terms( $object, $args );
} else {
$sub_menu_items = array();
}
break;
default:
$sub_menu_items = array();
break;
}
$output = '';
$i = 1;
if ( !empty($sub_menu_items) && !is_wp_error($sub_menu_items) ) {
$output .= '';
}
return $output;
}
?>