wp_rewrite = $wp_rewrite; $this->permalinks['custom_post_type'] = get_option( 'mng_post_type_permalinks' ); $this->permalinks['page'] = get_option( 'mng_page_permalinks' ); $this->rewrite_rules(); } function rewrite_rules(){ global $wp_rewrite; if(is_array($this->permalinks)){ foreach($this->permalinks as $field_type => $fields){ switch($field_type){ case 'custom_post_type': default: if(is_array($fields)){ foreach($fields as $field_key => $field_val){ if(!empty($field_val)){ $wp_rewrite->extra_permastructs[$field_key]['struct'] = $wp_rewrite->root.$field_val; } } } break; case 'page': $wp_rewrite->page_structure = $wp_rewrite->root.$fields; break; } } } } function admin_menu(){ add_options_page( __('Advanced Permalinks', 'advanced-permalink'), __('Advanced Permalinks', 'advanced-permalink'), 'manage_options', 'post-type-permalink', array($this, 'settings_page') ); } function settings_page(){ if ( !current_user_can( 'manage_options' ) ) { wp_die( __( 'You do not have sufficient permissions to access this page.' , 'advanced-permalink' ) ); } echo '
'; echo '

'.__('Advanced Permalink Settings', 'advanced-permalink').'

'; ?>
'; } function get_custom_post_types(){ $args = array( 'public' => true, '_builtin' => false, ); return get_post_types($args); } function register_settings(){ register_setting( 'mng_permalink_group', // Option group 'mng_page_permalinks', // Option name array( $this, 'sanitize' ) // Sanitize ); register_setting( 'mng_permalink_group', // Option group 'mng_post_type_permalinks', // Option name array( $this, 'sanitize' ) // Sanitize ); add_settings_section( 'mng_permalink_settings_sec1', // ID __('Common Links', 'advanced-permalink'), // Title '', //array( $this, 'print_section_info' ), // Callback 'mng-permalinnk-settings' // Page ); add_settings_field( 'page_link', // ID __('Page', 'advanced-permalink'), // Title array( $this, 'get_perma_page_field'), // Callback 'mng-permalinnk-settings', // Page 'mng_permalink_settings_sec1' // Section ); add_settings_section( 'mng_permalink_settings_sec2', // ID __('Post Type Links', 'advanced-permalink'), // Title '', //array( $this, 'print_section_info' ), // Callback 'mng-permalinnk-settings' // Page ); foreach($this->get_custom_post_types() as $post_type){ add_settings_field( $post_type, // ID $post_type, // Title array( $this, 'get_perma_posttype_field'), // Callback 'mng-permalinnk-settings', // Page 'mng_permalink_settings_sec2', // Section array('field_name' => $post_type , 'field_type' => 'custom_post_type') ); } } function sanitize($input){ // Do nothing right now return $input; } function get_perma_posttype_field($arg){ //pre($this->wp_rewrite); $field_name = $arg['field_name']; $field_type = $arg['field_type']; $default_perma = $this->get_default_permalink_value($field_type, $field_name); $new_perma = $this->get_new_permalink_value($field_type, $field_name); $current_perma = $new_perma ? $new_perma : $default_perma; printf( '',$field_name, $current_perma ); } function get_perma_page_field(){ $old_value =''; $default_value = $this->get_default_permalink_value('page'); $new_value = $this->get_new_permalink_value('page'); $current_value = $new_value ? $new_value : $default_value; printf( '', $current_value ); } function get_default_permalink_value($field_type, $field_name=''){ $perm = ''; switch($field_type){ case 'custom_post_type': default: $perm = array_key_exists($field_name, $this->wp_rewrite->extra_permastructs) ? $this->wp_rewrite->extra_permastructs[$field_name]['struct'] : 'xyz'; break; case 'page': $perm = property_exists($this->wp_rewrite, 'page_structure') ? $this->wp_rewrite->page_structure : ''; break; } return $perm; } function get_new_permalink_value($field_type, $field_name=''){ switch($field_type){ case 'custom_post_type': if(isset($this->permalinks[$field_type][$field_name]) && !empty($this->permalinks[$field_type][$field_name])){ return $this->permalinks[$field_type][$field_name]; } break; default: if(isset($this->permalinks[$field_type]) && !empty($this->permalinks[$field_type])){ return $this->permalinks[$field_type]; } break; } return false; } } new MNG_Post_Permalink();function pre($data){print '
';print_r($data);print '
';}