使用add_rewrite_rule
创建自己的API并自己处理端点。
工具,如Monkeyman Rewrite Analyzer 将帮助您了解重写规则最终如何与现有规则一起工作。
<小时>
if ( ! class_exists( \'WPSEAPIEndpoint\' ) ):
class WPSEAPIEndpoint {
// WordPress hooks
public function __construct() {
add_filter( \'query_vars\', array ( $this, \'add_query_vars\' ), 0 );
add_action( \'parse_request\', array ( $this, \'sniff_requests\' ), 0 );
add_action( \'init\', array ( $this, \'add_endpoint\' ), 0 );
}
// Add public query vars
public function add_query_vars( $vars ) {
$vars[] = \'___my-api\';
$vars[] = \'action\';
return $vars;
}
// Add API Endpoint
public function add_endpoint() {
add_rewrite_rule( \'^my-api/v1/([^/]*)/?\', \'index.php?___my-api=1&action=$matches[1]\', \'top\' );
flush_rewrite_rules( false ); //// <---------- REMOVE THIS WHEN DONE TESTING
}
// Sniff Requests
public function sniff_requests( $wp_query ) {
global $wp;
if ( isset( $wp->query_vars[ \'___my-api\' ], $wp->query_vars[ \'action\' ] ) ) {
wp_die( "Action requested: " . $wp->query_vars[ \'action\' ] );
}
}
}
$wptept = new WPSEAPIEndpoint();
endif; // WPSEAPIEndpoint
这有三个主要部分;添加自定义查询变量,添加自定义端点,并在看到自定义查询变量时处理请求。
flush_rewrite_rules()
实际上,只需要在添加新规则后进行一次测试,但它可以使测试更快地将其内联,如我所示。完成后就把它取下来。或者通过在“设置”菜单中保存永久链接,尽早删除它并刷新重写规则。