function sync_menu_translations($menu_trans_data, $menus) { global $wpdb; foreach ($menu_trans_data as $menu_id => $translations) { foreach ($translations as $language => $name) { $_POST['icl_translation_of'] = $wpdb->get_var($wpdb->prepare("\tSELECT term_taxonomy_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM {$wpdb->term_taxonomy}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE term_id=%d\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND taxonomy='nav_menu'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLIMIT 1", $menu_id)); $_POST['icl_nav_menu_language'] = $language; $menu_indentation = ''; $menu_increment = 0; do { $new_menu_id = wp_update_nav_menu_object(0, array('menu-name' => $name . $menu_indentation . ($menu_increment ? $menu_increment : ''))); $menu_increment = $menu_increment != '' ? $menu_increment + 1 : 2; $menu_indentation = '-'; } while (is_wp_error($new_menu_id) && $menu_increment < 10); $menus[$menu_id]['translations'][$language] = array('id' => $new_menu_id); } } return $menus; }
/** * Save the Menu Name when it's changed. * * Menu Name is not previewed because it's designed primarily for admin uses. * * @since Menu Customizer 0.0 * * @param mixed $value Value of the setting. * @param WP_Customize_Setting $setting WP_Customize_Setting instance. */ function menu_customizer_update_menu_name($value, $setting) { if (!$value || !$setting) { return; } // Get the menu id from the setting id. $id = str_replace('nav_menus[', '', $setting->id); $id = str_replace('][name]', '', $id); if (0 == $id) { return; // Avoid creating a new, empty menu. } // Update the menu name with the new $value. wp_update_nav_menu_object($id, array('menu-name' => trim(esc_html($value)))); }
/** * Create/update the nav_menu term for this setting. * * Any created menus will have their assigned term IDs exported to the client * via the customize_save_response filter. Likewise, any errors will be exported * to the client via the customize_save_response() filter. * * To delete a menu, the client can send false as the value. * * @since 4.3.0 * @access protected * * @see wp_update_nav_menu_object() * * @param array|false $value { * The value to update. Note that slug cannot be updated via wp_update_nav_menu_object(). * If false, then the menu will be deleted entirely. * * @type string $name The name of the menu to save. * @type string $description The term description. Default empty string. * @type int $parent The id of the parent term. Default 0. * @type bool $auto_add Whether pages will auto_add to this menu. Default false. * } * @return null|void */ protected function update($value) { if ($this->is_updated) { return; } $this->is_updated = true; $is_placeholder = $this->term_id < 0; $is_delete = false === $value; add_filter('customize_save_response', array($this, 'amend_customize_save_response')); $auto_add = null; if ($is_delete) { // If the current setting term is a placeholder, a delete request is a no-op. if ($is_placeholder) { $this->update_status = 'deleted'; } else { $r = wp_delete_nav_menu($this->term_id); if (is_wp_error($r)) { $this->update_status = 'error'; $this->update_error = $r; } else { $this->update_status = 'deleted'; $auto_add = false; } } } else { // Insert or update menu. $menu_data = wp_array_slice_assoc($value, array('description', 'parent')); $menu_data['menu-name'] = $value['name']; $menu_id = $is_placeholder ? 0 : $this->term_id; $r = wp_update_nav_menu_object($menu_id, wp_slash($menu_data)); $original_name = $menu_data['menu-name']; $name_conflict_suffix = 1; while (is_wp_error($r) && 'menu_exists' === $r->get_error_code()) { $name_conflict_suffix += 1; /* translators: 1: original menu name, 2: duplicate count */ $menu_data['menu-name'] = sprintf(__('%1$s (%2$d)'), $original_name, $name_conflict_suffix); $r = wp_update_nav_menu_object($menu_id, wp_slash($menu_data)); } if (is_wp_error($r)) { $this->update_status = 'error'; $this->update_error = $r; } else { if ($is_placeholder) { $this->previous_term_id = $this->term_id; $this->term_id = $r; $this->update_status = 'inserted'; } else { $this->update_status = 'updated'; } $auto_add = $value['auto_add']; } } if (null !== $auto_add) { $nav_menu_options = $this->filter_nav_menu_options_value((array) get_option('nav_menu_options', array()), $this->term_id, $auto_add); update_option('nav_menu_options', $nav_menu_options); } if ('inserted' === $this->update_status) { // Make sure that new menus assigned to nav menu locations use their new IDs. foreach ($this->manager->settings() as $setting) { if (!preg_match('/^nav_menu_locations\\[/', $setting->id)) { continue; } $post_value = $setting->post_value(null); if (!is_null($post_value) && $this->previous_term_id === intval($post_value)) { $this->manager->set_post_value($setting->id, $this->term_id); $setting->save(); } } // Make sure that any nav_menu widgets referencing the placeholder nav menu get updated and sent back to client. foreach (array_keys($this->manager->unsanitized_post_values()) as $setting_id) { $nav_menu_widget_setting = $this->manager->get_setting($setting_id); if (!$nav_menu_widget_setting || !preg_match('/^widget_nav_menu\\[/', $nav_menu_widget_setting->id)) { continue; } $widget_instance = $nav_menu_widget_setting->post_value(); // Note that this calls WP_Customize_Widgets::sanitize_widget_instance(). if (empty($widget_instance['nav_menu']) || intval($widget_instance['nav_menu']) !== $this->previous_term_id) { continue; } $widget_instance['nav_menu'] = $this->term_id; $updated_widget_instance = $this->manager->widgets->sanitize_widget_js_instance($widget_instance); $this->manager->set_post_value($nav_menu_widget_setting->id, $updated_widget_instance); $nav_menu_widget_setting->save(); $this->_widget_nav_menu_updates[$nav_menu_widget_setting->id] = $updated_widget_instance; } } }
/** * @ticket 33187 * @group navmenus */ public function test_nav_menu_term_should_retain_menu_items_on_split() { global $wpdb; $cat_term = wp_insert_term('Foo Menu', 'category'); $shared_term_id = $cat_term['term_id']; $nav_term_id = wp_create_nav_menu('Foo Menu'); $nav_term = get_term($nav_term_id, 'nav_menu'); // Manually modify because shared terms shouldn't naturally occur. $wpdb->update($wpdb->term_taxonomy, array('term_id' => $shared_term_id), array('term_taxonomy_id' => $nav_term->term_taxonomy_id)); $t1 = wp_insert_term('Random term', 'category'); $cat_menu_item = wp_update_nav_menu_item($shared_term_id, 0, array('menu-item-type' => 'taxonomy', 'menu-item-object' => 'category', 'menu-item-object-id' => $t1['term_id'], 'menu-item-status' => 'publish')); // Updating the menu will split the shared term. $new_nav_menu_id = wp_update_nav_menu_object($shared_term_id, array('description' => 'Updated Foo Menu', 'menu-name' => 'Updated Foo Menu')); $menu = wp_get_nav_menu_object($new_nav_menu_id); $this->assertSame('Updated Foo Menu', $menu->name); $this->assertSame('Updated Foo Menu', $menu->description); $menu_items = wp_get_nav_menu_items($new_nav_menu_id); $this->assertEquals(array($cat_menu_item), wp_list_pluck($menu_items, 'ID')); }
private function create_menu($type) { $menu_name = $type == 'vmenu' ? 'Sample VMenu' : 'Sample HMenu'; for ($i = 0;; $i++) { $_possible_existing = get_term_by('name', $menu_name . ($i ? ' #' . $i : ''), 'nav_menu'); if (!$_possible_existing || is_wp_error($_possible_existing) || !isset($_possible_existing->term_id)) { break; } } $page_to_menu_ids = array(); $nav_menu_selected_id = wp_update_nav_menu_object(0, array('menu-name' => $menu_name . ($i ? ' #' . $i : ''))); if (!is_wp_error($nav_menu_selected_id)) { $this->sample_data['menu'][] = $nav_menu_selected_id; foreach ($this->menu[$type] as $menu_item_data) { if (0 != $menu_item_data['menu-item-parent-id']) { if (isset($page_to_menu_ids[$menu_item_data['menu-item-parent-id']])) { $menu_item_data['menu-item-parent-id'] = $page_to_menu_ids[$menu_item_data['menu-item-parent-id']]; } else { $menu_item_data['menu-item-parent-id'] = 0; } } $menu_item_id = wp_update_nav_menu_item($nav_menu_selected_id, 0, $menu_item_data); $page_to_menu_ids[$menu_item_data['menu-item-object-id']] = $menu_item_id; } $this->{$type . '_id'} = $nav_menu_selected_id; } if ('hmenu' == $type) { $nav_menu_locations = get_theme_mod('nav_menu_locations'); $nav_menu_locations['primary-menu'] = $nav_menu_selected_id; set_theme_mod('nav_menu_locations', $nav_menu_locations); } }
function _do_the_sync($data) { global $sitepress, $wpdb; if (isset($data['menu_translation']) && is_array($data['menu_translation'])) { foreach ($data['menu_translation'] as $menuinfo) { list($original_menu_id, $language, $menu_name) = explode('#', $menuinfo); $menu_name = urldecode($menu_name); $_POST['icl_translation_of'] = $original_menu_id; $_POST['icl_nav_menu_language'] = $language; $new_menu_id = wp_update_nav_menu_object(0, array('menu-name' => $menu_name)); $new_menus[$original_menu_id][$language] = $new_menu_id; } } if (isset($data['del']) && is_array($data['del'])) { foreach ($data['del'] as $iteminfo) { list($menu_id, $item_id) = explode('#', $iteminfo); wp_delete_post($item_id, true); } } if (isset($data['add']) && is_array($data['add'])) { foreach ($data['add'] as $iteminfo) { list($menu_id, $object_id, $ob_type, $parent_id) = explode('#', $iteminfo); if (!is_numeric($menu_id)) { $exp = explode('-', $menu_id); $menu_id = $new_menus[$exp[1]][$exp[2]]; } global $wp_post_types; if (taxonomy_exists($ob_type)) { $menu_obj = get_term($object_id, $ob_type); $menu_item_type = 'taxonomy'; } elseif (in_array($ob_type, array_keys($wp_post_types))) { $menu_obj = get_post($object_id); $menu_item_type = 'post_type'; } $menu_tax_id = $wpdb->get_var($wpdb->prepare("\r\r\n SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'", $new_menu_id)); $_ldetails = $sitepress->get_element_language_details($menu_tax_id, 'tax_nav_menu'); $language = $_ldetails->language_code; $menudata = array('menu-item-db-id' => 0, 'menu-item-object-id' => $object_id, 'menu-item-object' => $ob_type, 'menu-item-parent-id' => 0, 'menu-item-position' => 0, 'menu-item-type' => $menu_item_type, 'menu-item-title' => '', 'menu-item-url' => '', 'menu-item-description' => '', 'menu-item-attr-title' => '', 'menu-item-target' => '', 'menu-item-classes' => '', 'menu-item-xfn' => '', 'menu-item-status' => 'publish'); $nav_item_id = wp_update_nav_menu_item($menu_id, 0, $menudata); // set language explicitly since the 'wp_update_nav_menu_item' is still TBD $sitepress->set_element_language_details($nav_item_id, 'post_nav_menu_item', null, $language); } // check and set hierarchy foreach ($data['add'] as $iteminfo) { list($menu_id, $object_id, $ob_type, $original_item_parent) = explode('#', $iteminfo); if (!is_numeric($menu_id)) { $exp = explode('-', $menu_id); $menu_id = $new_menus[$exp[1]][$exp[2]]; } global $wp_post_types; if (taxonomy_exists($ob_type)) { $menu_obj = get_term($object_id, $ob_type); $menu_item_type = 'taxonomy'; } elseif (in_array($ob_type, array_keys($wp_post_types))) { $menu_obj = get_post($object_id); $menu_item_type = 'post_type'; } if (!$original_item_parent) { //get original object $original_object = icl_object_id($object_id, $ob_type, false, $sitepress->get_default_language()); // get item id of original object in original menu $original_menu_id = icl_object_id($menu_id, 'nav_menu', false, $sitepress->get_default_language()); $original_item_id = $wpdb->get_var($wpdb->prepare("\r\r\n SELECT p.post_id FROM {$wpdb->postmeta} p\r\r\n JOIN {$wpdb->term_relationships} r ON r.object_id = p.post_id\r\r\n JOIN {$wpdb->term_taxonomy} x ON r.term_taxonomy_id = x.term_taxonomy_id AND taxonomy = 'nav_menu'\r\r\n JOIN {$wpdb->terms} m ON m.term_id = x.term_id\r\r\n WHERE meta_key='_menu_item_object_id' AND meta_value=%d AND m.term_id=%d", $original_object, $original_menu_id)); $original_item_parent = get_post_meta($original_item_id, '_menu_item_menu_item_parent', true); } if ($original_item_parent) { $original_item_parent_object_id = get_post_meta($original_item_parent, '_menu_item_object_id', true); $parent_ob_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $original_item_parent_object_id)); $item_parent_object_id = icl_object_id($original_item_parent_object_id, $parent_ob_type, false, $language); $item_parent = $wpdb->get_var($wpdb->prepare("\r\r\n SELECT p.post_id FROM {$wpdb->postmeta} p\r\r\n JOIN {$wpdb->term_relationships} r ON r.object_id = p.post_id\r\r\n JOIN {$wpdb->term_taxonomy} x ON r.term_taxonomy_id = x.term_taxonomy_id AND taxonomy = 'nav_menu'\r\r\n JOIN {$wpdb->terms} m ON m.term_id = x.term_id\r\r\n WHERE meta_key='_menu_item_object_id' AND meta_value=%d AND m.term_id=%d\r\r\n ", $item_parent_object_id, $menu_id)); $item_id = $wpdb->get_var($wpdb->prepare("\r\r\n SELECT p.post_id FROM {$wpdb->postmeta} p\r\r\n JOIN {$wpdb->term_relationships} r ON r.object_id = p.post_id\r\r\n JOIN {$wpdb->term_taxonomy} x ON r.term_taxonomy_id = x.term_taxonomy_id AND taxonomy = 'nav_menu'\r\r\n JOIN {$wpdb->terms} m ON m.term_id = x.term_id\r\r\n WHERE meta_key='_menu_item_object_id' AND meta_value=%d AND m.term_id=%d\r\r\n ", $object_id, $menu_id)); update_post_meta($item_id, '_menu_item_menu_item_parent', $item_parent); } } } }
function blog_creation($blog_id) { // Muda para o tema pensando direito caso já não esteja nesse tema switch_to_blog(ID_BLOG_PENSANDO_DIREITO); // Pega os dados dos menus do tema anterior $menus = wp_get_nav_menus(); foreach ($menus as $menu) { $menu->items = wp_get_nav_menu_items($menu->term_id); foreach ($menu->items as $item) { // Se for uma página ou post type pega o post original if ($item->type == 'post_type') { $item->orginal_post = get_post((int) $item->object_id); } } } // Troca a conexão para salvar o menu no novo blog switch_to_blog($blog_id); foreach ($menus as $menu) { //$menu_id = wp_create_nav_menu($menu->name); $menu_id = wp_update_nav_menu_object(0, array('menu-name' => $menu->name, 'menu-parent' => $menu->parent, 'menu-description' => $menu->description)); if (isset($menu->items)) { foreach ($menu->items as $item) { // Se for um menu para um post cria o post no novo blog if ($item->type == 'post_type') { $data = array('post_title' => $item->orginal_post->post_title, 'post_content' => $item->orginal_post->post_content, 'post_status' => $item->orginal_post->post_status, 'post_type' => $item->orginal_post->post_type); $new_post_id = wp_insert_post($data); $item->object_id = is_int($new_post_id) ? $new_post_id : 0; } // Insere o item no menu wp_update_nav_menu_item($menu_id, 0, array('menu-item-title' => $item->title, 'menu-item-classes' => implode(" ", $item->classes), 'menu-item-url' => $item->url, 'menu-item-status' => $item->post_status, 'menu-item-object-id' => (int) $item->object_id, 'menu-item-object' => $item->object, 'menu-item-type' => $item->type)); } } } restore_current_blog(); }
/** * Creates a navigation menu. * * Note that `$menu_name` is expected to be pre-slashed. * * @since 3.0.0 * * @param string $menu_name Menu name. * @return int|WP_Error Menu ID on success, WP_Error object on failure. */ function wp_create_nav_menu($menu_name) { // expected_slashed ($menu_name) return wp_update_nav_menu_object(0, array('menu-name' => $menu_name)); }
protected function import_menu($menu) { $_menu = $menu['menu']; if (is_nav_menu($menu['menu']['slug'])) { $local_menu = wp_get_nav_menu_object($menu['menu']['slug']); $menu_id = $local_menu->term_id; $update = true; if (!empty($local_menu)) { $local_menu = new cfd_menu($menu['menu']['slug']); } } else { $menu_id = 0; $update = false; } $insert_menu_id = wp_update_nav_menu_object($menu_id, array('menu-name' => $menu['menu']['name'], 'description' => $menu['menu']['description'], 'slug' => $menu['menu']['slug'])); if (is_wp_error($insert_menu_id)) { $this->add_import_message('menus', '__error__', sprintf(__('Menu import failed for menu "%s". Error: ', 'cf-deploy'), $menu['menu']['name']) . $insert_menu_id->get_error_message()); return false; } // nuke existing menu items, trust me, its easier this way if ($update) { // Taken directly from wp_delete_nav_menu, wp-includes/nav-menu.php $menu_objects = get_objects_in_term($insert_menu_id, 'nav_menu'); if (!empty($menu_objects)) { foreach ($menu_objects as $item) { wp_delete_post($item); } } } // handle menu items if (!empty($menu['items'])) { $this->menu_item_parent_map = array(); $processed_items = 0; foreach ($menu['items'] as $item) { if ($this->import_menu_item($item, $insert_menu_id)) { $processed_items++; } } } // log rollback state $item_change['menus'][$menu['menu']['slug']] = 'new'; if (!empty($local_menu)) { $item_change['menus'][$menu['menu']['slug']] = $local_menu->get_data_for_transit(); } $this->log_item_change($item_change); return $processed_items == count($menu['items']); }
public function importMenu($menu) { wp_delete_nav_menu($menu['menu-name']); $newMenu = wp_update_nav_menu_object(0, $menu); if (is_wp_error($newTerm)) { return $newTerm; } $this->registry->set('term', $menu['id'], (int) $newMenu); foreach ($menu['items'] as $menuItem) { $existing = $this->registry->get('post', $menuItem['id']); if (is_nav_menu_item($existing)) { wp_delete_post($existing, true); } if ('taxonomy' == $menuItem['menu-item-type']) { $menuItem['menu-item-object-id'] = $this->registry->get('term', $menuItem['menu-item-object-id']); } elseif ('post_type' == $menuItem['menu-item-type']) { $menuItem['menu-item-object-id'] = $this->registry->get('post', $menuItem['menu-item-object-id']); } if (0 != (int) $menuItem['menu-item-parent-id']) { $menuItem['menu-item-parent-id'] = $this->registry->get('post', $menuItem['menu-item-parent-id']); if (is_null($menuItem['menu-item-parent-id'])) { continue; } } $newMenuItem = wp_update_nav_menu_item($newMenu, 0, $menuItem); if (is_wp_error($newMenuItem)) { return $newMenuItem; } $this->registry->set('post', $menuItem['id'], (int) $newMenuItem); } $this->message = sprintf(__('Creating menus...', '__x__'), $menu['menu-name']); return true; }
function sn_scoutnet_api_group_html_page() { $zeestr = ''; $zee = 'n'; $akabestr = ''; $akabe = 'n'; $verhuurstr = ''; $verhuurstrY = ''; $verhuurstrN = ''; $verhuur = '-'; $hasaddressstr = ''; $hasaddress = 'n'; $streetstr = ''; $latstr = ''; $lngstr = ''; $verhuurstr2 = ''; $str_urllist = ''; $str_oldurllist = ''; $devkey = "*****@*****.**"; $options = get_option('sn_scoutnet_api'); $secret = $options['apigroupkey']; $accountid = $options['accountid']; $appkey = substr($secret, 0, 6); $dir = plugin_dir_path(__FILE__); //print_r($_POST); ?> <script type="text/javascript"> var templateDir = "<?php echo SN_API_PLUGIN_URL; ?> "; </script> <?php if (isset($_POST['sn3_submit_old'])) { try { $apicall = new Scoutnet_API_Call('group', $devkey, $appkey, $secret, false); $method = 'GET'; $endpoint = 'sections/' . get_option('sn_accountid') . '/?filter=name:name_url'; $call = $apicall->run($endpoint, $method, null); //echo "ANSWER:<br />"; //var_dump($call); if ($call['decoded']['head']['status'] == 1) { $sections = $call['decoded']['body']['data']; foreach ($sections as $section) { echo $section['name']; } } else { echo "<div class=\"error\">{$call['decoded']['head']['error_message']}<br /><br />Is de secret key correct? Contacteer info@scoutnet.be</div>"; } } catch (Exception $e) { echo '<div class="error">' . $e->getMessage() . '</div>'; } function my_register_navs() { register_nav_menus(array('takken-menu' => __('Takken Menu'))); } add_action('init', 'my_register_navs'); /* $locations = get_nav_menu_locations(); var_dump($locations); $menu_name = 'Hoofdmenu'; if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) { $menu = wp_get_nav_menu_object( $locations[ $menu_name ] ); $menu_items = wp_get_nav_menu_items($menu->term_id); $menu_list = '<ul id="menu-' . $menu_name . '">'; foreach ( (array) $menu_items as $key => $menu_item ) { $title = $menu_item->title; $url = $menu_item->url; $menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>'; } $menu_list .= '</ul>'; } else { $menu_list = '<ul><li>Menu "' . $menu_name . '" not defined.</li></ul>'; } // $menu_list now ready to output if ( !is_nav_menu( 'Takken Menu' )) { $menu_id = wp_create_nav_menu( 'Takken Menu' ); $menu = array( 'menu-item-type' => 'custom', 'menu-item-url' => get_home_url('/'),'menu-item-title' => 'Home', 'menu-item-status' => 'publish' ); wp_update_nav_menu_item( $menu_id, 0, $menu ); } */ // Create the menus $tak_menu = array('menu-name' => 'Takken Menu', 'description' => 'A navigation menu for this website'); $takken_menu = wp_update_nav_menu_object($menu_id, $tak_menu); //var_dump($takken_menu); // Set the menus to appear in the proper theme locations ??? $locations = get_theme_mod('nav_menu_locations'); //var_dump($locations); $locations['header-menu'] = $takken_menu; set_theme_mod('nav_menu_locations', $locations); //var_dump($locations); // todo categoriën aanmaken // todo pages /takken/welpen/ aanmaken $parent_page = get_page_by_title('Takken'); //if ( is_page($parent_page->ID) ){ $parent_ID = $parent_page->ID; foreach ($sections as $section) { $page_groep_title = $section['name']; $new_page_template = 'takken-section-template.php'; $page_groepen = get_page_by_title($page_groep_title); //wp_delete_post($page_groepen->ID); if (!$page_groepen) { // Create post object $_p = array(); $_p['post_title'] = $page_groep_title; $_p['post_content'] = "Vul hier aan. (info over de leiding en activiteiten wordt automatisch toegevoegd)"; $_p['post_parent'] = $parent_ID; $_p['post_status'] = 'publish'; $_p['post_type'] = 'page'; $_p['comment_status'] = 'closed'; $_p['ping_status'] = 'closed'; $_p['post_category'] = array(1); // the default 'Uncategorised' //$_p['page_template'] = 'Takken'; //? // Insert the post into the database $page_groep_id = wp_insert_post($_p); if (!empty($new_page_template)) { update_post_meta($page_groep_id, '_wp_page_template', $new_page_template); } // Build menu item $menu_item = array('menu-item-object-id' => $page_groep_id, 'menu-item-parent-id' => 0, 'menu-item-position' => $menu_order, 'menu-item-object' => 'page', 'menu-item-url' => 'sdfsfs', 'menu-item-type' => 'post_type', 'menu-item-status' => 'publish', 'menu-item-title' => $page_groep_title); // Add to nav menu wp_update_nav_menu_item($takken_menu, 0, $menu_item); } else { // the plugin may have been previously active and the page may just be trashed... $page_groep_id = $page_groepen->ID; //make sure the page is not trashed... $page_groepen->post_content = 'nieuwe content'; $page_groepen->post_status = 'publish'; //$page_groepen->page_template = 'Takken'; //? $page_groep_id = wp_update_post($page_groepen); } } //} } //print_r(get_registered_nav_menus()); ?> <div> <h2>Onze groep</h2> <?php try { $apicall = new Scoutnet_API_Call('group', $devkey, $appkey, $secret, false); if (isset($_POST['sn_submit'])) { //echo "POST:<br />"; //print_r($_POST); $method = "PUT"; $endpoint = "lists/" . $options['accountid']; $lat = ""; $lng = ""; $args = array(); if (isset($_POST['groupname'])) { $args['groupname'] = trim($_POST['groupname']); } if (isset($_POST['groupname2'])) { $args['groupname2'] = trim($_POST['groupname2']); } if (isset($_POST['promo'])) { $args['promo'] = trim($_POST['promo']); } if (isset($_POST['street'])) { $args['street'] = trim($_POST['street']); } if (isset($_POST['gem'])) { $args['gem'] = trim($_POST['gem']); } if (isset($_POST['mail'])) { $args['mail'] = trim($_POST['mail']); } if (isset($_POST['tel'])) { $args['tel'] = trim($_POST['tel']); } if (isset($_POST['urllist'])) { $args['urllist'] = trim($_POST['urllist']); } if (isset($_POST['lat'])) { $lat = trim($_POST['lat']); } if (isset($_POST['lng'])) { $lng = trim($_POST['lng']); } if ($lat != "" && $lng != "") { $args['latlng'] = $lat . ':' . $lng; } if (isset($_POST['hasaddress'])) { $args['hasaddress'] = 'y'; } else { $args['hasaddress'] = 'n'; } if (isset($_POST['zee'])) { $args['zee'] = 'y'; } else { $args['zee'] = 'n'; } if (isset($_POST['akabe'])) { $args['akabe'] = 'y'; } else { $args['akabe'] = 'n'; } if (isset($_POST['verhuur'])) { $args['verhuur'] = $_POST['verhuur']; } if (isset($_POST['waar'])) { $args['waar'] = trim($_POST['waar']); } if (isset($_POST['wanneer'])) { $args['wanneer'] = trim($_POST['wanneer']); } if (isset($_POST['lidgeld'])) { $args['lidgeld'] = trim($_POST['lidgeld']); } if (isset($_POST['groupID2'])) { $args['groupID'] = substr(trim($_POST['groupID1']), 0, 3) . substr(trim($_POST['groupID2']), 0, 3); } $args['alert'] = "mailto:jorisp@scoutnet.be"; $args['http_host'] = $_POST['http_host']; $args['auth_user'] = $_POST['auth_user']; try { $call = $apicall->run($endpoint, $method, $args); } catch (Exception $e) { echo '<div class="error">' . $e->getMessage() . '</div>'; } } $args = array(); $method = 'GET'; $endpoint = 'lists/' . $options['accountid']; if (intval($options['accountid']) > 0) { $call = $apicall->run($endpoint, $method, $args); //var_dump($call); // TODO: telkens deze pagina opgevraagd wordt dan gaan we de wordpress option variabele sn_scoutnet_group aanpassen. // update_option( $option, $new_value ); if ($call['decoded']['head']['status'] == 1) { $group = $call['decoded']['body']['data']; foreach ($group['extra'] as $v) { switch (key($v)) { case 'zee': if ($v[key($v)] == 'y') { $zeestr = " checked=\"checked\""; $zee = 'y'; } break; case 'akabe': if ($v[key($v)] == 'y') { $akabestr = " checked=\"checked\""; $akabe = 'y'; } break; case 'verhuur': if ($v[key($v)] == 'y') { $verhuurstrY = " checked=\"checked\""; $verhuur = 'y'; } if ($v[key($v)] == 'n') { $verhuurstrN = " checked=\"checked\""; $verhuur = 'n'; } if ($v[key($v)] == '-') { $verhuur = '-'; } break; case 'promo': $group['promo'] = $v[key($v)]; } } if ($group['hasaddress'] == 'y') { $hasaddressstr = " checked=\"checked\""; $hasaddress = 'y'; } else { $streetstr = " disabled=\"disabled\""; $latstr = " disabled=\"disabled\""; $lngstr = " disabled=\"disabled\""; $verhuurstr2 = " disabled=\"disabled\""; } $group['gem'] = $group['postcode'] . ' ' . $group['city']; $groupID1 = substr($group['groupID'], 0, 3); $groupID2 = substr($group['groupID'], 3, 3); $tmp = explode(':', $group['latlng']); $group['lat'] = $tmp[0]; $group['lng'] = $tmp[1]; unset($tmp); if ($verhuur == 'y') { // TODO GET rent request om lijst op te halen van al de te huren lokalen $lokalen = array(); $method = 'GET'; $endpoint = 'rent/'; try { $rent = $apicall->run($endpoint, $method, null); if ($rent['decoded']['head']['status'] == 1) { $lokalen = $rent['decoded']['body']['data']; //var_dump($lokalen); } else { echo "<div class=\"error\">{$call['decoded']['head']['error_message']}<br /><br />Is de secret key correct? Contacteer info@scoutnet.be</div>"; } } catch (Exception $e) { echo '<div class="error">' . $e->getMessage() . '</div>'; } } //print_r($_SERVER); ?> <form method="post" action=""> <?php wp_nonce_field('update-options'); ?> <input type="hidden" name="http_host" value='<?php echo $_SERVER['HTTP_HOST']; ?> ' /> <input type="hidden" name="auth_user" value='<?php bloginfo('admin_email'); ?> ' /> <input type="hidden" name="orgid" value="1" /> <input type="hidden" name="groupID1" value='<?php echo $groupID1; ?> ' /> <input type="text" name="eenheid" value="Scouts en Gidsen Vlaanderen" maxlength="50" style="width:400px;" readonly="readonly" /><br /> <input type="text" name="groupname" value="<?php echo $group['groupname']; ?> " maxlength="50" style="width:400px;" /> <small>[officieel]</small><br /> <input type="text" name="groupname2" value="<?php echo $group['groupname2']; ?> " maxlength="50" style="width:400px;" /> <small>[alternatieve benaming]</small><br /> <textarea name='promo' style='width:400px;height:80px;'><?php echo $group['promo']; ?> </textarea> <small>[promo tekstje]</small><br /><br /> <b><?php echo $group['section']; ?> </b> <?php echo $groupID1; ?> <input type='text' name='groupID2' value='<?php echo $groupID2; ?> ' maxlength='3' size='5' /> <small>[zeescouts <input type='checkbox' name='zee'<?php echo $zeestr; ?> />]</small> <small>[akabe <input type='checkbox' name='akabe'<?php echo $akabestr; ?> />]</small><br /><br /> <table><tr><td><input type='checkbox' name='hasaddress' value='<?php echo $hasaddress; ?> ' title='uncheck if no address'<?php echo $hasaddressstr; ?> onclick="if(this.checked==true){this.form.street.disabled=false;this.form.lat.disabled=false;this.form.lng.disabled=false;this.form.verhuur[0].disabled=false;this.form.verhuur[1].disabled=false;}else{this.form.street.disabled=true;this.form.lat.disabled=true;this.form.lng.disabled=true;this.form.verhuur[0].disabled=true;this.form.verhuur[1].disabled=true;}"> address: <img src='<?php echo SN_API_PLUGIN_URL; ?> img/arrow_right.gif' width='6' height='6' onclick='showAddress(); return false' style='cursor: pointer; cursor: hand;' title='geocode: put address on map'><br /> <label title="Klik op het zwarte pijlje om de locatie op te zoeken aan de hand van adres en postcode." for="street"><textarea name='street' id='street' rows='2' style='width:300px;height=50px;' ><?php echo $group['street']; ?> </textarea></label><br /> <input type='text' id='gem' name='gem' value="<?php echo $group['gem']; ?> " maxlength='100' autocomplete='off' size='42' style='width:300px' title='geef de postcode en gemeente' /><br /><br /> public email: <br /><input type='text' name='mail' value='<?php echo $group['mail']; ?> ' maxlength='50' /><br /> public tel: <br /><input type='text' name='tel' value='<?php echo $group['tel']; ?> ' maxlength='25' /><br /> public urls: <br /><label title="Geef alle urls die je wilt opnemen op je groepsfiche. Gebruik ';' als scheidingsteken." for="urllist"><input type="text" name="urllist" value="<?php echo $group['urllist']; ?> " maxlength="510" /></label><br /><br /> coordinaten: <small>[scroll to zoom and left mouse click]</small><br /><label title="De geo-coordinaten kan je ingeven door op de kaart te klikken." for="lat"><input type='text' id='lat' name='lat' value='<?php echo $group['lat']; ?> ' maxlength='18'<?php echo $latstr; ?> /></label> latitude<br /> <label title="De geo-coordinaten kan je ingeven door op de kaart te klikken." for="lng"><input type='text' id='lng' name='lng' value='<?php echo $group['lng']; ?> ' maxlength='18'<?php echo $lngstr; ?> /></label> longitude<br /> <br /> </td><td><div id="map" style="width: 500px; height: 350px"></div></td><tr/></table> <fieldset style="width: 250px; padding: 15px; border: solid 1px black; "><legend style="color: black; font-weight: bold;"> Wij verhuren onze lokalen: <a href="http://www.lokalenverhuur.be" target="_blank"><img src='<?php echo SN_API_PLUGIN_URL; ?> img/arrow_right.gif' width='6' height='6' border='0' style='cursor: pointer; cursor: hand;' title='www.lokalenverhuur.be' /></a></legend> YES <input type='radio' name='verhuur' value='y'<?php echo $verhuurstrY; echo $verhuurstr2; ?> /> NO <input type='radio' name='verhuur' value='n'<?php echo $verhuurstrN; echo $verhuurstr2; ?> /><br /> <?php if (count($lokalen) > 0) { foreach ($lokalen as $lokaal) { //echo " <a href=\"http://www.lokalenverhuur.be/lokalen/fiche/scouts-en-gidsen-vlaanderen/{$group['accountname']}/{$lokaal['name_url']}/\" target=\"_blank\">{$lokaal['name']}</a><br />\n"; echo " <a href=\"?page=scoutnet-api-rent&rentid={$lokaal['id']}\">{$lokaal['name']}</a><br />\n"; } } ?> </fieldset> <br /><br /><b>Meer info over de groep:</b> <br /><br /> <?php foreach ($group['extra'] as $v) { switch (key($v)) { case 'waar': echo "waar ? <br /><textarea name='waar' style='width:500px;height:100px;'>{$v[key($v)]}</textarea> <small>[extra info over waar de activiteiten doorgaan]</small><br /><br />\n"; break; case 'wanneer': echo "wanneer ? <br /><textarea name='wanneer' style='width:500px;height:100px;'>{$v[key($v)]}</textarea> <small>[geef aan wanneer de werking plaats heeft]</small><br /><br />\n"; break; case 'lidgeld': echo "lidgeld ? <br /><textarea name='lidgeld' style='width:500px;height:100px;'>{$v[key($v)]}</textarea> <small>[verduidelijk waarvoor er lidgeld gevraagd wordt]</small><br /><br />\n"; break; } } if (isset($group['sections'])) { echo "takwerking ? <img id=\"state9003\" width=\"9\" height=\"9\" onclick=\"exp(9003)\" name=\"state9003\" src=\"" . SN_API_PLUGIN_URL . "img/plus.gif\"><br />"; echo "<span id=\"item9003\" style=\"display:none;\">"; foreach ($group['sections'] as $s) { echo ' ' . $s['section_name'] . '<br />'; } echo "<br />Beheer van de takwerking (toevoegen, verwijderen van de actieve takken) doe je voorlopig via <a href=\"https://my.scoutnet.be/?config\" target=\"_blank\">https://my.scoutnet.be/?config</a> (my-sections) </span><br /><br />\n"; } ?> <input type="submit" name="sn_submit" class="button button-primary" value="Verzenden" /> </form> <br /><br />Deze gegevens worden getoond op <a href="http://www.scoutnet.be/adressen/scouts-en-gidsen-vlaanderen/<?php echo $group['accountname']; ?> /?map" target="_blank">www.scoutnet.be/adressen</a> en <a href="http://www.spinternet.be/adressen/jeugd/scouts-en-gidsen-vlaanderen/<?php echo $group['accountname']; ?> /?map" target="_blank">www.spinternet.be/adressen</a> <?php update_option('sn_scoutnet_group', $group); } else { echo "<div class=\"error\">{$call['decoded']['head']['error_message']}<br /><br />Is de secret key correct? Contacteer info@scoutnet.be</div>"; } } else { echo "<div class=\"error\">Invalid accountid ! Contacteer info@scoutnet.be</div>"; } } catch (Exception $e) { echo '<div class="error">' . $e->getMessage() . '</div>'; } ?> </div> <?php }
add_action('wp_ajax_nopriv_get_new_google_fonts', array('TMM_HelperFonts', 'get_new_google_fonts')); add_action('wp_ajax_nopriv_folio_get_by_folio_id', array('TMM_Portfolio', 'get_by_folio_id')); add_action('wp_ajax_folio_get_masonry_piece', array('TMM_Portfolio', 'get_masonry_piece')); add_action('wp_ajax_nopriv_folio_get_masonry_piece', array('TMM_Portfolio', 'get_masonry_piece')); //-------------------------------------------------------------------------- add_action('admin_menu', 'tmm_theme_add_admin'); add_action('admin_enqueue_scripts', 'tmm_theme_admin_head'); add_action('admin_bar_menu', 'tmm_theme_admin_bar_menu', 89); //***** global $pagenow; if (is_admin() and 'themes.php' == $pagenow and isset($_GET['activated'])) { //***** set default options $theme_was_activated = TMM::get_option('theme_was_activated'); if (!$theme_was_activated) { //***** $menu_id = wp_update_nav_menu_object(0, array('menu-name' => 'Primary Menu')); $theme_mods = get_option('theme_mods_' . 'almera'); $theme_mods['nav_menu_locations']['primary'] = $menu_id; update_option('theme_mods_' . 'almera', $theme_mods); if (class_exists('TMM_Ext_Shortcodes')) { $shortcodes = TMM_Ext_Shortcodes::get_shortcodes_array(); if (!empty($shortcodes)) { foreach ($shortcodes as $shortcode) { TMM::update_option('show_shortcode_' . $shortcode, 1); } } } TMM::update_option('theme_was_activated', 1); //***** TMM::update_option('saved_google_fonts', 'a:1:{i:0;s:83:"Open Sans:300,300italic,400regular,italic,600,600italic,700,700italic,800,800italic";}'); TMM::update_option('sidebar_position', 'sbr');
function rename_existing_menus() { $menus = wp_get_nav_menus(); if (!empty($menus)) { //wp_delete_nav_menu($menu->slug); foreach ($menus as $menu) { $updated = false; $i = 0; while (!is_numeric($updated)) { $i++; $args['menu-name'] = __("Previously used menu", 'avia_framework') . " " . $i; $args['description'] = $menu->description; $args['parent'] = $menu->parent; $updated = wp_update_nav_menu_object($menu->term_id, $args); //return a number on success or wp_error object if menu name exists //fallback, prevents infinite loop if something weird happens if ($i > 100) { $updated = 1; } } } } }
/** * Saves wordpress menu using ajax calls * * @return json messages from nav-menus.php * @author **/ public function wp_ajax_oxy_save_menu() { @error_reporting(0); // Don't break the JSON result // parse variables sent from $.serialize into an array $oxy_menu_to_save = json_decode(stripslashes($_POST['menu']), true); // set request and post to parsed menu data to fake the request $_REQUEST = $oxy_menu_to_save; $_POST = $oxy_menu_to_save; require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; // Container for any messages displayed to the user $messages = array(); // Container that stores the name of the active menu $nav_menu_selected_title = ''; // The menu id of the current menu being edited $nav_menu_selected_id = isset($_REQUEST['menu']) ? (int) $_REQUEST['menu'] : 0; // Get existing menu locations assignments $locations = get_registered_nav_menus(); $menu_locations = get_nav_menu_locations(); $num_locations = count(array_keys($locations)); check_admin_referer('update-nav_menu', 'update-nav-menu-nonce'); // Remove menu locations that have been unchecked foreach ($locations as $location => $description) { if ((empty($_POST['menu-locations']) || empty($_POST['menu-locations'][$location])) && isset($menu_locations[$location]) && $menu_locations[$location] == $nav_menu_selected_id) { unset($menu_locations[$location]); } } // Merge new and existing menu locations if any new ones are set if (isset($_POST['menu-locations'])) { $new_menu_locations = array_map('absint', $_POST['menu-locations']); $menu_locations = array_merge($menu_locations, $new_menu_locations); } // Set menu locations set_theme_mod('nav_menu_locations', $menu_locations); // Add Menu if (0 == $nav_menu_selected_id) { $new_menu_title = trim(esc_html($_POST['menu-name'])); if ($new_menu_title) { $_nav_menu_selected_id = wp_update_nav_menu_object(0, array('menu-name' => $new_menu_title)); if (is_wp_error($_nav_menu_selected_id)) { $messages[] = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>'; } else { $_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; if (isset($_REQUEST['menu-item'])) { wp_save_nav_menu_items($nav_menu_selected_id, absint($_REQUEST['menu-item'])); } if (isset($_REQUEST['zero-menu-state'])) { // If there are menu items, add them wp_nav_menu_update_menu_items($nav_menu_selected_id, $nav_menu_selected_title); // Auto-save nav_menu_locations $locations = get_nav_menu_locations(); foreach ($locations as $location => $menu_id) { $locations[$location] = $nav_menu_selected_id; break; // There should only be 1 } set_theme_mod('nav_menu_locations', $locations); } if (isset($_REQUEST['use-location'])) { $locations = get_registered_nav_menus(); $menu_locations = get_nav_menu_locations(); if (isset($locations[$_REQUEST['use-location']])) { $menu_locations[$_REQUEST['use-location']] = $nav_menu_selected_id; } set_theme_mod('nav_menu_locations', $menu_locations); } // $messages[] = '<div id="message" class="updated"><p>' . sprintf(__('<strong>%s</strong> has been created.'), $nav_menu_selected_title) . '</p></div>'; wp_redirect(admin_url('nav-menus.php?menu=' . $_nav_menu_selected_id)); exit; } } else { $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.', 'lambda-admin-td') . '</p></div>'; } // Update existing menu } else { $_menu_object = wp_get_nav_menu_object($nav_menu_selected_id); $menu_title = trim(esc_html($_POST['menu-name'])); if (!$menu_title) { $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.', 'lambda-admin-td') . '</p></div>'; $menu_title = $_menu_object->name; } if (!is_wp_error($_menu_object)) { $_nav_menu_selected_id = wp_update_nav_menu_object($nav_menu_selected_id, array('menu-name' => $menu_title)); if (is_wp_error($_nav_menu_selected_id)) { $_menu_object = $_nav_menu_selected_id; $messages[] = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>'; } else { $_menu_object = wp_get_nav_menu_object($_nav_menu_selected_id); $nav_menu_selected_title = $_menu_object->name; } } // Update menu items if (!is_wp_error($_menu_object)) { $messages = array_merge($messages, wp_nav_menu_update_menu_items($nav_menu_selected_id, $nav_menu_selected_title)); } } header('Content-Type: application/json'); echo json_encode(array('messages' => $messages, 'nav_menu_selected_id' => $nav_menu_selected_id)); die; }
function callback($path = '', $site = 0, $menu_id = 0) { $site_id = $this->switch_to_blog_and_validate_user($this->api->get_blog_id($site)); if (is_wp_error($site_id)) { return $site_id; } if ($menu_id <= 0) { return new WP_Error('menu-id', 'Menu ID must be greater than 0.', 400); } $data = $this->input(true, false); $data['id'] = $menu_id; $data = $this->complexify(array($data)); if (is_wp_error($data)) { return $data; } $data = $data[0]; // Avoid special-case handling of an unset 'items' field in empty menus $data['items'] = isset($data['items']) ? $data['items'] : array(); $data = $this->create_new_items($data, $menu_id); $result = wp_update_nav_menu_object($menu_id, array('menu-name' => $data['menu-name'])); if (is_wp_error($result)) { return $result; } $delete_status = $this->delete_items_not_present($menu_id, $data['items']); if (is_wp_error($delete_status)) { return $delete_status; } foreach ($data['items'] as $item) { $item_id = isset($item['menu-item-db-id']) ? $item['menu-item-db-id'] : 0; $result = wp_update_nav_menu_item($menu_id, $item_id, $item); if (is_wp_error($result)) { return $result; } } $items = wp_get_nav_menu_items($menu_id, array('update_post_term_cache' => false)); if (is_wp_error($items)) { return $items; } $menu = wp_get_nav_menu_object($menu_id); $menu->items = $items; return array('menu' => $this->simplify($menu)); }
function do_sync($data) { global $wpdb, $sitepress; $current_language = $sitepress->get_current_language(); $default_language = $sitepress->get_default_language(); // menu translations if (!empty($data['menu_translation'])) { foreach ($data['menu_translation'] as $menu_id => $translations) { foreach ($translations as $language => $name) { $_POST['icl_translation_of'] = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'", $menu_id)); $_POST['icl_nav_menu_language'] = $language; $menu_indentation = ''; $menu_increment = 0; do { $new_menu_id = wp_update_nav_menu_object(0, array('menu-name' => $name . $menu_indentation . $menu_increment)); $menu_increment = $menu_increment != '' ? $menu_increment + 1 : 2; $menu_indentation = '-'; } while (is_wp_error($new_menu_id) && $menu_increment < 10); $this->menus[$menu_id]['translations'][$language] = array('id' => $new_menu_id); } } } // menu options if (!empty($data['menu_options'])) { foreach ($data['menu_options'] as $menu_id => $translations) { foreach ($translations as $language => $option) { $translated_menu_id = $this->get_translated_menu_id($menu_id, $language); foreach ($option as $key => $value) { switch ($key) { case 'auto_add': // Store 'auto-add' pages. $auto_add = $value; $nav_menu_option = (array) get_option('nav_menu_options'); if (!isset($nav_menu_option['auto_add'])) { $nav_menu_option['auto_add'] = array(); } if ($auto_add) { if (!in_array($translated_menu_id, $nav_menu_option['auto_add'])) { $nav_menu_option['auto_add'][] = $translated_menu_id; } } else { if (false !== ($key = array_search($translated_menu_id, $nav_menu_option['auto_add']))) { unset($nav_menu_option['auto_add'][$key]); } } // Remove nonexistent/deleted menus $nav_menu_option['auto_add'] = array_intersect($nav_menu_option['auto_add'], wp_get_nav_menus(array('fields' => 'ids'))); update_option('nav_menu_options', $nav_menu_option); wp_defer_term_counting(false); do_action('wp_update_nav_menu', $translated_menu_id); break; } } } } } // deleting items if (!empty($data['del'])) { foreach ($data['del'] as $languages) { foreach ($languages as $items) { foreach ($items as $item_id => $name) { wp_delete_post($item_id, true); $delete_trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); if ($delete_trid) { $sitepress->delete_element_translation($delete_trid, 'post_nav_menu_item'); } } } } } // moving items if (!empty($data['mov'])) { foreach ($data['mov'] as $menu_id => $items) { foreach ($items as $item_id => $changes) { $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); if (!$trid) { $sitepress->set_element_language_details($item_id, 'post_nav_menu_item', false, $default_language); $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); } foreach ($changes as $language => $details) { $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; $new_menu_order = key($details); $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order'] = $new_menu_order; $wpdb->update($wpdb->posts, array('menu_order' => $new_menu_order), array('ID' => $translated_item_id)); $sitepress->set_element_language_details($translated_item_id, 'post_nav_menu_item', $trid, $language); } } } // fix hierarchy foreach ($data['mov'] as $menu_id => $items) { foreach ($items as $item_id => $changes) { $parent_item = get_post_meta($item_id, '_menu_item_menu_item_parent', true); foreach ($changes as $language => $details) { $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; $translated_parent_menu_item_id = icl_object_id($parent_item, get_post_type($parent_item), false, $language); if ($translated_parent_menu_item_id == $translated_item_id) { $translated_parent_menu_item_id = false; } update_post_meta($translated_item_id, '_menu_item_menu_item_parent', $translated_parent_menu_item_id); } } } } // adding items if (!empty($data['add'])) { foreach ($data['add'] as $menu_id => $items) { foreach ($items as $item_id => $translations) { $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); if (!$trid) { $sitepress->set_element_language_details($item_id, 'post_nav_menu_item', false, $default_language); $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); } foreach ($translations as $language => $name) { $translated_object = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]; $menu_name = $this->get_menu_name($menu_id); $object_type = $translated_object['object_type']; $object_title = $translated_object['title']; $object_url = $translated_object['url']; $icl_st_label_exists = false; $icl_st_url_exists = false; if ($object_type == 'custom' && (function_exists('icl_t') || !$this->string_translation_default_language_ok())) { if (function_exists('icl_t') && $this->string_translation_default_language_ok()) { $sitepress->switch_lang($language, false); $object_title = icl_t($menu_name . ' menu', 'Menu Item Label ' . $item_id, $object_title, $icl_st_label_exists, false); $object_url = icl_t($menu_name . ' menu', 'Menu Item URL ' . $item_id, $object_url, $icl_st_url_exists, false); $sitepress->switch_lang($current_language, false); if (!$icl_st_label_exists) { icl_register_string($menu_name . ' menu', 'Menu Item Label ' . $item_id, $object_title); } if (!$icl_st_url_exists) { icl_register_string($menu_name . ' menu', 'Menu Item URL ' . $item_id, $object_url); } } else { $object_title = $name; } } $menudata = array('menu-item-db-id' => 0, 'menu-item-object-id' => $translated_object['object_id'], 'menu-item-object' => $translated_object['object'], 'menu-item-parent-id' => 0, 'menu-item-position' => 0, 'menu-item-type' => $object_type, 'menu-item-title' => $object_title, 'menu-item-url' => $object_url, 'menu-item-description' => '', 'menu-item-attr-title' => $translated_object['attr-title'], 'menu-item-target' => $translated_object['target'], 'menu-item-classes' => $translated_object['classes'] ? implode(' ', $translated_object['classes']) : '', 'menu-item-xfn' => $translated_object['xfn'], 'menu-item-status' => 'publish'); $translated_menu_id = $this->menus[$menu_id]['translations'][$language]['id']; remove_filter('get_term', array($sitepress, 'get_term_adjust_id')); // AVOID filtering to current language $translated_item_id = wp_update_nav_menu_item($translated_menu_id, 0, $menudata); // set language explicitly since the 'wp_update_nav_menu_item' is still TBD $sitepress->set_element_language_details($translated_item_id, 'post_nav_menu_item', $trid, $language); $menu_tax_id_prepared = $wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'", $translated_menu_id); $menu_tax_id = $wpdb->get_var($menu_tax_id_prepared); if ($translated_item_id && $menu_tax_id) { $rel_prepared = $wpdb->prepare("SELECT object_id FROM {$wpdb->term_relationships} WHERE object_id=%d AND term_taxonomy_id=%d", $translated_item_id, $menu_tax_id); $rel = $wpdb->get_var($rel_prepared); if (!$rel) { $wpdb->insert($wpdb->term_relationships, array('object_id' => $translated_item_id, 'term_taxonomy_id' => $menu_tax_id)); } } $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID'] = $translated_item_id; } } } // set/fix hierarchy foreach ($data['add'] as $menu_id => $items) { foreach ($items as $item_id => $translations) { foreach ($translations as $language => $name) { $item_parent = $this->menus[$menu_id]['items'][$item_id]['parent']; if ($item_parent) { $parent_object_id = $this->menus[$menu_id]['items'][$item_parent]['object_id']; $parent_object = $this->menus[$menu_id]['items'][$item_parent]['object']; $element_type = $parent_object; if ($this->menus[$menu_id]['items'][$item_parent]['object_type'] == 'custom') { $element_type = 'nav_menu_item'; } $translated_parent_object_id = icl_object_id($parent_object_id, $element_type, false, $language); if ($translated_parent_object_id) { $translated_parent_item_id = $wpdb->get_var($wpdb->prepare("\n SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_menu_item_object_id' AND meta_value=%d ORDER BY meta_id DESC LIMIT 1", $translated_parent_object_id)); $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; update_post_meta($translated_item_id, '_menu_item_menu_item_parent', $translated_parent_item_id); } } } } } } // update strings: caption if (!empty($data['label_changed'])) { foreach ($data['label_changed'] as $languages) { foreach ($languages as $language => $items) { foreach ($items as $item_id => $name) { $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); if ($trid) { $item_translations = $sitepress->get_element_translations($trid, 'post_nav_menu_item', true); if (isset($item_translations[$language])) { $translated_item_id = $item_translations[$language]->element_id; $translated_item = get_post($translated_item_id); $translated_item->post_title = $name; wp_update_post($translated_item); } } } } } } // update strings: url if (!empty($data['url_changed'])) { foreach ($data['url_changed'] as $languages) { foreach ($languages as $language => $items) { foreach ($items as $item_id => $url) { $trid = $sitepress->get_element_trid($item_id, 'post_nav_menu_item'); if ($trid) { $item_translations = $sitepress->get_element_translations($trid, 'post_nav_menu_item', true); if (isset($item_translations[$language])) { $translated_item_id = $item_translations[$language]->element_id; if ($url) { update_post_meta($translated_item_id, '_menu_item_url', $url); } } } } } } } // add string to ST: caption if (!empty($data['label_missing'])) { static $labels_to_add; if (!isset($labels_to_add)) { $labels_to_add = array(); } foreach ($data['label_missing'] as $menu_id => $languages) { foreach ($languages as $items) { foreach ($items as $item_id => $name) { if (!in_array($menu_id . '-' . $item_id, $labels_to_add)) { $item = get_post($item_id); icl_register_string($this->get_menu_name($menu_id) . ' menu', 'Menu Item Label ' . $item_id, $item->post_title); $labels_to_add[] = $menu_id . '-' . $item_id; } } } } } // add string to ST: url if (!empty($data['url_missing'])) { static $urls_to_add; if (!isset($urls_to_add)) { $urls_to_add = array(); } foreach ($data['url_missing'] as $menu_id => $languages) { foreach ($languages as $items) { foreach ($items as $item_id => $url) { if (!in_array($menu_id . '-' . $item_id, $urls_to_add)) { icl_register_string($this->get_menu_name($menu_id) . ' menu', 'Menu Item URL ' . $item_id, $url); $urls_to_add[] = $menu_id . '-' . $item_id; } } } } } // set menu order foreach ($this->menus as $menu_id => $menu) { $menu_index_by_lang = array(); foreach ($menu['items'] as $item_id => $item) { foreach ($item['translations'] as $language => $item_translation) { if ($item_translation['ID']) { $new_menu_order = empty($menu_index_by_lang[$language]) ? 1 : $menu_index_by_lang[$language] + 1; $menu_index_by_lang[$language] = $new_menu_order; if ($new_menu_order != $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order']) { $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order'] = $new_menu_order; $wpdb->update($wpdb->posts, array('menu_order' => $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order']), array('ID' => $item_translation['ID'])); } } } } } wp_redirect(admin_url('admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/menus-sync.php&updated=1')); exit; }
public function onMenusSave(Event $event) { /* * Add widgets and particles to any menu: * http://www.wpbeginner.com/wp-themes/how-to-add-custom-items-to-specific-wordpress-menus/ * * Skip menu items dynamically: * http://wordpress.stackexchange.com/questions/31748/dynamically-exclude-menu-items-from-wp-nav-menu * * Updating menu item (extra data goes to wp_postmeta table): * get_post() * wp_insert_post() * wp_update_post($menu_item_data) * register_post_type() * update_post_meta() * * https://github.com/WordPress/WordPress/blob/master/wp-admin/nav-menus.php#L65 */ $defaults = ['id' => 0, 'layout' => 'list', 'target' => '_self', 'dropdown' => '', 'icon' => '', 'image' => '', 'subtitle' => '', 'icon_only' => false, 'visible' => true, 'group' => 0, 'columns' => []]; $menu = $event->menu; $menus = array_flip($event->gantry['menu']->getMenus()); $id = isset($menus[$event->resource]) ? $menus[$event->resource] : 0; // Save global menu settings into Wordpress. $menuObject = wp_get_nav_menu_object($id); if (is_wp_error($menuObject)) { throw new \RuntimeException("Saving menu failed: Menu {$event->resource} ({$id}) not found", 400); } $options = ['menu-name' => trim(esc_html($menu['settings.title']))]; $id = wp_update_nav_menu_object($id, $options); if (is_wp_error($id)) { throw new \RuntimeException("Saving menu failed: Failed to update {$event->resource}", 400); } unset($menu['settings']); // Get all menu items. $unsorted_menu_items = wp_get_nav_menu_items($id, ['orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish']); $menu_items = []; foreach ($unsorted_menu_items as $_item) { $menu_items[$_item->db_id] = $_item; } wp_defer_term_counting(true); // Each menu has ordering from 1..n counting all menu items. Children come right after parent ordering. $ordering = $this->flattenOrdering($menu['ordering']); foreach ($menu['items'] as $key => $item) { if (!empty($item['id']) && $menu_items[$item['id']]) { $wpItem = $menu_items[$item['id']]; $args = ['menu-item-db-id' => $wpItem->db_id, 'menu-item-object-id' => $wpItem->object_id, 'menu-item-object' => $wpItem->object, 'menu-item-parent-id' => $wpItem->menu_item_parent, 'menu-item-position' => isset($ordering[$key]) ? $ordering[$key] : 0, 'menu-item-type' => $wpItem->type, 'menu-item-title' => trim($item['title']), 'menu-item-url' => trim($item['link']), 'menu-item-description' => $wpItem->description, 'menu-item-attr-title' => $wpItem->attr_title, 'menu-item-target' => $item['target'] != '_self' ? $item['target'] : '', 'menu-item-classes' => trim($item['class']), 'menu-item-xfn' => $wpItem->xfn]; wp_update_nav_menu_item($id, $wpItem->db_id, $args); unset($item['title'], $item['link'], $item['class'], $item['target']); } // Do not save default values. foreach ($defaults as $var => $value) { if (isset($item[$var]) && $item[$var] == $value) { unset($item[$var]); } } // Do not save derived values. unset($item['path'], $item['alias'], $item['parent_id'], $item['level'], $item['group'], $item['current']); // Do not save WP variables we do not use. unset($item['xfn'], $item['attr_title']); // Particles have no link. if (isset($item['type']) && $item['type'] === 'particle') { unset($item['link']); } $event->menu["items.{$key}"] = $item; } wp_defer_term_counting(false); }
/** * Test saving a new name that conflicts with an existing nav menu's name. * * @see WP_Customize_Nav_Menu_Setting::update() */ function test_save_inserted_conflicted_name() { do_action('customize_register', $this->wp_customize); $menu_name = 'Foo'; wp_update_nav_menu_object(0, array('menu-name' => $menu_name)); $menu_id = -123; $setting_id = "nav_menu[{$menu_id}]"; $setting = new WP_Customize_Nav_Menu_Setting($this->wp_customize, $setting_id); $this->wp_customize->set_post_value($setting->id, array('name' => $menu_name)); $setting->save(); $expected_resolved_menu_name = "{$menu_name} (2)"; $new_menu = wp_get_nav_menu_object($setting->term_id); $this->assertEquals($expected_resolved_menu_name, $new_menu->name); $save_response = apply_filters('customize_save_response', array()); $this->assertEquals($expected_resolved_menu_name, $save_response['nav_menu_updates'][0]['saved_value']['name']); }
function do_sync($data) { global $wpdb, $sitepress; // menu translations if (!empty($data['menu_translation'])) { foreach ($data['menu_translation'] as $menu_id => $translations) { foreach ($translations as $language => $name) { $_POST['icl_translation_of'] = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'", $menu_id)); $_POST['icl_nav_menu_language'] = $language; $ming = $minc = ''; do { $new_menu_id = wp_update_nav_menu_object(0, array('menu-name' => $name . $ming . $minc)); $minc = $minc != '' ? $minc + 1 : 2; $ming = '-'; } while (is_wp_error($new_menu_id) && $minc < 10); $this->menus[$menu_id]['translations'][$language] = array('id' => $new_menu_id); } } } // deleting items if (!empty($data['del'])) { foreach ($data['del'] as $menu_id => $languages) { foreach ($languages as $language => $items) { foreach ($items as $item_id => $name) { wp_delete_post($item_id, true); } } } } if (!empty($data['mov'])) { foreach ($data['mov'] as $menu_id => $items) { foreach ($items as $item_id => $changes) { foreach ($changes as $language => $details) { $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; $new_menu_order = key($details); $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order'] = $new_menu_order; $wpdb->update($wpdb->posts, array('menu_order' => $new_menu_order), array('ID' => $translated_item_id)); } } } // fix hierarchy foreach ($data['mov'] as $menu_id => $items) { foreach ($items as $item_id => $changes) { $object = get_post_meta($item_id, '_menu_item_object', true); $parent_item = get_post_meta($item_id, '_menu_item_menu_item_parent', true); $parent_object = get_post_meta($parent_item, '_menu_item_object_id', true); foreach ($changes as $language => $details) { $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; $translated_parent_object_id = icl_object_id($parent_object, $object, false, $language); $translated_parent_item_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_menu_item_object_id' AND meta_value=%d", $translated_parent_object_id)); update_post_meta($translated_item_id, '_menu_item_menu_item_parent', $translated_parent_item_id); } } } } // adding items if (!empty($data['add'])) { foreach ($data['add'] as $menu_id => $items) { foreach ($items as $item_id => $translations) { foreach ($translations as $language => $name) { $translated_object = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]; $menudata = array('menu-item-db-id' => 0, 'menu-item-object-id' => $translated_object['object_id'], 'menu-item-object' => $translated_object['object'], 'menu-item-parent-id' => 0, 'menu-item-position' => 0, 'menu-item-type' => $translated_object['object_type'], 'menu-item-title' => '', 'menu-item-url' => '', 'menu-item-description' => '', 'menu-item-attr-title' => '', 'menu-item-target' => '', 'menu-item-classes' => '', 'menu-item-xfn' => '', 'menu-item-status' => 'publish'); $translated_menu_id = $this->menus[$menu_id]['translations'][$language]['id']; remove_filter('get_term', array($sitepress, 'get_term_adjust_id')); // AVOID filtering to current language $translated_item_id = wp_update_nav_menu_item($translated_menu_id, 0, $menudata); // set language explicitly since the 'wp_update_nav_menu_item' is still TBD $sitepress->set_element_language_details($translated_item_id, 'post_nav_menu_item', null, $language); // $menu_tax_id = $wpdb->get_var($wpdb->prepare("\r\n SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='nav_menu'", $translated_menu_id)); if ($translated_item_id && $menu_tax_id) { $rel = $wpdb->get_var($wpdb->prepare("SELECT object_id FROM {$wpdb->term_relationships} WHERE object_id=%d AND term_taxonomy_id=%d", $translated_item_id, $menu_tax_id)); if (!$rel) { $wpdb->insert($wpdb->term_relationships, array('object_id' => $translated_item_id, 'term_taxonomy_id' => $menu_tax_id)); } } $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID'] = $translated_item_id; } } } // set/fix hierarchy foreach ($data['add'] as $menu_id => $items) { foreach ($items as $item_id => $translations) { foreach ($translations as $language => $name) { $item_parent = $this->menus[$menu_id]['items'][$item_id]['parent']; if ($item_parent) { $parent_object_id = $this->menus[$menu_id]['items'][$item_parent]['object_id']; $parent_object = $this->menus[$menu_id]['items'][$item_parent]['object']; $translated_parent_object_id = icl_object_id($parent_object_id, $parent_object, false, $language); if ($translated_parent_object_id) { $translated_parent_item_id = $wpdb->get_var($wpdb->prepare("\r\n SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_menu_item_object_id' AND meta_value=%d ORDER BY meta_id DESC LIMIT 1", $translated_parent_object_id)); $translated_item_id = $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['ID']; update_post_meta($translated_item_id, '_menu_item_menu_item_parent', $translated_parent_item_id); } } } } } } // set menu order foreach ($this->menus as $menu_id => $menu) { $menu_index_by_lang = array(); foreach ($menu['items'] as $item_id => $item) { $menu_order = $item['menu_order']; foreach ($item['translations'] as $language => $item_translation) { if ($item_translation['ID']) { $new_menu_order = empty($menu_index_by_lang[$language]) ? 1 : $menu_index_by_lang[$language] + 1; $menu_index_by_lang[$language] = $new_menu_order; if ($new_menu_order != $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order']) { $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order'] = $new_menu_order; $wpdb->update($wpdb->posts, array('menu_order' => $this->menus[$menu_id]['items'][$item_id]['translations'][$language]['menu_order']), array('ID' => $item_translation['ID'])); } } } } } wp_redirect(admin_url('admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/menus-sync.php&updated=1')); exit; }
protected function checkMenusExist() { $menus = json_decode($this->get_theme_settings()->get('menus'), true); if (empty($menus)) { return; } $existing_menus = $this->getExistingMenus(); foreach ($menus as $menu) { if (in_array($menu['slug'], $existing_menus)) { continue; } // Create menu if it does not exists $new_menu_id = wp_create_nav_menu($menu['name']); if (is_numeric($new_menu_id)) { // The menu ID has to be numeric! wp_update_nav_menu_object($new_menu_id, array('description' => $menu['description'], 'menu-name' => $menu['name'])); } if (empty($menu['items'])) { continue; } $menu_items = array(); foreach ($menu['items'] as $menu_item) { $menu_item['url'] = str_replace('%siteurl%', home_url(), $menu_item['url']); $menu_items[$menu_item['menu_item_parent']][] = $menu_item; } foreach ($menu_items[0] as $menu_item) { $this->up_update_nav_menu_item($new_menu_id, 0, $menu_item, $menu_items); } /* foreach($menu['items'] as $menu_item) { wp_update_nav_menu_item( $new_menu_id, 0, array( 'menu-item-url' => $menu_item['url'], 'menu-item-title' => $menu_item['title'], 'menu-item-position' => $menu_item['menu_order'], 'menu-item-status' => 'publish' ) ); }*/ } }
/** * Create/update the nav_menu term for this setting. * * Any created menus will have their assigned term IDs exported to the client * via the customize_save_response filter. Likewise, any errors will be exported * to the client via the customize_save_response() filter. * * To delete a menu, the client can send false as the value. * * @since 4.3.0 * * @see wp_update_nav_menu_object() * * @param array|false $value { * The value to update. Note that slug cannot be updated via wp_update_nav_menu_object(). * If false, then the menu will be deleted entirely. * * @type string $name The name of the menu to save. * @type string $description The term description. Default empty string. * @type int $parent The id of the parent term. Default 0. * @type bool $auto_add Whether pages will auto_add to this menu. Default false. * } * @return void */ protected function update( $value ) { if ( $this->is_updated ) { return; } $this->is_updated = true; $is_placeholder = ( $this->term_id < 0 ); $is_delete = ( false === $value ); add_filter( 'customize_save_response', array( $this, 'amend_customize_save_response' ) ); $auto_add = null; if ( $is_delete ) { // If the current setting term is a placeholder, a delete request is a no-op. if ( $is_placeholder ) { $this->update_status = 'deleted'; } else { $r = wp_delete_nav_menu( $this->term_id ); if ( is_wp_error( $r ) ) { $this->update_status = 'error'; $this->update_error = $r; } else { $this->update_status = 'deleted'; $auto_add = false; } } } else { // Insert or update menu. $menu_data = wp_array_slice_assoc( $value, array( 'description', 'parent' ) ); if ( isset( $value['name'] ) ) { $menu_data['menu-name'] = $value['name']; } $r = wp_update_nav_menu_object( $is_placeholder ? 0 : $this->term_id, $menu_data ); if ( is_wp_error( $r ) ) { $this->update_status = 'error'; $this->update_error = $r; } else { if ( $is_placeholder ) { $this->previous_term_id = $this->term_id; $this->term_id = $r; $this->update_status = 'inserted'; } else { $this->update_status = 'updated'; } $auto_add = $value['auto_add']; } } if ( null !== $auto_add ) { $nav_menu_options = $this->filter_nav_menu_options_value( (array) get_option( 'nav_menu_options', array() ), $this->term_id, $auto_add ); update_option( 'nav_menu_options', $nav_menu_options ); } // Make sure that new menus assigned to nav menu locations use their new IDs. if ( 'inserted' === $this->update_status ) { foreach ( $this->manager->settings() as $setting ) { if ( ! preg_match( '/^nav_menu_locations\[/', $setting->id ) ) { continue; } $post_value = $setting->post_value( null ); if ( ! is_null( $post_value ) && $this->previous_term_id === intval( $post_value ) ) { $this->manager->set_post_value( $setting->id, $this->term_id ); $setting->save(); } } } }
wp_redirect(admin_url('nav-menus.php?menu=' . $_nav_menu_selected_id)); exit; } } else { $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>'; } // Update existing menu } else { $_menu_object = wp_get_nav_menu_object($nav_menu_selected_id); $menu_title = trim(esc_html($_POST['menu-name'])); if (!$menu_title) { $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>'; $menu_title = $_menu_object->name; } if (!is_wp_error($_menu_object)) { $_nav_menu_selected_id = wp_update_nav_menu_object($nav_menu_selected_id, array('menu-name' => $menu_title)); if (is_wp_error($_nav_menu_selected_id)) { $_menu_object = $_nav_menu_selected_id; $messages[] = '<div id="message" class="error"><p>' . $_nav_menu_selected_id->get_error_message() . '</p></div>'; } else { $_menu_object = wp_get_nav_menu_object($_nav_menu_selected_id); $nav_menu_selected_title = $_menu_object->name; } } // Update menu items if (!is_wp_error($_menu_object)) { $messages = array_merge($messages, wp_nav_menu_update_menu_items($nav_menu_selected_id, $nav_menu_selected_title)); } } break; case 'locations':
function setup_side_menu() { $menuName = 'side'; //wp_delete_nav_menu($menuName); $exists = wp_get_nav_menu_object($menuName); if (!$exists) { $menuId = wp_update_nav_menu_object(0, array('menu-name' => $menuName, 'theme-location' => $menuName)); $entries = array('Anciela' => array('Anciela : Nos objectifs' => 'Nos objectifs', 'Anciela : Notre équipe' => 'Notre équipe', 'Anciela : Devenir bénévole' => 'Devenir bénévole', 'Anciela : Nous soutenir' => 'Nous soutenir', 'Anciela : Actualités d\'Anciela' => 'Actualités d\'Anciela'), 'Démarches participatives' => array('Démarches participatives : Collégiens et lycéens éco-citoyens' => 'Jeunes éco-citoyens', 'Démarches participatives : Étudiants éco-citoyens' => 'Étudiants éco-citoyens', 'Démarches participatives : Territoires de vie' => 'Territoires de vie', 'Démarches participatives : Animations ponctuelles' => 'Animations ponctuelles'), 'Pépinière d\'initiatives' => array('Pépinière d\'initiatives citoyennes : La démarche' => 'La démarche', "Pépinière d'initiatives citoyennes : Les cycles d'activités" => "Les cycles d'activités", "Pépinière d'initiatives citoyennes : Les initiatives accompagnées" => 'Les initiatives', 'Pépinière d\'initiatives citoyennes : Participez !' => 'Participez !'), 'Projets numériques' => array('Projets numériques : democratie-durable.info' => 'Démocratie Durable', 'Projets numériques : ressources-ecologistes.org' => 'Ressources écologistes'), 'Projets internationaux' => array("Projets internationaux : Notre démarche" => "Notre démarche", "Projets internationaux : Jeunesse francophone pour un monde écologique et solidaire" => "Jeunesse francophone", "Projets internationaux : Nos partenaires" => "Nos partenaires", "Projets internationaux : Construire des projets avec nous ?" => "Construire des projets<br/>avec nous ?"), 'Recherche' => array("Recherche : Esprit de la recherche" => "Esprit de la recherche", "Recherche : Partages et publications" => "Partages et publications", "Recherche : Participez à la recherche !" => "Participez à la recherche !", "Recherche : Le Conseil scientifique" => "Le Conseil scientifique"), 'Formations' => array('Formations : Esprit des formations' => 'Esprit des formations', 'Formations : Formations ouvertes' => 'Formations ouvertes', 'Formations : Service civique' => 'Service civique', 'Formations : Formation et accompagnement des structures' => 'Formation et accompagnement<br/>des structures')); foreach ($entries as $pageName => $data) { if (is_array($data)) { $parentItemId = wp_update_nav_menu_item($menuId, 0, array('menu-item-title' => $pageName, 'menu-item-url' => '', 'menu-item-status' => 'publish')); foreach ($data as $childPageName => $childPageTitle) { $page = get_page_by_title($childPageName, null, 'page'); wp_update_nav_menu_item($menuId, 0, array('menu-item-title' => $childPageTitle, 'menu-item-parent-id' => $parentItemId, 'menu-item-type' => 'post_type', 'menu-item-object' => 'page', 'menu-item-object-id' => $page->ID, 'menu-item-status' => 'publish')); } } else { $page = get_page_by_title($pageName, null, 'page'); wp_update_nav_menu_item($menuId, 0, array('menu-item-title' => $pageName, 'menu-item-type' => 'post_type', 'menu-item-object' => 'page', 'menu-item-object-id' => $page->ID, 'menu-item-status' => 'publish')); } } } }
/** * Create a Navigation Menu. * * @since 3.0.0 * * @param string $menu_name Menu Name * @return mixed Menu object on success|WP_Error on failure */ function wp_create_nav_menu($menu_name) { return wp_update_nav_menu_object(0, array('menu-name' => $menu_name)); }
public function rename_menu() { $new_menu_name = isset($_POST['new_menu_name']) ? $_POST['new_menu_name'] : false; $menu_id = isset($_POST['menu_id']) ? $_POST['menu_id'] : false; if ($menu_id && $new_menu_name) { $response = wp_update_nav_menu_object($menu_id, array('menu-name' => $new_menu_name)); $this->_out(new Upfront_JsonResponse_Success($response)); } $this->_out(new Upfront_JsonResponse_Error(Upfront_UnewnavigationView::_get_l10n('cant_create'))); }