classes.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 1,728 行 · 第 1/4 页

PHP
1,728
字号
}class WP_Rewrite {	var $permalink_structure;	var $category_base;	var $category_structure;	var $author_base = 'author';	var $author_structure;	var $date_structure;	var $page_structure;	var $search_base = 'search';	var $search_structure;	var $comments_base = 'comments';	var $feed_base = 'feed';	var $comments_feed_structure;	var $feed_structure;	var $front;	var $root = '';	var $index = 'index.php';	var $matches = '';	var $rules;	var $use_verbose_rules = false;	var $rewritecode = 		array(					'%year%',					'%monthnum%',					'%day%',					'%hour%',					'%minute%',					'%second%',					'%postname%',					'%post_id%',					'%category%',					'%author%',					'%pagename%',					'%search%'					);	var $rewritereplace = 		array(					'([0-9]{4})',					'([0-9]{1,2})',					'([0-9]{1,2})',					'([0-9]{1,2})',					'([0-9]{1,2})',					'([0-9]{1,2})',					'([^/]+)',					'([0-9]+)',					'(.+?)',					'([^/]+)',					'([^/]+)',					'(.+)'					);	var $queryreplace = 		array (					'year=',					'monthnum=',					'day=',					'hour=',					'minute=',					'second=',					'name=',					'p=',					'category_name=',					'author_name=',					'pagename=',					's='					);	var $feeds = array ('feed', 'rdf', 'rss', 'rss2', 'atom');	function using_permalinks() {		if (empty($this->permalink_structure))			return false;		else			return true;	}						function using_index_permalinks() {		if (empty($this->permalink_structure)) {			return false;		}		// If the index is not in the permalink, we're using mod_rewrite.		if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) {			return true;		}    		return false;	}	function using_mod_rewrite_permalinks() {		if ( $this->using_permalinks() && ! $this->using_index_permalinks())			return true;		else			return false;	}						function preg_index($number) {		$match_prefix = '$';		$match_suffix = '';		if (! empty($this->matches)) {			$match_prefix = '$' . $this->matches . '['; 			$match_suffix = ']';		}        		return "$match_prefix$number$match_suffix";        	}	function page_rewrite_rules() {		$uris = get_settings('page_uris');		$attachment_uris = get_settings('page_attachment_uris');		$rewrite_rules = array();		$page_structure = $this->get_page_permastruct();		if( is_array( $attachment_uris ) ) {			foreach ($attachment_uris as $uri => $pagename) {				$this->add_rewrite_tag('%pagename%', "($uri)", 'attachment=');				$rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure));			}		}		if( is_array( $uris ) ) {			foreach ($uris as $uri => $pagename) {				$this->add_rewrite_tag('%pagename%', "($uri)", 'pagename=');				$rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure));			}		}		return $rewrite_rules;	}	function get_date_permastruct() {		if (isset($this->date_structure)) {			return $this->date_structure;		}		if (empty($this->permalink_structure)) {			$this->date_structure = '';			return false;		}				// The date permalink must have year, month, and day separated by slashes.		$endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%');		$this->date_structure = '';		$date_endian = '';		foreach ($endians as $endian) {			if (false !== strpos($this->permalink_structure, $endian)) {				$date_endian= $endian;				break;			}		} 		if ( empty($date_endian) )			$date_endian = '%year%/%monthnum%/%day%';		// Do not allow the date tags and %post_id% to overlap in the permalink		// structure. If they do, move the date tags to $front/date/.  		$front = $this->front;		preg_match_all('/%.+?%/', $this->permalink_structure, $tokens);		$tok_index = 1;		foreach ($tokens[0] as $token) {			if ( ($token == '%post_id%') && ($tok_index <= 3) ) {				$front = $front . 'date/';				break;			}		}		$this->date_structure = $front . $date_endian;		return $this->date_structure;	}	function get_year_permastruct() {		$structure = $this->get_date_permastruct($this->permalink_structure);		if (empty($structure)) {			return false;		}		$structure = str_replace('%monthnum%', '', $structure);		$structure = str_replace('%day%', '', $structure);		$structure = preg_replace('#/+#', '/', $structure);		return $structure;	}	function get_month_permastruct() {		$structure = $this->get_date_permastruct($this->permalink_structure);		if (empty($structure)) {			return false;		}		$structure = str_replace('%day%', '', $structure);		$structure = preg_replace('#/+#', '/', $structure);		return $structure;	}	function get_day_permastruct() {		return $this->get_date_permastruct($this->permalink_structure);	}	function get_category_permastruct() {		if (isset($this->category_structure)) {			return $this->category_structure;		}		if (empty($this->permalink_structure)) {			$this->category_structure = '';			return false;		}		if (empty($this->category_base))			$this->category_structure = $this->front . 'category/';		else			$this->category_structure = $this->category_base . '/';		$this->category_structure .= '%category%';				return $this->category_structure;	}	function get_author_permastruct() {		if (isset($this->author_structure)) {			return $this->author_structure;		}		if (empty($this->permalink_structure)) {			$this->author_structure = '';			return false;		}		$this->author_structure = $this->front . $this->author_base . '/%author%';		return $this->author_structure;	}	function get_search_permastruct() {		if (isset($this->search_structure)) {			return $this->search_structure;		}		if (empty($this->permalink_structure)) {			$this->search_structure = '';			return false;		}		$this->search_structure = $this->root . $this->search_base . '/%search%';		return $this->search_structure;	}	function get_page_permastruct() {		if (isset($this->page_structure)) {			return $this->page_structure;		}		if (empty($this->permalink_structure)) {			$this->page_structure = '';			return false;		}		$this->page_structure = $this->root . '%pagename%';		return $this->page_structure;	}	function get_feed_permastruct() {		if (isset($this->feed_structure)) {			return $this->feed_structure;		}		if (empty($this->permalink_structure)) {			$this->feed_structure = '';			return false;		}		$this->feed_structure = $this->root . $this->feed_base . '/%feed%';		return $this->feed_structure;	}	function get_comment_feed_permastruct() {		if (isset($this->comment_feed_structure)) {			return $this->comment_feed_structure;		}		if (empty($this->permalink_structure)) {			$this->comment_feed_structure = '';			return false;		}		$this->comment_feed_structure = $this->root . $this->comments_base . '/' . $this->feed_base . '/%feed%';		return $this->comment_feed_structure;	}	function add_rewrite_tag($tag, $pattern, $query) {		// If the tag already exists, replace the existing pattern and query for		// that tag, otherwise add the new tag, pattern, and query to the end of		// the arrays.		$position = array_search($tag, $this->rewritecode);				if (FALSE !== $position && NULL !== $position) {			$this->rewritereplace[$position] = $pattern;			$this->queryreplace[$position] = $query;					} else {			$this->rewritecode[] = $tag;			$this->rewritereplace[] = $pattern;			$this->queryreplace[] = $query;		}	}	function generate_rewrite_rules($permalink_structure, $paged = true, $feed = true, $forcomments = false, $walk_dirs = true) {		$feedregex2 = '';		foreach ($this->feeds as $feed_name) {			$feedregex2 .= $feed_name . '|';		}		$feedregex2 = '(' . trim($feedregex2, '|') .  ')/?$';		$feedregex = $this->feed_base  . '/' . $feedregex2;		$trackbackregex = 'trackback/?$';		$pageregex = 'page/?([0-9]{1,})/?$';				$front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));		preg_match_all('/%.+?%/', $permalink_structure, $tokens);		$num_tokens = count($tokens[0]);		$index = $this->index;		$feedindex = $index;		$trackbackindex = $index;		for ($i = 0; $i < $num_tokens; ++$i) {			if (0 < $i) {				$queries[$i] = $queries[$i - 1] . '&';			}             			$query_token = str_replace($this->rewritecode, $this->queryreplace, $tokens[0][$i]) . $this->preg_index($i+1);			$queries[$i] .= $query_token;		}		$structure = $permalink_structure;		if ($front != '/') {			$structure = str_replace($front, '', $structure);		}		$structure = trim($structure, '/');		if ($walk_dirs) {			$dirs = explode('/', $structure);		} else {			$dirs[] = $structure;		}		$num_dirs = count($dirs);		$front = preg_replace('|^/+|', '', $front);		$post_rewrite = array();		$struct = $front;		for ($j = 0; $j < $num_dirs; ++$j) {			$struct .= $dirs[$j] . '/';			$struct = ltrim($struct, '/');			$match = str_replace($this->rewritecode, $this->rewritereplace, $struct);			$num_toks = preg_match_all('/%.+?%/', $struct, $toks);			$query = $queries[$num_toks - 1];			$pagematch = $match . $pageregex;			$pagequery = $index . '?' . $query . '&paged=' . $this->preg_index($num_toks + 1);			$feedmatch = $match . $feedregex;			$feedquery = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1);			$feedmatch2 = $match . $feedregex2;			$feedquery2 = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1);			if ($forcomments) {				$feedquery .= '&withcomments=1';				$feedquery2 .= '&withcomments=1';			}			$rewrite = array();			if ($feed) 				$rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2);			if ($paged)				$rewrite = array_merge($rewrite, array($pagematch => $pagequery));			if ($num_toks) {				$post = false;				$page = false;				if (strstr($struct, '%postname%') || strstr($struct, '%post_id%')						|| strstr($struct, '%pagename%')						|| (strstr($struct, '%year%') &&  strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) {					$post = true;					if  ( strstr($struct, '%pagename%') )						$page = true;					$trackbackmatch = $match . $trackbackregex;					$trackbackquery = $trackbackindex . '?' . $query . '&tb=1';					$match = rtrim($match, '/');					$submatchbase = str_replace(array('(',')'),'',$match);					$sub1 = $submatchbase . '/([^/]+)/';					$sub1tb = $sub1 . $trackbackregex;					$sub1feed = $sub1 . $feedregex;					$sub1feed2 = $sub1 . $feedregex2;					$sub1 .= '?$';					$sub2 = $submatchbase . '/attachment/([^/]+)/';					$sub2tb = $sub2 . $trackbackregex;					$sub2feed = $sub2 . $feedregex;					$sub2feed2 = $sub2 . $feedregex2;					$sub2 .= '?$';					$subquery = $index . '?attachment=' . $this->preg_index(1);					$subtbquery = $subquery . '&tb=1';					$subfeedquery = $subquery . '&feed=' . $this->preg_index(2);					$match = $match . '(/[0-9]+)?/?$';					$query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1);				} else {					$match .= '?$';					$query = $index . '?' . $query;				}				        				$rewrite = array_merge($rewrite, array($match => $query));				if ($post) {					$rewrite = array_merge(array($trackbackmatch => $trackbackquery), $rewrite);					if ( ! $page )						$rewrite = array_merge($rewrite, array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery));					$rewrite = array_merge($rewrite, array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery));				}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?