WordPress Rest API

Is it possible to access pluggin’s data from WordPress database with some Rest API. I saw WP REST API but it doesn’t give access to pluggin’s data.

More specifically I use LearnDash pluggin and I want to access courses infos but they doesn’t provide any API to access it.

Read More

Thanks

Related posts

2 comments

  1. Overall you need to search Google for things having to do with “WordPress rest api custom post type” and eventually you’ll be dealing with registering custom post types and endpoints in your theme’s functions.php

    Here is the manual: https://developer.wordpress.org/rest-api/extending-the-rest-api

    As an example, here is my situation: I’m using WordPress (4.7) and The Events Calendar (“TEC”) plugin. I’m querying the WP DB from an Android app using the REST API, however the only data that’s available to REST is basic WP post stuff. I need to expose the custom data in the TEC plugin to the REST API. In order to do that, I’ve included the following into my functions.php in my theme:

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

    With the above in my functions.php, now I can query just the custom post type and taxonomy with the REST API. Here’s a sample query:

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

    However, I still don’t see any of the custom plugin data per-event. All I see are the basic standard WP fields.

    So now I have to add more to my functions.php:

    /* 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;
    
    }
    

    … and a bunch more endpoint definitions of which I’m excluding the code here.

    Now when I run the same query from earlier, new data fields are present in the JSON: all of the endpoints I’ve added.

    At this point I want to exclude a ton of things from the REST API output (all the miscellaneous WP stuff) and just return the event fields I’m interested in. To do that I just add a “&fields” parameter to my query, with fields seperated by comma. There’s also a per_page and order parameters too.

    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

    This returns JSON data with only the data I’m interested in.

    The TEC plugin maker has stated they’ll be introducing official REST API support sometime soon. This means in the future I can probably eliminate all of this code in functions.php, and just utilize whatever interface the plugin maker comes up with… hopefully a nice sexy page inside the plugin settings.

    Now that WP (4.7) has more or less a fully featured REST API, the ball is in the court of the plugin makers to build support for it. So this year you should see plugins be updated accordingly.

  2. When you are creating the custom post type in WordPress just add one more parameter show_in_rest as true for the support the rest API for Custom post type.

    /**
    * Register a book post type, with REST API support
    *
    * Based on example at: 
      https://codex.wordpress.org/Function_Reference/register_post_type
    */
    add_action( 'init', 'my_book_cpt' );
       function my_book_cpt() {
       $args = array(
              'public'       => true,
              'show_in_rest' => true,
              'label'        => 'Books'
      );
      register_post_type( 'book', $args );
    }
    

    Please visit here.

    Then you can use the custom endpoint by the URL like this:

    https://example.com/wp-json/wp/v2/book

Comments are closed.