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;
 }
예제 #2
0
/**
 * 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);
     }
 }
예제 #6
0
 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();
}
예제 #8
0
파일: nav-menu.php 프로젝트: Garth619/Femi9
/**
 * 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));
}
예제 #9
0
 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;
 }
예제 #11
0
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' />&nbsp;<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>
&nbsp;&nbsp;YES <input type='radio' name='verhuur' value='y'<?php 
                echo $verhuurstrY;
                echo $verhuurstr2;
                ?>
 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 
}
예제 #12
0
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');
예제 #13
0
 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;
                 }
             }
         }
     }
 }
예제 #14
0
 /**
  * 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));
 }
예제 #16
0
 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;
 }
예제 #17
0
 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']);
 }
예제 #19
0
 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();
				}
			}
		}
	}
예제 #22
0
                 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':
예제 #23
0
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'));
            }
        }
    }
}
예제 #24
0
/**
 * 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));
}
예제 #25
0
 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')));
 }