Joomla教程菜鸟教程你如何在WordPress中创建一个“虚拟”页面

WordPress 中有两种重写规则:内部规则(存储在数据库中,由 WP::parse_request() 解析)和外部规则(存储在 .htaccess 并由 Apache 解析)。 您可以选择任何一种方式,具体取决于您在调用的文件中需要多少 WordPress。

外部规则:

外部规则最容易设置和遵循。 它会执行 my-api.php 在您的插件目录中,无需从 WordPress 加载任何内容。

add_action( 'init', 'wpse9870_init_external' ); function wpse9870_init_external() { global $wp_rewrite; $plugin_url = plugins_url( 'my-api.php', __FILE__ ); $plugin_url = substr( $plugin_url, strlen( home_url() ) + 1 ); // The pattern is prefixed with '^' // The substitution is prefixed with the "home root", at least a "https://wordpress.stackexchange.com/" // This is equivalent to appending it to `non_wp_rules` $wp_rewrite->add_external_rule( 'my-api.php$', $plugin_url ); } 

内部规则:

内部规则需要做更多的工作:首先我们添加一个重写规则来添加一个查询变量,然后我们将这个查询变量公开,然后我们需要检查这个查询变量是否存在以将控制权传递给我们的插件文件。 当我们这样做的时候,通常的 WordPress 初始化已经发生(我们在常规的帖子查询之前中断)。

add_action( 'init', 'wpse9870_init_internal' ); function wpse9870_init_internal() { add_rewrite_rule( 'my-api.php$', 'index.php?wpse9870_api=1', 'top' ); } add_filter( 'query_vars', 'wpse9870_query_vars' ); function wpse9870_query_vars( $query_vars ) { $query_vars[] = 'wpse9870_api'; return $query_vars; } add_action( 'parse_request', 'wpse9870_parse_request' ); function wpse9870_parse_request( &$wp ) { if ( array_key_exists( 'wpse9870_api', $wp->query_vars ) ) { include 'my-api.php'; exit(); } return; } 

原文链接:https://www.wordpresshy.com/319353

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享