设置API监听页面

时间:2014-01-17 作者:philosophyguy

我需要创建一个PHP脚本,该脚本将通过HTTP post从另一个应用程序接收数据,处理该数据,并更新WordPress数据库。此脚本将以静默方式运行(即没有HTTP输出)。设置这样一个页面的最佳方式是什么?我曾想过用PHP脚本创建一个自定义模板文件,并将该模板分配给一个空白的WordPress页面,但有没有更好的方法可以使用呢?

2 个回复
最合适的回答,由SO网友:Rachel Baker 整理而成

我将使用重写API和template\\u重定向操作来响应API请求。

例如,如果我想响应指向url的请求:示例。com/example-path/with-logic-in-my-theme或plugin的端点。php文件我将创建一个重写规则和模板重定向挂钩,如下所示:

add_action( \'init\', \'example_rewrite_rules\' );
add_action( \'template_redirect\', \'example_template_route\' );

/**
 * Add rewrite rules for Example endpoint.
 */
function example_rewrite_rules()
{
    add_rewrite_rule(
        \'example-path/?$\',
        \'index.php\',
        \'top\'
   );
}

function example_template_route( $default_template ) {
    global $wp, $wp_rewrite;

    if ( $wp->matched_rule == \'example-path/?$\' ) {
        // call function or include template view here.
        include dirname( __FILE__ ) . \'/endpoint.php\';
        exit();   
    }
}
根据从API发布的数据,您可能还需要添加rewrite_tag 能够访问传递给示例路径路由的查询字符串。

SO网友:akamaozu

看起来你在问一些事情。我会尽力帮忙的。

  1. I need to create a PHP script that will receive data from another application via an HTTP post, process that data, and update the WordPress database

    <你需要一个。htaccess规则将特定url模式的所有请求定向到特定脚本。对我来说有意义的是匹配api/version_number/api_resource 到特定的php脚本。

    Example: 使用HTMAP访问权限api/v1/user 请求发送至wp-content\\themes\\your_theme\\api\\v1\\user.php. 现在您的用户可以www.philosophyguy.com/api/v1/user?id=1337&action=upvote 您的脚本将向上投票给用户#1337。您可以将其设置为收集POST请求,而不是GET。或者两者都可以,如果你愿意的话。这完全取决于你的user.php 文件

    这是最近一个项目的一个片段,它也做了同样的事情。

  2. <?php

    if( !$_POST || !$_POST[\'t\'] ){ die("FORGOT TO SEND A TRANSACTION, DID YOU?"); }
    
    require_once(\'utils.php\');
    
    // required variables
        $connection = db_server_connect();
        $transaction_id = get_hashsum($_POST[\'t\']);
        $transaction = json_decode($_POST[\'t\']);
    
    // get DB
        mysql_select_db(DB_NAME, $connection);
    
    // filter
        if(get_transaction($transaction_id)){ die("TRANSACTION ALREADY PROCESSED"); }
    
  3. This script will run silently (i.e., no HTTP output)

    <您想要的是返回HTTP状态代码204。它让浏览器知道一切进展顺利,但不要指望回复后会有任何内容。这里有一个我是如何做的例子:
  4. <?php

    // No Content Header
        header(\'HTTP/1.0 204 No Response\', true, 204);
    
    // Don\'t Cache Server-Check
        header( \'Cache-Control: no-store, no-cache, must-revalidate\' );
        header( \'Access-Control-Allow-Origin: *\' ); 
        header( \'Pragma: no-cache\' ); 
    

    ?>

    this one 将帮助吨。

结束

相关推荐

scripts not enqueueing

我已经为此绞尽脑汁好几个小时了,似乎还没弄明白。我正在尝试使用函数中的以下代码将脚本排入我的页面。php。function my_slider_scripts() { $scriptsrc = get_stylesheet_directory_uri().\'/js/jquery.nivo.slider.pack.js\'; wp_register_script( \'nivo-slider-pack\', $scriptsrc ); wp_enqueue_scr