【问题标题】:Implement 3rd party Web Service API as 'Pages' in Wordpress在 Wordpress 中将 3rd 方 Web 服务 API 实现为“页面”
【发布时间】:2014-09-28 16:13:19
【问题描述】:

我正在构建一个 Wordpress 网站的一部分,该网站使用的 API 建立在需要保持完整的旧数据库之上。 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 的数据由第 3 方控制并且不需要由 Wordpress 管理,所以我想知道如何才能最好地构建它,以便 Wordpress 在我尝试时不会抛出 404s/redirect点击这些网址。

此外,如果我决定缓存这些调用(API 笨重且速度慢),我该如何将它们集成到 Wordpress 搜索中?

如果我能澄清任何事情,请告诉我 - 谢谢!

【问题讨论】:

  • 你不能创建一个自定义的 Wordpress 模板,使用 PHP 获取和修剪 URL,然后使用这些数据调用外部 API 吗?
  • 我目前正在将其作为临时解决方案,但我想我更想知道如何将其与 Wordpress 搜索集成。有什么想法吗?
  • 据我了解,WordPress 搜索通过搜索每个帖子/页面的标题和内容来工作。我认为最简单的方法是每次运行 PHP 代码以从 API 获取数据时更新帖子内容。这意味着,除了显示来自 API 的数据之外,您还可以将其保存到 wp_posts 表的 post_content 字段中。显然,您还必须确定表中的哪一行对应于当前页面,但这应该不难做到。
  • 谢谢!似乎是朝着正确方向迈出的一步。考虑到这一点,我会更多地浏览 Codex。
  • 很高兴能为您提供帮助,祝您好运!

标签: php json wordpress curl


【解决方案1】:

你为什么不直接创建这些资源...它们不会是 404 那么 ...

我们已经在 OMBE 上成功使用了这种方法;我们只是创建了脚本(在你的情况下它们是“monkey”和“monkeys”),它们是其他东西的包装器(比如你的情况下的 API)并使用了 Apache ForceType 指令(指向 application/x-httpd-php5 ) 来处理它们。

HTH,

【讨论】:

    【解决方案2】:

    您可以添加endpoint。以下示例仅检测根 (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 &gt;&gt; Permalinks &gt;&gt; Save 中的永久链接,但可以是auto refreshed on plugin activation

    为了测试端点,我使用了这个:

    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 ) );
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2016-05-17
      • 2011-07-16
      • 2020-12-11
      • 2011-01-15
      相关资源
      最近更新 更多