[...$carry, ['regex'=>wpautop($regex), 'query'=>wpautop($query)]], []); } public static function get_actions(){ return [ 'optimize' => ['title'=>'优化', 'update_setting'=>true, 'class'=>'button-primary'], 'custom' => ['title'=>'自定义', 'update_setting'=>true], ]; } public static function get_fields($action_key='', $id=0){ if($action_key == 'custom'){ return ['rewrites'=>['type'=>'mu-fields', 'fields'=>self::get_fields()]]; }elseif($action_key == 'optimize'){ return wpjam_array(['date'=>'日期', 'comment'=>'留言', 'feed='=>'分类 Feed'], fn($k, $v)=> ['remove_'.$k.'_rewrite', ['label'=>'移除'.$v.' Rewrite 规则']]); } return wpjam_map(['regex'=>'正则', 'query'=>'查询'], fn($v)=> ['title'=>$v, 'type'=>'text', 'show_admin_column'=>true, 'required']); } public static function cleanup(&$rules){ $remove = array_filter([ self::get_setting('remove_feed=_rewrite') ? 'feed=' : '', get_option('wp_attachment_pages_enabled') ? '' : 'attachment', get_option('page_comments') ? '' : 'comment-page', self::get_setting('disable_post_embed') ? '&embed=true' : '', self::get_setting('disable_trackbacks') ? '&tb=1' : '' ]); if($remove){ foreach($rules as $key => $rule){ if($rule == 'index.php?&feed=$matches[1]'){ continue; } foreach($remove as $r){ if(str_contains($key, $r) || str_contains($rule, $r)){ unset($rules[$key]); } } } } } public static function add_hooks(){ self::get_setting('remove_comment_rewrite') && wpjam_hook('comments_rewrite_rules', []); self::get_setting('remove_date_rewrite') && wpjam_hook('date_rewrite_rules', []) && add_action('init', fn()=> array_map('remove_rewrite_tag', ['%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%'])); $custom = wpjam_array(self::get_setting('rewrites') ?: [], fn($k, $v)=> $v['regex'] && !is_numeric($v['regex']) ? [$v['regex'], $v['query']] : null); return [ ['generate_rewrite_rules', fn($wp_rewrite)=> wpjam_map(['rules', 'extra_rules_top'], fn($k)=> self::cleanup($wp_rewrite->$k))], $custom ? ['rewrite_rules_array', '+', $custom] : [] ]; } } wpjam_add_menu_page('wpjam-rewrites', [ 'parent' => 'wpjam-basic', 'menu_title' => 'Rewrites', 'network' => false, 'summary' => __FILE__, 'capability' => is_multisite() ? 'manage_sites' : 'manage_options', 'model' => 'WPJAM_Rewrite', 'function' => 'list', 'list_table' => ['title'=>'Rewrite 规则', 'primary_key'=>'regex', 'numberable'=>true] ]);