Skip to content

Instantly share code, notes, and snippets.

@ivandoric
Last active September 3, 2023 00:16
Show Gist options
  • Save ivandoric/089443880872f1b81ae74f2502e41a1c to your computer and use it in GitHub Desktop.
Save ivandoric/089443880872f1b81ae74f2502e41a1c to your computer and use it in GitHub Desktop.
WordPress Rest API Custom Endpoints Video Tutorials Notes - Check out the videos: https://www.youtube.com/watch?v=C2twS9ArdCI and https://www.youtube.com/watch?v=76sJL9fd12Y
<?php
/**
* Plugin Name: Custom API
* Plugin URI: http://chrushingit.com
* Description: Crushing it!
* Version: 1.0
* Author: Art Vandelay
* Author URI: http://watch-learn.com
*/
function wl_posts() {
$args = [
'numberposts' => 99999,
'post_type' => 'post'
];
$posts = get_posts($args);
$data = [];
$i = 0;
foreach($posts as $post) {
$data[$i]['id'] = $post->ID;
$data[$i]['title'] = $post->post_title;
$data[$i]['content'] = $post->post_content;
$data[$i]['slug'] = $post->post_name;
$data[$i]['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail');
$data[$i]['featured_image']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium');
$data[$i]['featured_image']['large'] = get_the_post_thumbnail_url($post->ID, 'large');
$i++;
}
return $data;
}
function wl_post( $slug ) {
$args = [
'name' => $slug['slug'],
'post_type' => 'post'
];
$post = get_posts($args);
$data['id'] = $post[0]->ID;
$data['title'] = $post[0]->post_title;
$data['content'] = $post[0]->post_content;
$data['slug'] = $post[0]->post_name;
$data['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post[0]->ID, 'thumbnail');
$data['featured_image']['medium'] = get_the_post_thumbnail_url($post[0]->ID, 'medium');
$data['featured_image']['large'] = get_the_post_thumbnail_url($post[0]->ID, 'large');
return $data;
}
// Used in this video https://www.youtube.com/watch?v=76sJL9fd12Y
function wl_products() {
$args = [
'numberposts' => 99999,
'post_type' => 'products'
];
$posts = get_posts($args);
$data = [];
$i = 0;
foreach($posts as $post) {
$data[$i]['id'] = $post->ID;
$data[$i]['title'] = $post->post_title;
$data[$i]['slug'] = $post->post_name;
$data[$i]['price'] = get_field('price', $post->ID);
$data[$i]['delivery'] = get_field('delivery', $post->ID);
$i++;
}
return $data;
}
add_action('rest_api_init', function() {
register_rest_route('wl/v1', 'posts', [
'methods' => 'GET',
'callback' => 'wl_posts',
]);
register_rest_route( 'wl/v1', 'posts/(?P<slug>[a-zA-Z0-9-]+)', array(
'methods' => 'GET',
'callback' => 'wl_post',
) );
// Used in this video: https://www.youtube.com/watch?v=76sJL9fd12Y
register_rest_route('wl/v1', 'products', [
'methods' => 'GET',
'callback' => 'wl_products',
]);
});
@hamzu06
Copy link

hamzu06 commented Sep 14, 2020

Thank You @ivandoric, my issue is resolved.

@theahmedoff
Copy link

Thank You @ivandoric

@ivandoric
Copy link
Author

@theahmedoff No problem! :)

@harpreetin
Copy link

custom post type shows field values on all posts url but shows null values on single post url.

@RobertCrx
Copy link

Hey I wanna thank you for this snippet. It really helped me man.
I would want to ask you if there is a way to have an offset or a pagination inside the rest-api ? I want to add another filter like "?page=1,2,3" etc
Thank you.

@sharpnife
Copy link

Hi,
I tried the way you coded the endpoint, but for some reason my endpoint is not working.
When I go to the endpoints I'm directed towards the homepage of the site.
Can you help? Thanks in advance

Pastebin: https://pastebin.com/LeeEnMvb

@ivandoric
Copy link
Author

@Esiarp Maybe you need to change the permalinks in WP admin. To use something like /postname/ instead of /?p=123

@sharpnife
Copy link

@ivandoric That was exactly the issue! I changed it to "Day and name" and works perfectly. Thank you!

@08yasins
Copy link

@ivandoric First of all thank you to share this content for us. But, I have some problems at this code. I don't know where can I find the endpoints for the wordpress article. For example I want to get post category but I don't know the endpoint for category like get_the_post_thumbnail_url. Please help us.
Thank you for code again

@angelchickenwings
Copy link

does simply running the code add it as a plug in? that is the part I cannot figure out still lol

@AliNaraghiA
Copy link

can i use ?slug= or /id like>> http://site/wp-json/wp/v2/posts/id or ?slug= with this plugin ? No . and why i cant:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment