实现第三方Web服务API 'Pages'在Wordpress


Implement 3rd party Web Service API as 'Pages' in Wordpress

我正在使用建立在旧数据库之上的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,