我正在使用建立在旧数据库之上的API构建Wordpress站点的一部分,该数据库需要保持原状。这个API非常简单,只有两种方式可以访问:
mysite.com/monkeys/ <-- This corresponds to calling the API as '/api/monkeys/list'
mysite.com/monkey/william <-- Calling the API as '/api/monkeys/:name'
因为来自API的数据是由第三方控制的,不需要由Wordpress管理,我想知道如何最好地构建这个,以便当我试图击中这些url时Wordpress不会抛出404/重定向。
此外,如果我决定缓存这些调用(API笨拙而缓慢),我如何将它们集成到Wordpress搜索中?
请让我知道如果我可以澄清什么-谢谢!
您可以添加一个端点。下面的示例只检测根(EP_ROOT
)上的端点。如果我们访问example.com/monkeys/
,它被认为是你的/api/monkeys/list
。当访问example.com/monkeys/name
时,它是你的/api/monkeys/:name
。
如果你真的想把猴子从乐队中分离出来,添加另一个端点。
add_action( 'init', function()
{
add_rewrite_endpoint( 'monkeys', EP_ROOT );
});
add_filter( 'query_vars', function( $vars )
{
$vars[] = 'monkeys';
return $vars;
});
这段代码需要在Settings >> Permalinks >> Save
中手动刷新永久链接,但它可以在插件激活时自动刷新。
add_action( 'wp_footer', function(){
// set default as 'empty', so we can differentiate the root from no query var
$monkeys = get_query_var( 'monkeys','empty' );
if( 'empty' === $monkeys ) {
printf( '<h1 style="font-size:4em">%s</h1>', 'NOT SET' );
}
else if( '' === $monkeys ) {
printf( '<h1 style="font-size:4em">%s</h1>', 'Endpoint root.' );
}
else {
printf( '<h1 style="font-size:4em">Sent query: %s</h1>', urldecode( $monkeys ) );
}
});
你为什么不直接创建这些资源…它们不会是404 然后…
我们已经成功地在OMBE上使用了这种方法;我们简单地创建脚本(在你的情况下,他们将是"猴子"answers"猴子"),这是其他东西的包装(像你的情况下的API),并使用Apache ForceType指令(指向应用/x-httpd-php5)来处理它们。
HTH,