allow_pages_to_display();
// Post edit page
$check_current_screen = $this->check_current_screen();
if( $check_current_screen == true && in_array( $typenow , $allow_pages ) ){
return true;
}
return false;
}
/**
* Add meta box to posts/pages/custom post types
*/
function atm_register_meta_boxes(){
$result = $this->allow_posts_categories();
$allow_pages = $this->allow_pages_to_display();
if( $result == true ){
add_meta_box( 'atm-link', __( 'Add To Menus', 'atm' ), array( $this , 'atm_link_callback' ), $allow_pages , 'side' );
}
}
/**
* Meta Box To post edit pages
*/
function atm_link_callback(){ ?>
$value ){
update_post_meta( $key , 'atm_access_level' , $value );
}
}
if( !empty( $_POST['atm_menu_roles'] ) ){
foreach( $_POST['atm_menu_roles'] as $keyMenuId => $rolesArray ){
if( !empty( $rolesArray ) ){
update_post_meta( $keyMenuId , 'atm_menu_roles' , $rolesArray );
}
}
}
}
/**
* Added custom walker function
*/
function edit_nav_menu_walker( $walker ) {
return 'Walker_Nav_Menu_Edit_ATM';
}
/**
* Included Walker class
*/
function admin_init_custom_menu(){
include_once( plugin_dir_path( __FILE__ ) . 'class.Walker_Nav_Menu_Edit.php');
}
/**
* Added access level custom field on the menu on the backend
*/
function custom_fields( $item_id, $item, $depth, $args ){
$access_level = get_post_meta( $item_id , 'atm_access_level' , true );
if( empty( $access_level ) || $access_level == 1 ){
$checked_all = 'checked="checked"';
} else {
$checked_all = '';
} ?>
>
get_roles_menu( 'atm_menu_roles[' . $item_id . ']' , $item_id ); ?>
is_edit_page( 'edit' ) == true ){
wp_enqueue_style( 'atm-style', plugins_url( 'css/style.css', __FILE__ ) , array(), '1.0.0', false );
wp_enqueue_script( 'atm-script' , plugins_url( 'js/custom.js', __FILE__ ) , array() , '1.0.0' , false );
wp_enqueue_script( 'jquery-ui-dialog' );
wp_enqueue_style( 'wp-jquery-ui-dialog' );
}
if( $hook == 'nav-menus.php' ){
wp_enqueue_script( 'atm-menu-script' , plugins_url( 'js/menu.js', __FILE__ ) , array() , '1.0.0' , false );
}
}
/**
* Save menu by ajax
*/
function atm_save_menu(){
if( $_POST['action'] != 'atm_save_menu' ){
die;
}
$selected_menu = $_POST['parent_menu'];
if( !empty( $selected_menu ) ){
foreach( $selected_menu as $key1 => $value ){
foreach( $value as $key => $parent_menu_id ){
if( $key != 'menu_id' ){
$selected_menu[$key1][$key];
$this->atm_update_nav_menu_items( $selected_menu[$key1]['menu_id'] , $_POST , $parent_menu_id );
}
/**
* Save menu as top menu
*/
if( $selected_menu[$key1]['menu_id'] == $parent_menu_id && is_numeric( $key ) ){
$this->atm_update_nav_menu_items( $selected_menu[$key1]['menu_id'] , $_POST , 0 );
}
}
}
}
echo 'success';
die;
}
/**
* Add menus to the database
*/
function atm_update_nav_menu_items( $menu_id , $array , $parent_menu_id ){
$menu_title = sanitize_text_field( $array['title'] );
$menu_class = sanitize_text_field( $array['class'] );
$menu_title_attribute = sanitize_text_field( $array['title_attribute'] );
$menu_description = sanitize_text_field( $array['description'] );
$target = !empty( $array['target'] ) ? sanitize_text_field( $array['target'] ) : '';
$object_type = sanitize_text_field( $array['object_type'] );
$access_level = sanitize_text_field( $array['access_level'] );
$atm_roles = !empty( $array['roles'] ) ? $array['roles'] : '';
$open_target = ( $target == 1 ) ? '_blank' : '';
// Check for post or category
switch ( $object_type ) {
case 'post':
$post = get_post( $array['post_id'] );
$object_id = $post->ID;
$menu_item_object = $post->post_type;
$item_type = 'post_type';
break;
case 'category':
$object_id = $array['post_id'];
$cat = get_term( $object_id , '' , ARRAY_A );
$menu_item_object = $cat['taxonomy'] ;
$item_type = 'taxonomy';
break;
default:
# code...
break;
}
// Save new menu
$new_post_id = wp_update_nav_menu_item(
$menu_id,
0,
array(
'menu-item-title' => $menu_title,
'menu-item-classes' => $menu_class,
'menu-item-attr-title' => $menu_title_attribute,
'menu-item-description' => $menu_description,
'menu-item-object' => $menu_item_object,
'menu-item-type' => $item_type,
'menu-item-object-id' => $object_id,
'menu-item-status' => 'publish',
'menu-item-parent-id' => $parent_menu_id,
'menu-item-position' => 0,
'menu-item-target' => $open_target,
)
);
// Added access level
update_post_meta( $new_post_id , 'atm_access_level', $access_level );
if( !empty( $atm_roles ) ){
update_post_meta( $new_post_id , 'atm_menu_roles', $atm_roles );
}
}
/**
* Added icon on the admin bar
*/
function add_custom_scripts(){
$this->show_pro_version_message();
if( $this->check_current_screen() == true ){
$this->success_added_menu();
global $post;
if( !empty( $post ) && is_object( $post ) ){
$title = $post->post_title;
$object_type = 'post';
$object_id = $post->ID;
} ?>
get_names();
$availableRoles = get_post_meta( $item_id, 'atm_menu_roles' , true );
$count = 0;
foreach( $roles as $key => $role ){
if( empty( $availableRoles ) /*&& $this->allow_posts_categories() == false*/ ){ // Show only on the menu manager page?>
role_checked_default( $item_id , $key ); ?>
false ) );
include 'custom_walker.php';
echo '';
}
function get_current_language_menu( $value ){
global $wpdb;
$tablecheck = "SELECT * FROM $wpdb->prefix" . 'icl_translations';
$check_table = $wpdb->get_row( $tablecheck );
if( empty( $check_table ) ){
return true;
} elseif ( !class_exists('SitePress') ) {
$language_code = 'en';
} else {
$language_code = ICL_LANGUAGE_CODE;
}
global $wpdb;
$table = $wpdb->prefix . 'icl_translations';
$results = $wpdb->get_results( "SELECT * FROM {$table}
WHERE `language_code` = '" . $language_code . "'
AND `element_type` = 'tax_nav_menu'
AND `element_id` = {$value->term_id}" , ARRAY_A );
return ( !empty( $results ) ? true : false );
}
/**
* Get all registered menus
*/
function get_custom_menus( $object ){
echo '';
wp_nav_menu( array(
'menu_class' => 'nav-menu',
'menu' => $object->term_id,
'walker' => new ATM_Custom_Nav_Walker(),
) );
}
/**
* Get menu object
*/
function get_menu_object( $menu_name ){
$locations = get_nav_menu_locations();
$menu_id = $locations[ $menu_name ] ;
$term = get_term_by( 'id', $menu_id , 'nav_menu');
return $term;
}
function show_pro_version_message(){
//make sure we are on the backend
if (!is_admin()) return false;
global $pagenow;
global $post;
$allow_pages = array( 'post' , 'page' );
$hide_on_allowed_pages = get_option( 'hide_on_allowed_pages' );
$hide_on_not_allowed_pages = get_option( 'hide_on_not_allowed_pages' );
$hide_on_taxonomies = get_option( 'hide_on_taxonomies' );
// Show on Add new post/page
if( in_array( $pagenow, array( 'post-new.php' ) ) && in_array( $post->post_type , $allow_pages )){
if( $hide_on_allowed_pages == 'off' ){
return;
} ?>
Add To Menus link will be visible after the post/page is saved.
Hide this notice
post_type , $allow_pages ) ){
if( $hide_on_not_allowed_pages == 'off' ){
return;
} ?>
'success' ) );
die;
}
echo json_encode( array( 'result' => 'error' ) );
die;
}
/**
* Check if the page is edit page
* @return boolen
*/
function is_edit_page($new_edit = null){
//make sure we are on the backend
if (!is_admin()) return false;
global $pagenow;
if($new_edit == "edit")
return in_array( $pagenow, array( 'post.php', ) );
elseif($new_edit == "new") //check for new post page
return in_array( $pagenow, array( 'post-new.php' ) );
else //check for either new or edit
return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}
/**
* Check for the edit page
* @return boolen
*/
function check_current_screen(){
if( $this->is_edit_page( 'edit' ) == true ){
return true;
}
return false;
}
function allow_pages_to_display(){
$allow_pages = array( 'page' , 'post' );
return $allow_pages;
}
/**
* Add menu to admin bar
*/
function add_to_menu_link( $wp_admin_bar ){
global $typenow;
$allow_pages = $this->allow_pages_to_display();
// Post edit page
$check_current_screen = $this->check_current_screen();
// category edit page
//$check_category_page = $this->check_category_page();
if( $check_current_screen == true && in_array( $typenow , $allow_pages ) ){
$args = array(
'id' => 'atm_admin_bar',
'title' => 'Add To Menus',
'href' => '#',
'meta' => array(
'class' => 'atm_admin_bar',
'title' => 'Add To Menus'
)
);
$wp_admin_bar->add_node( $args );
}
}
/**
* Exclude menus on the frontend
*/
function exclude_menu_items( $items ) {
$hide_children_of = array();
// Iterate over the items to search and destroy
foreach ( $items as $key => $item ) {
$visible = true;
// hide any item that is the child of a hidden item
if( in_array( $item->menu_item_parent, $hide_children_of ) ){
$visible = false;
$hide_children_of[] = $item->ID; // for nested menus
}
$get_access_level = get_post_meta( $item->ID , 'atm_access_level' , true );
$get_menu_roles = get_post_meta( $item->ID , 'atm_menu_roles' , true );
// check any item that has NMR roles set
if( $visible && !empty( $get_access_level ) ) {
// check all logged in, all logged out, or role
switch( $get_access_level ) {
case '2' :
if( is_user_logged_in() ){
$visible = false;
if( !empty( $get_menu_roles ) ){
foreach( $get_menu_roles as $role ){
if( current_user_can( $role ) ){
$visible = true;
}
}
}
} else {
$visible = false;
}
break;
case '3' :
$visible = ! is_user_logged_in() ? true : false;
break;
default:
$visible = true;
break;
}
}
// add filter to work with plugins that don't use traditional roles
$visible = apply_filters( 'atm_nav_menu_roles_item_visibility', $visible, $item );
// unset non-visible item
if ( ! $visible ) {
$hide_children_of[] = $item->ID; // store ID of item
unset( $items[$key] ) ;
}
}
return $items;
}
}
$add_to_menus = new add_to_menus();