403Webshell
Server IP : 43.141.49.107  /  Your IP : 113.219.202.173
Web Server : Apache
System : Linux VM-8-5-opencloudos 6.6.34-9.oc9.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 19 19:35:45 CST 2024 x86_64
User : www ( 1000)
PHP Version : 8.1.27
Disable Function : 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
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /www/wwwroot/wordpress/wordpress/wp-content/plugins/wpjam-basic/extends/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/wwwroot/wordpress/wordpress/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(in_array($method, ['get_setting', 'update_setting', 'delete_setting'])){
			if($method != 'get_setting'){
				flush_rewrite_rules();
			}

			return WPJAM_Basic::$method(...$args);
		}elseif($method == 'get_all'){
			return get_option('rewrite_rules') ?: [];
		}
	}

	public static function validate_data($data, $id=''){
		if(empty($data['regex']) || empty($data['query'])){
			wp_die('Rewrite 规则不能为空');
		}

		if(is_numeric($data['regex'])){
			wp_die('无效的 Rewrite 规则');
		}

		$rewrites	= self::get_all();

		if(isset($rewrites[$data['regex']])){
			wp_die('该 Rewrite 规则已存在');
		}

		return $data;
	}

	public static function query_items($args){
		$no	= 0;

		foreach(self::get_all() as $regex => $query) {
			$no++;

			$items[]	= compact('no', 'regex', 'query');
		}

		return $items;
	}

	public static function get_actions(){
		$args	= ['value_callback'=>[self::class, 'get_setting'], 'callback'=>[self::class, 'update_setting']];

		return [
			'optimize'	=> $args+['title'=>'优化',	'response'=>'list',	'overall'=>true,	'class'=>'button-primary'],
			'custom'	=> $args+['title'=>'自定义',	'response'=>'list',	'overall'=>true],
		];
	}

	public static function get_fields($action_key='', $id=0){
		if($action_key == 'custom'){
			return [
				'rewrites'	=> ['type'=>'mu-fields',	'fields'=>[
					'regex'	=> ['title'=>'正则',	'type'=>'text',	'show_admin_column'=>true],
					'query'	=> ['title'=>'查询',	'type'=>'text',	'show_admin_column'=>true],
				]],
			];
		}elseif($action_key == 'optimize'){
			return [
				'remove_date_rewrite'		=> ['label'=>'移除日期 Rewrite 规则'],
				'remove_comment_rewrite'	=> ['label'=>'移除留言 Rewrite 规则'],
				'remove_feed=_rewrite'		=> ['label'=>'移除分类 Feed Rewrite 规则'],
			];
		}

		return [
			'no'	=> ['title'=>'No.',	'type'=>'text',	'show_admin_column'=>true],
			'regex'	=> ['title'=>'正则',	'type'=>'text',	'show_admin_column'=>true],
			'query'	=> ['title'=>'查询',	'type'=>'text',	'show_admin_column'=>true],
		];
	}

	public static function get_list_table(){
		return [
			'title'			=> 'Rewrite 规则',
			'plural'		=> 'rewrites',
			'singular'		=> 'rewrite',
			'model'			=> self::class,
			'capability'	=> is_multisite() ? 'manage_sites' : 'manage_options',
			'primary_key'	=> 'no'
		];
	}

	public static function cleanup(&$rules){
		if(self::get_setting('remove_feed=_rewrite')){
			$remove[]	= 'feed=';
		}

		if(!get_option('wp_attachment_pages_enabled')){
			$remove[]	= 'attachment';
		}

		if(!get_option('page_comments')){
			$remove[]	= 'comment-page';
		}

		if(self::get_setting('disable_post_embed')){
			$remove[]	= '&embed=true';
		}

		if(self::get_setting('disable_trackbacks')){
			$remove[]	= '&tb=1';
		}

		if(!empty($remove)){
			foreach($rules as $key => $rule){
				if($rule == 'index.php?&feed=$matches[1]'){
					continue;
				}

				foreach($remove as $r){
					if(strpos($key, $r) !== false || strpos($rule, $r) !== false){
						unset($rules[$key]);
					}
				}
			}
		}
	}

	public static function on_generate_rewrite_rules($wp_rewrite){
		self::cleanup($wp_rewrite->rules); 
		self::cleanup($wp_rewrite->extra_rules_top);

		$rewrites = self::get_setting('rewrites');

		if($rewrites){
			$wp_rewrite->rules = array_merge(array_column($rewrites, 'query', 'regex'), $wp_rewrite->rules);
		}
	}

	public static function add_hooks(){
		if(self::get_setting('remove_date_rewrite')){
			add_filter('date_rewrite_rules', fn()=> []);

			add_action('init', fn()=> wpjam_map(['%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%'], 'remove_rewrite_tag'));
		}

		if(self::get_setting('remove_comment_rewrite')){
			add_filter('comments_rewrite_rules', fn()=> []);
		}

		add_action('generate_rewrite_rules',	[self::class, 'on_generate_rewrite_rules']);
	}
}

wpjam_add_menu_page('wpjam-rewrites', [
	'parent'		=> 'wpjam-basic',
	'menu_title'	=> 'Rewrites',
	'summary'		=> __FILE__,
	'capability'	=> 'manage_options',
	'hooks'			=> ['WPJAM_Rewrite', 'add_hooks'],
	'function'		=> 'list',
	'list_table'	=> 'WPJAM_Rewrite',
	'network'		=> false,
]);

Youez - 2016 - github.com/yon3zu
LinuXploit