2016-03-30 13 views
1

Ist es möglich, Pluggins Daten von WordPress-Datenbank mit einigen Rest API zuzugreifen. Ich habe WP REST API gesehen, aber es gibt keinen Zugriff auf die Daten des Plugins.Wordpress Rest API

Genauer gesagt verwende ich LearnDash Plugin und ich möchte auf Kurse Informationen zugreifen, aber sie bieten keine API, um darauf zuzugreifen.

Dank

+0

Schreiben Sie Ihre eigene API dafür. WordPress bietet dafür reichlich Möglichkeiten. – rnevius

Antwort

2

Insgesamt benötigen Sie Google für Dinge zu suchen, die mit „Wordpress Rest api benutzerdefinierte Post-Typ“ zu tun, und schließlich werden Sie mit Registrieren von benutzerdefinierten Post-Typen und Endpunkte in Ihrem Thema der functions.php

zu tun hier

ist das Handbuch: https://developer.wordpress.org/rest-api/extending-the-rest-api

Als Beispiel hier ist meine Situation: ich bin mit Wordpress (4.7) und dem Veranstaltungskalender („TEC“) Plugin. Ich frage die WP DB von einer Android App mit der REST API ab, aber die einzigen Daten, die REST zur Verfügung stehen, sind grundlegende WP Posts. Ich muss die benutzerdefinierten Daten im TEC-Plugin der REST-API zugänglich machen. Um das zu tun, ich habe folgende in mein functions.php in meinem Thema enthält:

functions.php

/* Exposing the custom post type of the plugin to the REST API. 
* In this case, for The Tribe Events Calendar plugin, the custom post type is 
* "tribe_events". For other plugins it will be different. */ 

add_action('init', 'my_custom_post_type_rest_support', 25); 

    function my_custom_post_type_rest_support() { 
    global $wp_post_types; 

    //be sure to set this to the name of your post type! 
    $post_type_name = 'tribe_events'; 

    if(isset($wp_post_types[ $post_type_name ])) { 
     $wp_post_types[$post_type_name]->show_in_rest = true; 
     $wp_post_types[$post_type_name]->rest_base = $post_type_name; 
     $wp_post_types[$post_type_name]->rest_controller_class = 'WP_REST_Posts_Controller'; 
    } 

    } 


/* Exposing the custom taxonomy of the plugin to the REST API. 
* In this case, for The Tribe Events Calendar plugin, the custom 
* taxonomy is "tribe_events_cat". For other plugins it will be different. 
*/ 

    add_action('init', 'my_custom_taxonomy_rest_support', 25); 
    function my_custom_taxonomy_rest_support() { 
     global $wp_taxonomies; 

     //be sure to set this to the name of your taxonomy! 
     $taxonomy_name = 'tribe_events_cat'; 

     if (isset($wp_taxonomies[ $taxonomy_name ])) { 
     $wp_taxonomies[ $taxonomy_name ]->show_in_rest = true; 

     // Optionally customize the rest_base or controller class 
     $wp_taxonomies[ $taxonomy_name ]->rest_base = $taxonomy_name; 
     $wp_taxonomies[ $taxonomy_name ]->rest_controller_class = 'WP_REST_Terms_Controller'; 
     } 
    } 

Mit der oben in meinem functions.php, jetzt kann ich abfragen Nur der benutzerdefinierte Posttyp und die Taxonomie mit der REST-API. Hier ist eine Beispielabfrage:

http://www.mywebsite.com/wp-json/wp/v2/tribe_events?tribe_events_cat=64

Allerdings habe ich immer noch nicht sehen, eine der benutzerdefinierten Plugin Daten pro-Ereignis. Alles, was ich sehe, sind die grundlegenden Standard-WP-Felder.

So, jetzt muss ich mehr auf meine functions.php hinzufügen:

/* Add specific endpoints to REST API. 
* The TEC plugin has good documentation, and they have a 
* list of the variables. With any other plugin, you might 
* have to do more detective work. */ 

add_action('rest_api_init', 'slug_register_event_venue'); 

    function slug_register_event_venue() { 
     register_rest_field('tribe_events', 
      '_EventVenueID', 
      array(
       'get_callback' => 'slug_get_event_venue', 
       'schema'   => null 
      ) 
     ); 
    } 

function slug_get_event_venue($object, $field_name, $request) { 

    $postId = tribe_get_venue_id($object[ 'id' ]); 

    if (class_exists('Tribe__Events__Pro__Geo_Loc')) { 
      $output[ 'locid' ] = (float) $postId; 
      $output[ 'lat' ] = (float) get_post_meta($postId, Tribe__Events__Pro__Geo_Loc::LAT, true); 
      $output[ 'lng' ] = (float) get_post_meta($postId, Tribe__Events__Pro__Geo_Loc::LNG, true); 
     } else { 
      $output = array(
       'locid' => 0, 
       'lat' => 0, 
       'lng' => 0, 
      ); 
     } 

     return $output; 

} 

... und ein paar mehr Endpunktdefinitionen, von denen ich ohne den Code hier.

Jetzt, wenn ich dieselbe Abfrage von früher ausführen, sind neue Datenfelder in JSON vorhanden: alle Endpunkte, die ich hinzugefügt habe.

An dieser Stelle möchte ich eine Menge Dinge von der REST-API-Ausgabe (all die verschiedenen WP-Sachen) ausschließen und nur die Ereignisfelder zurückgeben, die mich interessieren. Dazu füge ich einfach eine "& Felder" Parameter zu meiner Abfrage, mit durch Komma getrennten Feldern. Es gibt auch eine per_page und Bestellparameter.

http://www.mywebsite.com/wp-json/wp/v2/tribe_events?tribe_events_cat=64&per_page=100&order=asc&fields=id,title.rendered,_EventVenueID.lat,_EventVenueID.lng,_EventVenueID.locid,_EventStartDate.startdate,tribe_events_cat

Dies gibt JSON-Daten mit nur der Daten, die ich interessiert bin.

Die TEC-Plugin-Hersteller erklärt hat, werden sie bald einmal offizielle REST-API-Unterstützung vorstellen. Das bedeutet, dass ich in der Zukunft den gesamten Code in functions.php eliminieren kann, und benutze einfach jede Schnittstelle, die der Plugin-Hersteller erzeugt ... hoffentlich eine nette sexy Seite innerhalb der Plugin-Einstellungen.

Nun, da WP (4.7) mehr oder weniger eine voll funktionsfähige REST-API hat, ist der Ball im Gericht der Plugin-Hersteller, um Unterstützung dafür zu bauen. In diesem Jahr sollten Plugins entsprechend aktualisiert werden.