wake-up-neo.net

So erstellen Sie eine API als Plugin

Ich möchte einen REST -API-Endpunkt für eine WordPress-Site erstellen, auf der ich eine JSON-Antwort für verschiedene Abfragen erhalten kann. Ich habe das Tutorial ausprobiert hier , aber ich kann nicht herausfinden, wie es funktioniert. Muss ich alle Abfragevariablen registrieren, um sie zu verwenden? Auch ich denke, es wäre am besten, den add_rewrite_endpoint zu verwenden, aber ich habe noch nichts davon verwendet. Daher würde ich gerne wissen, wie diese Funktion im folgenden Code verwendet wird.

Ich möchte eine Abfrage wie <url>/wp-api/version senden, in der die WordPress-Versionsnummer zurückgegeben wird. Aber im Moment werden nur "Möpse" abgefragt. Ich bin nicht sicher, was genau mit dem Regex los ist, also habe ich das nicht geändert. Kann mir bitte jemand helfen, das zu verstehen?

class WP_API_Endpoint{

//  Hook WordPress
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
    @param array $vars List of current public query vars
    @return array $vars     
*/
public function add_query_vars($vars){
    $vars[] = '__wp-api';
    $vars[] = 'pugs';
    return $vars;
}

//  Add API Endpoint
public function add_endpoint(){
    add_rewrite_rule('^wp-api/pugs/?([0-9]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');
}

/*  
    Sniff Requests
    This is where we Hijack all API requests
    If $_GET['__api'] is set, we kill WP and serve our data
    @return die if API request
*/
public function sniff_requests(){
    global $wp;
    if(isset($wp->query_vars['__wp-api'])){
        $this->handle_request();
        exit;
    }
}

protected function get_wp_version() {
    return get_bloginfo('version');
}

//  This is where we handle incoming requests
protected function handle_request(){

    global $wp;

    $pugs = $wp->query_vars['pugs'];
    if($pugs)
        $this->send_response('wp-version', $this->get_wp_version());
    else
        $this->send_response('Something went wrong with the pug bomb factory');

}

//  This sends a JSON response to the browser
protected function send_response($key, $val){
    $response[$key] = $val;
    header('content-type: application/json; charset=utf-8');
    echo json_encode($response)."\n";
    exit;
}
}
new WP_API_Endpoint();
5
user3312508

Das erste ist die Funktion zum Hinzufügen von Umschreiberegeln. Du hast -

add_rewrite_rule('^wp-api/pugs/?([0-9]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');

wp-api/pugs/?([0-9]+) das heißt, wenn Sie <url>/wp-api/pugs/123 anfordern, erhalten Sie eine Abfragevariable pugs mit dem Parameter 123 .

$var = get_query_var('pugs'); // = 123

Jetzt brauchen Sie nicht wirklich Möpse in der URL, wie Sie es brauchen. Entfernen Sie es einfach auf diese Weise. Außerdem sollte der passende reguläre Ausdruck nicht nur eine Zahl sein. so wäre der geänderte Code -

add_rewrite_rule('^wp-api/?([^/]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');

Endgültige Verwendung ist:

protected function handle_request(){

    global $wp;

    $pugs = $wp->query_vars['pugs'];

    // <url>/wp-api/version/
    if( 'version' == $pugs )
        $this->send_response( 'wp-version', $this->get_wp_version() );


    // <url>/wp-api/something/
    elseif( 'something' == $pugs )
        $this->send_response( 'something', 'something' );

    else
        $this->send_response( 'Something went wrong with the pug bomb factory');
}
3
Shazzad