这是我通常做的精简版。用你想要的任何东西替换wpse100645,但要尊重你不想干扰网站内容的事实。
<?php
/**
* Create a custom path and process code when it gets triggered
*
* @author Matthew Boynes
*/
if ( !class_exists( \'WPSE_100645_Custom_Page\' ) ) :
class WPSE_100645_Custom_Page {
public function __construct() {
# Add our query_var, \'wpse100645\'
add_filter( \'query_vars\', array( &$this, \'add_query_var\' ) );
# setup rewrite rules for our path
add_action( \'init\', array( &$this, \'add_rewrite_rules\' ), 5 );
# We\'re doing this on parse_query to ensure that query vars are set
add_action( \'parse_query\', array( &$this, \'dispatch_path\' ) );
}
/**
* Add rewrite rules for our path
*
* @return void
*/
public function add_rewrite_rules() {
add_rewrite_rule( "wpse100645/?$", \'index.php?wpse100645=1\', \'top\' );
}
/**
* Add the class query var, wpse100645
*
* @param array $qv The current query vars
* @return array The modified query vars
*/
public function add_query_var( $qv ) {
$qv[] = \'wpse100645\';
return $qv;
}
/**
* This is where the magic happens.
*
* @uses WPSE_100645_Custom_Page::$paths
* @return void
*/
public function dispatch_path() {
if ( get_query_var( \'wpse100645\' ) ) {
# Do your magic here. You probably want to call another function to keep the code orthoginal.
# Then, you\'ll want to...
exit; # So that WordPress doesn\'t continue the rest of the chain
}
}
}
new WPSE_100645_Custom_Page();
endif;
这里发生了什么事首先,我们要添加一个查询变量,
wpse100645
我们正在为该查询变量添加一个重写规则。这样,无论用户是否在域中启用了永久链接,都可以工作。com/?wpse100645=1或位于域。com/wpse100645/。
下一步,何时parse_query
激发时,我们检查查询变量是否存在。如果是,我们运行想要的任何代码并退出(参见dispatch_path
). 因此,插件可以呈现它想要的任何HTML,因为还没有加载任何模板文件。它也会非常快,因为主查询还没有运行。这一切都在请求链中处于相当高的位置。请注意,如果您没有exit
, 代码完成后,主页将呈现。