function bogo_set_accessible_locales($profileuser) { $available_languages = bogo_available_languages('orderby=value'); $accessible_locales = bogo_get_user_accessible_locales($profileuser->ID); if (empty($accessible_locales)) { $accessible_locales = array_keys($available_languages); } else { $accessible_locales = bogo_filter_locales($accessible_locales); } ?> <!-- Bogo plugin --> <tr> <th scope="row"><?php echo esc_html(__('Locale', 'bogo')); ?> </th> <td> <input type="hidden" name="setting_bogo_accessible_locales" value="1" /> <span class="description"><?php echo esc_html(__('This user is allowed to access the following locales:', 'bogo')); ?> </span><br /> <fieldset class="bogo-locale-options"> <?php foreach ($available_languages as $locale => $language) { $checked = in_array($locale, $accessible_locales); $id_attr = 'bogo_accessible_locale-' . $locale; ?> <label class="bogo-locale-option<?php echo $checked ? ' checked' : ''; ?> " for="<?php echo $id_attr; ?> "> <input type="checkbox" id="<?php echo $id_attr; ?> " name="bogo_accessible_locales[]" value="<?php echo esc_attr($locale); ?> "<?php echo $checked ? ' checked="checked"' : ''; ?> /><?php echo esc_html($language); ?> </label> <?php } ?> </fieldset> </td> </tr> <?php }
function bogo_update_nav_menu_item($menu_id, $menu_item_id) { delete_post_meta($menu_item_id, '_locale'); if (isset($_POST['menu-item-bogo-locale'][$menu_item_id])) { $locales = (array) $_POST['menu-item-bogo-locale'][$menu_item_id]; $locales = bogo_filter_locales($locales); foreach ($locales as $locale) { add_post_meta($menu_item_id, '_locale', $locale); } } if (!metadata_exists('post', $menu_item_id, '_locale')) { add_post_meta($menu_item_id, '_locale', 'zxx'); // special code in ISO 639-2 } }
function bogo_setup_nav_menu_item($menu_item) { if (isset($menu_item->bogo_locales)) { return $menu_item; } $menu_item->bogo_locales = array(); if (isset($menu_item->post_type) && 'nav_menu_item' == $menu_item->post_type) { $menu_item->bogo_locales = get_post_meta($menu_item->ID, '_locale'); } if ($menu_item->bogo_locales) { $menu_item->bogo_locales = bogo_filter_locales($menu_item->bogo_locales); } else { $menu_item->bogo_locales = bogo_available_locales(); } return $menu_item; }
function bogo_map_meta_cap($caps, $cap, $user_id, $args) { $meta_caps = array('bogo_access_all_locales' => 'manage_options', 'bogo_access_locale' => 'read'); $meta_caps = apply_filters('bogo_map_meta_cap', $meta_caps); $caps = array_diff($caps, array_keys($meta_caps)); if (isset($meta_caps[$cap])) { $caps[] = $meta_caps[$cap]; } if ('bogo_access_locale' == $cap && !user_can($user_id, 'bogo_access_all_locales')) { $accessible_locales = bogo_get_user_accessible_locales($user_id); if (!empty($accessible_locales)) { $accessible_locales = bogo_filter_locales($accessible_locales); $locale = $args[0]; if (!in_array($locale, $accessible_locales)) { $caps[] = 'do_not_allow'; } } } return $caps; }