HEX
Server: nginx/1.16.1
System: Linux VM-0-14-centos 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64
User: www (1000)
PHP: 8.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/1.scey.cn/wp-content/plugins/wpjam-basic/extends/wpjam-rewrites.php
<?php
/*
Name: Rewrite 优化
URI: https://blog.wpjam.com/m/wpjam-rewrite/
Description: Rewrites 扩展让可以优化现有 Rewrites 规则和添加额外的 Rewrite 规则。
Version: 2.0
*/
class WPJAM_Rewrite{
	public static function __callStatic($method, $args){
		if(str_ends_with($method, '_setting')){
			if($method == 'update_setting'){
				flush_rewrite_rules();

				$args	= array_slice($args, 0, 2);
			}

			return WPJAM_Basic::$method(...$args);
		}
	}

	public static function query_items($args){
		return wpjam_reduce(get_option('rewrite_rules') ?: [], fn($carry, $regex, $query)=> [...$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') && add_filter('comments_rewrite_rules', fn()=> []);
		self::get_setting('remove_date_rewrite') && add_filter('date_rewrite_rules', fn()=> []) && add_action('init', fn()=> array_map('remove_rewrite_tag', ['%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%']));
		
		add_action('generate_rewrite_rules', fn($wp_rewrite)=> wpjam_map(['rules', 'extra_rules_top'], fn($k)=> self::cleanup($wp_rewrite->$k)));

		$custom	= wpjam_array(self::get_setting('rewrites') ?: [], fn($k, $v)=> $v['regex'] && !is_numeric($v['regex']) ? [$v['regex'], $v['query']] : null);
		$custom && add_filter('rewrite_rules_array', fn($rules)=> $custom+$rules);
	}
}

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]
]);